middle-end: Allow _BitInt(65535) [PR102989]
Checks
Commit Message
Hi!
The following patch lifts further restrictions which limited _BitInt to at
most 16319 bits up to 65535.
The problem was mainly in INTEGER_CST representation, which had 3
unsigned char members to describe lengths in number of 64-bit limbs, which
it wanted to fit into 32 bits. This patch removes the third one which was
just a cache to save a few compile time cycles for wi::to_offset and
enlarges the other two members to unsigned short.
Furthermore, the same problem has been in some uses of trailing_wide_int*
(in value-range-storage*) and value-range-storage* itself, while other
uses of trailing_wide_int* have been fine (e.g. CONST_POLY_INT, where no
constants will be larger than 3/5/9/11 limbs depending on target, so 255
limit is plenty). So, the patch turns trailing_wide_int* into templates
with the type for length members as template parameter, where CONST_POLY_INT
uses unsigned char for that (as before) and value-range-storage* uses
unsigned short, so that it can handle even 16320-65535 bits BITINT_TYPE
ranges. The cc1plus growth is about 16K, so not really significant for 38M
.text section.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Note, the reason for the new limit is
unsigned int precision : 16;
TYPE_PRECISION limit, if we wanted to overcome that, TYPE_PRECISION would
need to use some other member for BITINT_TYPE from all the others and
we could reach that way 4194239 limit (65535 * 64 - 1, again implied by
INTEGER_CST and value-range-storage*). Dunno if that is
worth it or if it is something we want to do for GCC 14 though.
2023-10-13 Jakub Jelinek <jakub@redhat.com>
PR c/102989
gcc/
* tree-core.h (struct tree_base): Remove int_length.offset
member, change type of int_length.unextended and int_length.extended
from unsigned char to unsigned short.
* tree.h (TREE_INT_CST_OFFSET_NUNITS): Remove.
(wi::extended_tree <N>::get_len): Don't use TREE_INT_CST_OFFSET_NUNITS,
instead compute it at runtime from TREE_INT_CST_EXT_NUNITS and
TREE_INT_CST_NUNITS.
* tree.cc (wide_int_to_tree_1): Don't assert
TREE_INT_CST_OFFSET_NUNITS value.
(make_int_cst): Don't initialize TREE_INT_CST_OFFSET_NUNITS.
* wide-int.h (WIDE_INT_MAX_ELTS): Change from 255 to 1024.
(WIDEST_INT_MAX_ELTS): Change from 510 to 2048, adjust comment.
(trailing_wide_int_storage): Change into template, change
unsigned char uses in it to the template parameter.
(trailing_wide_int): Change into alias template.
(wi::int_traits): Specialize for both
trailing_wide_int_storage <unsigned char> and
trailing_wide_int_storage <unsigned short>.
(trailing_wide_ints): Add TL template parameter, use it instead of
unsigned char for m_max_len and m_len[].len types.
(TRAILING_WIDE_INT_ACCESSOR): Add TL argument.
(gt_ggc_mx, gt_pch_nx): Add TL template argument to
trailing_wide_ints.
* rtl.h (const_poly_int_def): Add unsigned char template argument
to trailing_wide_ints.
* emit-rtl.cc (immed_wide_int_const): Likewise.
* value-range-storage.h (irange_storage::lengths_address): Change
return type from const unsigned char * to const unsigned short *.
(irange_storage::write_lengths_address): Change return type from
unsigned char * to unsigned short *.
* value-range-storage.cc (irange_storage::write_lengths_address):
Likewise.
(irange_storage::lengths_address): Change return type from
const unsigned char * to const unsigned short *.
(write_wide_int): Change len argument type from unsigned char *&
to unsigned short *&.
(irange_storage::set_irange): Change len variable type from
unsigned char * to unsigned short *.
(read_wide_int): Change len argument type from unsigned char to
unsigned short. Use trailing_wide_int_storage <unsigned short>
instead of trailing_wide_int_storage and
trailing_wide_int <unsigned short> instead of trailing_wide_int.
(irange_storage::get_irange): Change len variable type from
unsigned char * to unsigned short *.
(irange_storage::size): Multiply n by sizeof (unsigned short)
in len_size variable initialization.
(irange_storage::dump): Change len variable type from
unsigned char * to unsigned short *.
gcc/cp/
* module.cc (trees_out::start, trees_in::start): Remove
TREE_INT_CST_OFFSET_NUNITS handling.
gcc/testsuite/
* gcc.dg/bitint-38.c: Change into dg-do run test, in addition
to checking the addition, division and right shift results at compile
time check it also at runtime.
* gcc.dg/bitint-39.c: New test.
Jakub
Comments
On Fri, 13 Oct 2023, Jakub Jelinek wrote:
> Hi!
>
> The following patch lifts further restrictions which limited _BitInt to at
> most 16319 bits up to 65535.
> The problem was mainly in INTEGER_CST representation, which had 3
> unsigned char members to describe lengths in number of 64-bit limbs, which
> it wanted to fit into 32 bits. This patch removes the third one which was
> just a cache to save a few compile time cycles for wi::to_offset and
> enlarges the other two members to unsigned short.
> Furthermore, the same problem has been in some uses of trailing_wide_int*
> (in value-range-storage*) and value-range-storage* itself, while other
> uses of trailing_wide_int* have been fine (e.g. CONST_POLY_INT, where no
> constants will be larger than 3/5/9/11 limbs depending on target, so 255
> limit is plenty). So, the patch turns trailing_wide_int* into templates
> with the type for length members as template parameter, where CONST_POLY_INT
> uses unsigned char for that (as before) and value-range-storage* uses
> unsigned short, so that it can handle even 16320-65535 bits BITINT_TYPE
> ranges. The cc1plus growth is about 16K, so not really significant for 38M
> .text section.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Looks reasonable. Please give Richard a chance to comment though.
> Note, the reason for the new limit is
> unsigned int precision : 16;
> TYPE_PRECISION limit, if we wanted to overcome that, TYPE_PRECISION would
> need to use some other member for BITINT_TYPE from all the others and
> we could reach that way 4194239 limit (65535 * 64 - 1, again implied by
> INTEGER_CST and value-range-storage*). Dunno if that is
> worth it or if it is something we want to do for GCC 14 though.
Even this 16320 to 65535 precision enhancement is not really necessary
IMHO. I think we should stick with that for GCC 14 and see how people
will use _BitInt - given it's not a VL type very high static precisions
are likely not going to see much use. 65535 bit crypto keys are already
large enough(?)
Richard.
> 2023-10-13 Jakub Jelinek <jakub@redhat.com>
>
> PR c/102989
> gcc/
> * tree-core.h (struct tree_base): Remove int_length.offset
> member, change type of int_length.unextended and int_length.extended
> from unsigned char to unsigned short.
> * tree.h (TREE_INT_CST_OFFSET_NUNITS): Remove.
> (wi::extended_tree <N>::get_len): Don't use TREE_INT_CST_OFFSET_NUNITS,
> instead compute it at runtime from TREE_INT_CST_EXT_NUNITS and
> TREE_INT_CST_NUNITS.
> * tree.cc (wide_int_to_tree_1): Don't assert
> TREE_INT_CST_OFFSET_NUNITS value.
> (make_int_cst): Don't initialize TREE_INT_CST_OFFSET_NUNITS.
> * wide-int.h (WIDE_INT_MAX_ELTS): Change from 255 to 1024.
> (WIDEST_INT_MAX_ELTS): Change from 510 to 2048, adjust comment.
> (trailing_wide_int_storage): Change into template, change
> unsigned char uses in it to the template parameter.
> (trailing_wide_int): Change into alias template.
> (wi::int_traits): Specialize for both
> trailing_wide_int_storage <unsigned char> and
> trailing_wide_int_storage <unsigned short>.
> (trailing_wide_ints): Add TL template parameter, use it instead of
> unsigned char for m_max_len and m_len[].len types.
> (TRAILING_WIDE_INT_ACCESSOR): Add TL argument.
> (gt_ggc_mx, gt_pch_nx): Add TL template argument to
> trailing_wide_ints.
> * rtl.h (const_poly_int_def): Add unsigned char template argument
> to trailing_wide_ints.
> * emit-rtl.cc (immed_wide_int_const): Likewise.
> * value-range-storage.h (irange_storage::lengths_address): Change
> return type from const unsigned char * to const unsigned short *.
> (irange_storage::write_lengths_address): Change return type from
> unsigned char * to unsigned short *.
> * value-range-storage.cc (irange_storage::write_lengths_address):
> Likewise.
> (irange_storage::lengths_address): Change return type from
> const unsigned char * to const unsigned short *.
> (write_wide_int): Change len argument type from unsigned char *&
> to unsigned short *&.
> (irange_storage::set_irange): Change len variable type from
> unsigned char * to unsigned short *.
> (read_wide_int): Change len argument type from unsigned char to
> unsigned short. Use trailing_wide_int_storage <unsigned short>
> instead of trailing_wide_int_storage and
> trailing_wide_int <unsigned short> instead of trailing_wide_int.
> (irange_storage::get_irange): Change len variable type from
> unsigned char * to unsigned short *.
> (irange_storage::size): Multiply n by sizeof (unsigned short)
> in len_size variable initialization.
> (irange_storage::dump): Change len variable type from
> unsigned char * to unsigned short *.
> gcc/cp/
> * module.cc (trees_out::start, trees_in::start): Remove
> TREE_INT_CST_OFFSET_NUNITS handling.
> gcc/testsuite/
> * gcc.dg/bitint-38.c: Change into dg-do run test, in addition
> to checking the addition, division and right shift results at compile
> time check it also at runtime.
> * gcc.dg/bitint-39.c: New test.
>
> --- gcc/tree-core.h.jj 2023-08-24 13:22:55.799423580 +0200
> +++ gcc/tree-core.h 2023-10-12 17:28:23.539192222 +0200
> @@ -1091,17 +1091,11 @@ struct GTY(()) tree_base {
> struct {
> /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
> its native precision. */
> - unsigned char unextended;
> + unsigned short unextended;
>
> /* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to
> wider precisions based on its TYPE_SIGN. */
> - unsigned char extended;
> -
> - /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
> - offset_int precision, with smaller integers being extended
> - according to their TYPE_SIGN. This is equal to one of the two
> - fields above but is cached for speed. */
> - unsigned char offset;
> + unsigned short extended;
> } int_length;
>
> /* VEC length. This field is only used with TREE_VEC. */
> --- gcc/tree.h.jj 2023-10-12 17:20:33.251599439 +0200
> +++ gcc/tree.h 2023-10-12 17:28:23.542192181 +0200
> @@ -1139,8 +1139,6 @@ extern void omp_clause_range_check_faile
> (INTEGER_CST_CHECK (NODE)->base.u.int_length.unextended)
> #define TREE_INT_CST_EXT_NUNITS(NODE) \
> (INTEGER_CST_CHECK (NODE)->base.u.int_length.extended)
> -#define TREE_INT_CST_OFFSET_NUNITS(NODE) \
> - (INTEGER_CST_CHECK (NODE)->base.u.int_length.offset)
> #define TREE_INT_CST_ELT(NODE, I) TREE_INT_CST_ELT_CHECK (NODE, I)
> #define TREE_INT_CST_LOW(NODE) \
> ((unsigned HOST_WIDE_INT) TREE_INT_CST_ELT (NODE, 0))
> @@ -6453,7 +6451,15 @@ inline unsigned int
> wi::extended_tree <N>::get_len () const
> {
> if (N == ADDR_MAX_PRECISION)
> - return TREE_INT_CST_OFFSET_NUNITS (m_t);
> + {
> + /* to_offset can only be applied to trees that are offset_int-sized
> + or smaller. EXT_LEN is correct if it fits, otherwise the constant
> + must be exactly the precision of offset_int and so LEN is correct. */
> + unsigned int ext_len = TREE_INT_CST_EXT_NUNITS (m_t);
> + if (ext_len <= OFFSET_INT_ELTS)
> + return ext_len;
> + return TREE_INT_CST_NUNITS (m_t);
> + }
> else if (N >= WIDEST_INT_MAX_PRECISION)
> return TREE_INT_CST_EXT_NUNITS (m_t);
> else
> --- gcc/tree.cc.jj 2023-10-12 16:01:04.259164215 +0200
> +++ gcc/tree.cc 2023-10-12 17:28:23.538192235 +0200
> @@ -1763,7 +1763,6 @@ wide_int_to_tree_1 (tree type, const wid
> /* Make sure no one is clobbering the shared constant. */
> gcc_checking_assert (TREE_TYPE (t) == type
> && TREE_INT_CST_NUNITS (t) == 1
> - && TREE_INT_CST_OFFSET_NUNITS (t) == 1
> && TREE_INT_CST_EXT_NUNITS (t) == 1
> && TREE_INT_CST_ELT (t, 0) == hwi);
> return t;
> @@ -2789,14 +2788,6 @@ make_int_cst (int len, int ext_len MEM_S
> TREE_SET_CODE (t, INTEGER_CST);
> TREE_INT_CST_NUNITS (t) = len;
> TREE_INT_CST_EXT_NUNITS (t) = ext_len;
> - /* to_offset can only be applied to trees that are offset_int-sized
> - or smaller. EXT_LEN is correct if it fits, otherwise the constant
> - must be exactly the precision of offset_int and so LEN is correct. */
> - if (ext_len <= OFFSET_INT_ELTS)
> - TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
> - else
> - TREE_INT_CST_OFFSET_NUNITS (t) = len;
> -
> TREE_CONSTANT (t) = 1;
>
> return t;
> --- gcc/wide-int.h.jj 2023-10-12 16:07:22.824162461 +0200
> +++ gcc/wide-int.h 2023-10-12 19:48:52.161590454 +0200
> @@ -247,14 +247,13 @@ along with GCC; see the file COPYING3.
> #define WIDE_INT_MAX_INL_PRECISION \
> (WIDE_INT_MAX_INL_ELTS * HOST_BITS_PER_WIDE_INT)
>
> /* Precision of wide_int and largest _BitInt precision + 1 we can
> support. */
> -#define WIDE_INT_MAX_ELTS 255
> +#define WIDE_INT_MAX_ELTS 1024
> #define WIDE_INT_MAX_PRECISION (WIDE_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT)
>
> -/* Precision of widest_int and largest _BitInt precision + 1 we can
> - support. */
> -#define WIDEST_INT_MAX_ELTS 510
> +/* Precision of widest_int. */
> +#define WIDEST_INT_MAX_ELTS 2048
> #define WIDEST_INT_MAX_PRECISION (WIDEST_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT)
>
> STATIC_ASSERT (WIDE_INT_MAX_INL_ELTS < WIDE_INT_MAX_ELTS);
> @@ -1709,6 +1708,7 @@ get_binary_precision (const T1 &, const
> }
>
> /* A reference to one element of a trailing_wide_ints structure. */
> +template <typename TL>
> class trailing_wide_int_storage
> {
> private:
> @@ -1717,14 +1717,14 @@ private:
> unsigned int m_precision;
>
> /* A pointer to the length field. */
> - unsigned char *m_len;
> + TL *m_len;
>
> /* A pointer to the HWI array. There are enough elements to hold all
> values of precision M_PRECISION. */
> HOST_WIDE_INT *m_val;
>
> public:
> - trailing_wide_int_storage (unsigned int, unsigned char *, HOST_WIDE_INT *);
> + trailing_wide_int_storage (unsigned int, TL *, HOST_WIDE_INT *);
>
> /* The standard generic_wide_int storage methods. */
> unsigned int get_len () const;
> @@ -1737,52 +1737,60 @@ public:
> trailing_wide_int_storage &operator = (const T &);
> };
>
> -typedef generic_wide_int <trailing_wide_int_storage> trailing_wide_int;
> +template <typename TL>
> +using trailing_wide_int = generic_wide_int <trailing_wide_int_storage <TL> >;
>
> /* trailing_wide_int behaves like a wide_int. */
> namespace wi
> {
> template <>
> - struct int_traits <trailing_wide_int_storage>
> + struct int_traits <trailing_wide_int_storage <unsigned char> >
> + : public int_traits <wide_int_storage> {};
> +
> + template <>
> + struct int_traits <trailing_wide_int_storage <unsigned short> >
> : public int_traits <wide_int_storage> {};
> }
>
> /* A variable-length array of wide_int-like objects that can be put
> at the end of a variable-sized structure. The number of objects is
> at most N and can be set at runtime by using set_precision().
> + TL is the type for lengths, should be either unsigned char (to be
> + used only after _BitInt lowering for code which shouldn't encounter
> + really large wide ints) or unsigned short.
>
> Use extra_size to calculate how many bytes beyond the
> sizeof need to be allocated. Use set_precision to initialize the
> structure. */
> -template <int N>
> +template <int N, typename TL>
> struct GTY((user)) trailing_wide_ints
> {
> private:
> /* The shared precision of each number. */
> unsigned short m_precision;
>
> - /* The shared maximum length of each number. */
> - unsigned char m_max_len;
> -
> /* The number of elements. */
> unsigned char m_num_elements;
>
> + /* The shared maximum length of each number. */
> + TL m_max_len;
> +
> /* The current length of each number.
> Avoid char array so the whole structure is not a typeless storage
> that will, in turn, turn off TBAA on gimple, trees and RTL. */
> - struct {unsigned char len;} m_len[N];
> + struct { TL len; } m_len[N];
>
> /* The variable-length part of the structure, which always contains
> at least one HWI. Element I starts at index I * M_MAX_LEN. */
> HOST_WIDE_INT m_val[1];
>
> public:
> - typedef WIDE_INT_REF_FOR (trailing_wide_int_storage) const_reference;
> + typedef WIDE_INT_REF_FOR (trailing_wide_int_storage <TL>) const_reference;
>
> void set_precision (unsigned int precision, unsigned int num_elements = N);
> unsigned int get_precision () const { return m_precision; }
> unsigned int num_elements () const { return m_num_elements; }
> - trailing_wide_int operator [] (unsigned int);
> + trailing_wide_int <TL> operator [] (unsigned int);
> const_reference operator [] (unsigned int) const;
> static size_t extra_size (unsigned int precision,
> unsigned int num_elements = N);
> @@ -1790,39 +1798,46 @@ public:
> m_num_elements); }
> };
>
> -inline trailing_wide_int_storage::
> -trailing_wide_int_storage (unsigned int precision, unsigned char *len,
> +template <typename TL>
> +inline trailing_wide_int_storage<TL>::
> +trailing_wide_int_storage (unsigned int precision, TL *len,
> HOST_WIDE_INT *val)
> : m_precision (precision), m_len (len), m_val (val)
> {
> }
>
> +template <typename TL>
> inline unsigned int
> -trailing_wide_int_storage::get_len () const
> +trailing_wide_int_storage<TL>::get_len () const
> {
> return *m_len;
> }
>
> +template <typename TL>
> inline unsigned int
> -trailing_wide_int_storage::get_precision () const
> +trailing_wide_int_storage<TL>::get_precision () const
> {
> return m_precision;
> }
>
> +template <typename TL>
> inline const HOST_WIDE_INT *
> -trailing_wide_int_storage::get_val () const
> +trailing_wide_int_storage<TL>::get_val () const
> {
> return m_val;
> }
>
> +template <typename TL>
> inline HOST_WIDE_INT *
> -trailing_wide_int_storage::write_val (unsigned int)
> +trailing_wide_int_storage<TL>::write_val (unsigned int)
> {
> return m_val;
> }
>
> +template <typename TL>
> inline void
> -trailing_wide_int_storage::set_len (unsigned int len, bool is_sign_extended)
> +trailing_wide_int_storage<TL>::set_len (unsigned int len,
> + bool is_sign_extended)
> {
> *m_len = len;
> if (!is_sign_extended && len * HOST_BITS_PER_WIDE_INT > m_precision)
> @@ -1830,9 +1845,10 @@ trailing_wide_int_storage::set_len (unsi
> m_precision % HOST_BITS_PER_WIDE_INT);
> }
>
> +template <typename TL>
> template <typename T>
> -inline trailing_wide_int_storage &
> -trailing_wide_int_storage::operator = (const T &x)
> +inline trailing_wide_int_storage<TL> &
> +trailing_wide_int_storage<TL>::operator = (const T &x)
> {
> WIDE_INT_REF_FOR (T) xi (x, m_precision);
> wi::copy (*this, xi);
> @@ -1841,10 +1857,10 @@ trailing_wide_int_storage::operator = (c
>
> /* Initialize the structure and record that all elements have precision
> PRECISION. NUM_ELEMENTS can be no more than N. */
> -template <int N>
> +template <int N, typename TL>
> inline void
> -trailing_wide_ints <N>::set_precision (unsigned int precision,
> - unsigned int num_elements)
> +trailing_wide_ints <N, TL>::set_precision (unsigned int precision,
> + unsigned int num_elements)
> {
> gcc_checking_assert (num_elements <= N);
> m_num_elements = num_elements;
> @@ -1853,17 +1869,17 @@ trailing_wide_ints <N>::set_precision (u
> }
>
> /* Return a reference to element INDEX. */
> -template <int N>
> -inline trailing_wide_int
> -trailing_wide_ints <N>::operator [] (unsigned int index)
> +template <int N, typename TL>
> +inline trailing_wide_int <TL>
> +trailing_wide_ints <N, TL>::operator [] (unsigned int index)
> {
> - return trailing_wide_int_storage (m_precision, &m_len[index].len,
> - &m_val[index * m_max_len]);
> + return trailing_wide_int_storage<TL> (m_precision, &m_len[index].len,
> + &m_val[index * m_max_len]);
> }
>
> -template <int N>
> -inline typename trailing_wide_ints <N>::const_reference
> -trailing_wide_ints <N>::operator [] (unsigned int index) const
> +template <int N, typename TL>
> +inline typename trailing_wide_ints <N, TL>::const_reference
> +trailing_wide_ints <N, TL>::operator [] (unsigned int index) const
> {
> return wi::storage_ref (&m_val[index * m_max_len],
> m_len[index].len, m_precision);
> @@ -1873,10 +1889,10 @@ trailing_wide_ints <N>::operator [] (uns
> structure in order to handle NUM_ELEMENTS wide_ints of precision
> PRECISION. NUM_ELEMENTS is the number of elements, and defaults
> to N. */
> -template <int N>
> +template <int N, typename TL>
> inline size_t
> -trailing_wide_ints <N>::extra_size (unsigned int precision,
> - unsigned int num_elements)
> +trailing_wide_ints <N, TL>::extra_size (unsigned int precision,
> + unsigned int num_elements)
> {
> unsigned int max_len = WIDE_INT_MAX_HWIS (precision);
> gcc_checking_assert (num_elements <= N);
> @@ -1886,8 +1902,8 @@ trailing_wide_ints <N>::extra_size (unsi
> /* This macro is used in structures that end with a trailing_wide_ints field
> called FIELD. It declares get_NAME() and set_NAME() methods to access
> element I of FIELD. */
> -#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I) \
> - trailing_wide_int get_##NAME () { return FIELD[I]; } \
> +#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I, TL) \
> + trailing_wide_int <TL> get_##NAME () { return FIELD[I]; } \
> template <typename T> void set_##NAME (const T &x) { FIELD[I] = x; }
>
> namespace wi
> @@ -3922,21 +3938,21 @@ template<int N>
> void gt_pch_nx (generic_wide_int <widest_int_storage <N> > *,
> gt_pointer_operator, void *) = delete;
>
> -template<int N>
> +template<int N, typename TL>
> void
> -gt_ggc_mx (trailing_wide_ints <N> *)
> +gt_ggc_mx (trailing_wide_ints <N, TL> *)
> {
> }
>
> -template<int N>
> +template<int N, typename TL>
> void
> -gt_pch_nx (trailing_wide_ints <N> *)
> +gt_pch_nx (trailing_wide_ints <N, TL> *)
> {
> }
>
> -template<int N>
> +template<int N, typename TL>
> void
> -gt_pch_nx (trailing_wide_ints <N> *, gt_pointer_operator, void *)
> +gt_pch_nx (trailing_wide_ints <N, TL> *, gt_pointer_operator, void *)
> {
> }
>
> --- gcc/rtl.h.jj 2023-10-12 17:20:33.252599425 +0200
> +++ gcc/rtl.h 2023-10-12 17:49:10.512175574 +0200
> @@ -290,7 +290,7 @@ struct GTY((variable_size)) hwivec_def {
> (RTL_FLAG_CHECK1("CWI_PUT_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem = (NUM))
>
> struct GTY((variable_size)) const_poly_int_def {
> - trailing_wide_ints<NUM_POLY_INT_COEFFS> coeffs;
> + trailing_wide_ints<NUM_POLY_INT_COEFFS, unsigned char> coeffs;
> };
>
> /* RTL expression ("rtx"). */
> --- gcc/emit-rtl.cc.jj 2023-10-03 15:39:49.612854328 +0200
> +++ gcc/emit-rtl.cc 2023-10-12 18:05:43.784655293 +0200
> @@ -772,7 +772,7 @@ immed_wide_int_const (const poly_wide_in
> enough that we get no benefit from using VOIDmode, and various places
> assume that VOIDmode implies CONST_INT. Using the real mode seems like
> the right long-term direction anyway. */
> - typedef trailing_wide_ints<NUM_POLY_INT_COEFFS> twi;
> + typedef trailing_wide_ints<NUM_POLY_INT_COEFFS, unsigned char> twi;
> size_t extra_size = twi::extra_size (prec);
> x = rtx_alloc_v (CONST_POLY_INT,
> sizeof (struct const_poly_int_def) + extra_size);
> --- gcc/value-range-storage.h.jj 2023-07-17 09:07:42.156282822 +0200
> +++ gcc/value-range-storage.h 2023-10-12 17:56:14.679386043 +0200
> @@ -73,8 +73,8 @@ public:
> private:
> DISABLE_COPY_AND_ASSIGN (irange_storage);
> static size_t size (const irange &r);
> - const unsigned char *lengths_address () const;
> - unsigned char *write_lengths_address ();
> + const unsigned short *lengths_address () const;
> + unsigned short *write_lengths_address ();
> friend void gt_ggc_mx_irange_storage (void *);
> friend void gt_pch_p_14irange_storage (void *, void *,
> gt_pointer_operator, void *);
> @@ -97,7 +97,7 @@ private:
> // Another variable-length part of the structure following the HWIs.
> // This is the length of each wide_int in m_val.
> //
> - // unsigned char m_len[];
> + // unsigned short m_len[];
>
> irange_storage (const irange &r);
> };
> --- gcc/value-range-storage.cc.jj 2023-07-17 09:07:42.156282822 +0200
> +++ gcc/value-range-storage.cc 2023-10-12 17:57:00.713760714 +0200
> @@ -229,14 +229,14 @@ vrange_storage::equal_p (const vrange &r
> // irange_storage implementation
> //============================================================================
>
> -unsigned char *
> +unsigned short *
> irange_storage::write_lengths_address ()
> {
> - return (unsigned char *)&m_val[(m_num_ranges * 2 + 2)
> - * WIDE_INT_MAX_HWIS (m_precision)];
> + return (unsigned short *)&m_val[(m_num_ranges * 2 + 2)
> + * WIDE_INT_MAX_HWIS (m_precision)];
> }
>
> -const unsigned char *
> +const unsigned short *
> irange_storage::lengths_address () const
> {
> return const_cast <irange_storage *> (this)->write_lengths_address ();
> @@ -263,7 +263,7 @@ irange_storage::irange_storage (const ir
> }
>
> static inline void
> -write_wide_int (HOST_WIDE_INT *&val, unsigned char *&len, const wide_int &w)
> +write_wide_int (HOST_WIDE_INT *&val, unsigned short *&len, const wide_int &w)
> {
> *len = w.get_len ();
> for (unsigned i = 0; i < *len; ++i)
> @@ -294,7 +294,7 @@ irange_storage::set_irange (const irange
> m_kind = VR_RANGE;
>
> HOST_WIDE_INT *val = &m_val[0];
> - unsigned char *len = write_lengths_address ();
> + unsigned short *len = write_lengths_address ();
>
> for (unsigned i = 0; i < r.num_pairs (); ++i)
> {
> @@ -317,11 +317,11 @@ irange_storage::set_irange (const irange
>
> static inline void
> read_wide_int (wide_int &w,
> - const HOST_WIDE_INT *val, unsigned char len, unsigned prec)
> + const HOST_WIDE_INT *val, unsigned short len, unsigned prec)
> {
> - trailing_wide_int_storage stow (prec, &len,
> - const_cast <HOST_WIDE_INT *> (val));
> - w = trailing_wide_int (stow);
> + HOST_WIDE_INT *valn = const_cast <HOST_WIDE_INT *> (val);
> + trailing_wide_int_storage <unsigned short> stow (prec, &len, valn);
> + w = trailing_wide_int <unsigned short> (stow);
> }
>
> // Restore a range of TYPE from storage into R.
> @@ -342,7 +342,7 @@ irange_storage::get_irange (irange &r, t
>
> gcc_checking_assert (TYPE_PRECISION (type) == m_precision);
> const HOST_WIDE_INT *val = &m_val[0];
> - const unsigned char *len = lengths_address ();
> + const unsigned short *len = lengths_address ();
>
> // Handle the common case where R can fit the new range.
> if (r.m_max_ranges >= m_num_ranges)
> @@ -411,7 +411,7 @@ irange_storage::size (const irange &r)
> unsigned n = r.num_pairs () * 2 + 2;
> unsigned hwi_size = ((n * WIDE_INT_MAX_HWIS (prec) - 1)
> * sizeof (HOST_WIDE_INT));
> - unsigned len_size = n;
> + unsigned len_size = n * sizeof (unsigned short);
> return sizeof (irange_storage) + hwi_size + len_size;
> }
>
> @@ -433,7 +433,7 @@ irange_storage::dump () const
> return;
>
> const HOST_WIDE_INT *val = &m_val[0];
> - const unsigned char *len = lengths_address ();
> + const unsigned short *len = lengths_address ();
> int i, j;
>
> fprintf (stderr, " lengths = [ ");
> --- gcc/cp/module.cc.jj 2023-10-10 12:04:39.822102088 +0200
> +++ gcc/cp/module.cc 2023-10-12 18:09:16.609764265 +0200
> @@ -5158,7 +5158,6 @@ trees_out::start (tree t, bool code_stre
> case INTEGER_CST:
> u (TREE_INT_CST_NUNITS (t));
> u (TREE_INT_CST_EXT_NUNITS (t));
> - u (TREE_INT_CST_OFFSET_NUNITS (t));
> break;
>
> case OMP_CLAUSE:
> @@ -5231,7 +5230,6 @@ trees_in::start (unsigned code)
> unsigned n = u ();
> unsigned e = u ();
> t = make_int_cst (n, e);
> - TREE_INT_CST_OFFSET_NUNITS(t) = u ();
> }
> break;
>
> --- gcc/testsuite/gcc.dg/bitint-38.c.jj 2023-10-12 16:01:04.278163963 +0200
> +++ gcc/testsuite/gcc.dg/bitint-38.c 2023-10-12 18:50:40.877103397 +0200
> @@ -1,18 +1,43 @@
> /* PR c/102989 */
> -/* { dg-do compile { target { bitint } } } */
> +/* { dg-do run { target { bitint } } } */
> /* { dg-options "-std=c2x" } */
>
> #if __BITINT_MAXWIDTH__ >= 16319
> -constexpr unsigned _BitInt(16319) a
> - = 4680985677016772612762154819367704422543836437669953782416002271793962834329168658813322158671064891592515774953720856634870923177432447705972876331990053749984553335872803574901499931018113920514837614959871082649647383371181551558627154389107216612303325331853355817576005118468541159326372619696331343658686953639145705781100644718684758413485893669336454109876999790801402128499090811881709104649674862313589352128970962606260330555361418355992844984747378584876584701151447719231148263122838630355037006001414407244263646996363302404142712756260212949394224832506196290059599922434186612301221326677697811837903387593458849038216955909915772285205237253020482154478415731138408115936384134250549382132629614483178985741405330900049927326885251150047829738932440914270003968904271522253086610789546710660692344537575931817539008652034390354024803064135722396104671425919208091873674380711701009695674400446914274879597856373383816513099167820636702860465475852408378923071709288494858771
8679328070760084086678347179914817925081838771618312732334619953338746336344235621880377969700575932441037647685522242087626242598557198281818035387041014982421454431301328519954419349662422321998640294484962248942200767856494617479789279508933089953562472777752533078949270357456411225295514777094292976154560435086940424655827475235351037015722948500440213104315345429039792938727637405493857897687860646721735939868427505051910441391428602410680811634071227305942736229370315135549833621317069889444840536939875718852316046029271487585787996817357832819135821597249351327129787563440079330192925005282225863601565085768302390070984541083848793677853325040788618095457604634069790858402095129504884493804786565702907285079744297614689529418499373699950548566574281131379540553067419984805580275990178637682206952934297126196311933247650406428586936204966208340578982843313215493324281743280941581054818065875039369227272958623284206565849097120192778001425881533311545969511794227355187664684482
1076723664040282772834511419891351278169017103987094803829594286352340468346618726088781492626816188657331359104171819822673805856317828499039088088223137258297373929043307673570090396947789598799922928643843532617012164811074618881774622628943539037974883812689130801860915090035870244061005819418130068390986470314677853605080103313411837904358287837401546257413240466939893527508931541065241929872307203876443882106193262544652290132364691671910332006127864146991404015366683569317248057949596070354929361158326955551600236075268435044105880162798380799161607987365282458662031599096921825176202707890730023698706855762932691688259365358964076595824577775275991183149118372047206055118463112864604063853894820407249837871368934941438119680605528546887256934334246075596746410297954458632358171428714141820918183384435681332379317541048252391710712196623406338702061195213724569303285402242853671386113148211535691685461836458295037538034378318055108240082414441205300401526732399959228346926528
5868527433894909787347879267219998553887947118371644230077196261091790054661137064507652696875808198227721893010845036272973896751342282223372868676411105110619802312478845334924428989367434296419583141353290734064957763692081580321158838506910105690489839411267714779909760922523919728126916698474467985072441061216678854230256137692581027738555375097332958050133139374022828048972138472210726471116051723494645640899149064935081338553896271776634260577632520862863253438112547576818030682762780487579974252843347131902268184630230744619001769580100555724349831351711453652423392733269844651810642872646454708320911151006405841043755773040569519694562001384853135600092723382281036377638632892616732587267367534070441436640794794969725805605344948061708104693047730058735906262800723879996685225467479857015996139751011885438578521415592516340586767183080003248698096281994426815656156629126260227960644144961063442364312856976883577079929899665615571717299720935330074769478622159225832048111890
15550505642082475400647639520782187776825395598257421714106473869797642678266380755873356747812273977691604147842741151722919464734890326772594979022403228191075586910464204870254674290437668861177639713112762996390246102030994917186957826982084194156870398312336059100521566034092740694642613192909850644003933745129291062576341213874815510099835708723355432970090139671120232910747665906191360160259512198160849784197597300106223945960886603127136037120000864968668651452411048372895607382907494278810971475663944948791458618662250238375166523484847507342040066801856222328988662049579299600545682490412754483621051190231623196265549391964259780178070495642538883789503379406531279338866955157646654913405181879254189185904298325865503395688786311067669273609670603076582607253527084977744533187145642686236350165593980428575119329911921382240780504527422630654086941060242757131313184709635181001199631726283364158943337968797uwb
> - + 99354435180574564299271266552222578172075113116713358325600655730552766787479906529073488397418185627579390846490733481721083971838270203779417259831075136362874065305263582535084372902419372769083862829043530791029045356756086045764861629983194277028512784082136414548372230796164016158756724532501484216792238294178342275181330910551802702492661616766771761496751642576408123442979356507296298018787580599440901688627305198172033523414583103638114823180832702324343293173238228189911345006016698689223960135129694778394564723458123123219242152418497721476874557602245592409527373190093485408949663635681583495013552292646467700180715905024417027872690979739798998376831221941031100897284256766902460911469939550379184257728400222882228329325425160915011494771608565644643769102932300919635731192306480266678963993527909826119575699789720381785195702784475407075028616785026579051927432258932256639948075689186448982737022854836763857176511040420021053529931765121664200850644524317531813
6580583354892267674889041242033269460909681977976560034521639039430725755677822374344395898396211372319355124789799542376234809210389368371137389713916828942026766061140994764454871500778783295925116755317509663914767477611797310044790324362690289238226376759132803823570859340156379301941812445316638647179246842100385589420658435473148936366813407794620354606723723565774648029683165179179038598139755845890590464139424627978274673600910186236686806836341197638855769792191431717937120644408539077963483136972337005076467885284677936949723237478069190528099236807976274735224551960726415419714895889695566190421490918495228999614205060482160874990041784513772759690310045235006755130584099828048277520988327887307189558875181146234251782575349381499791841843745547499242224391954996737196442345744028729627085560585095468591264430335401905871691673552253306532305775547980366878253025038198821107503465576012325024944144068433845095382329034690968982252765269872350287231257030526119676847749889
8020793071808758903381796873868682378850925211629392760628685222745073544116615635557910805357623590218023715832716372532519372862093828545797325567803691998051785156065861566888871461130133522039321843439017964382030080752476709398731341173062430275003111954907627837208488348686666904765710656917706470924318432160155450726007668035494571779793129212242101293274853237850848806152774463689243426683295884648680790240363097015218347966399166380090370628591288712305133171869639679922854066493076773166970190482988828017031016891561971986279675371963020932469337264061317786330566839383989384760935590299287963546863848119999451739548405124001514033096695605580766121611440638549988895970262425133218159848061727217163487131806481686766843789971465247903534853837951413845786667122427182648989156599529647439419553785158561613114023267303869927565170507781782366447011340851258178534101585950081423437703778492347448230473897643505773957385504112182446690585033823747175966929091293693201061858670
1412091290914528612922762760129106240712411654020891616069444238262454616085949357324819001982408622934094423088006900195508316304798830005798846146019069617230113544498045767943398260569869576800909160468486734197235296943846538094003772185450752691487661291946370394082255156780133321880749972176678354949400430149178774383549026731074531642752800102510403600409373087389256894757251316390320119790096427135422928942190593529729331511123761973838149253632886709955562694478049949250867917281369066932495071150978070603658721109982107683360783895087241848635972859877369120730719801371625907796646750334291193278553078271746737492574629830542216317975270099875957324602221973676084409734882118984714393020513888068185216596858736723838280213298481534102049266077109716782685416775844216952380117843513860478691587871566346306938724280678649803200632934358875747458590670249884857423532785487044675442987935115835876597137116770657923711993294193723927203219818622698900248323489998654493398563392
20386853162641984444934998176248821703154774794026863423846665361147912580310179333239849314145158103813724371277156031826070213656189218428551171492579367736652650240510840524479280661922149370381404863668038229922105064658335083314946842545978050497021795217124947959575065471749872278802756371390871441004232633252611825748658593540667831098874027223327541523742857750954119615708541514145110863925049204517574000824797900817585376961462754521495100198829675100958066639531958106704159717265035205597161047879510849900587565746603225763129877434317949842105742386965886137117798642168190733367414126797929434627532307855448841035433795229031275545885872876848846666666475465866905332293095381494096702328649920740506658930503053162777944821433383407283155178707970906458023827141681140372968356084617001053870499079884384019820875585843129082894687740533946763756846924952825251383026364635539377880784234770789463152435704464616uwb;
> -constexpr unsigned _BitInt(16319) b
> - = 2012974456709302727574100507062899826244916604651702690369568375585444875683436016651313240507879631460278199833070536840736748203015663720699487742558225012459510671839702819911277389210572747802962612254071867246681224417252196882500481259668419053440016929124501988666433463234720317290647183004791877987066729683082610876903638426760496950933639842151648267717069732314480723734513076773386141566503759124994849008586735618331910154116717658619505172176655219466753041714225055613389568844166340061301478127682539435897545896747514780658901350656941594549684113110073818042623846495062926837977401328562704962152919204773680308909275189151399260541908650258823333205729663856729030609391087874209350087386427717471941018364076582158058783196771670836397622553590531790813778049726744441676017664770583404699601082021249424408322225403770069952978999103344897991212850771034350046678683935107104578823920023197128887935206232962765408343031754983248314869651416635487070271657078325770796
0927427529476249626444239951812293100465038963807939297639901456086408459677292249078230581624034160083198437374539728677906306289960873601083706201882999243554025429957091619812945018432503309674349427513057767160754691227365332241845175797106713295593063635202655344273695438810685712451003351469460085582752740414723264094665962205140763820691773090780866423727990711323748512766522537850976590598658397979845215595029782750537140603588592215363608992433922289542233458102634259275757690440754308009593855238137227351798446486981151672766513716998027602215751256719370429397129549459120277202327118788743080998483470436192625398340057850391478909668185290635380423955404607217710958636050373730838469336370845039431945543326700579270919052885975364141422331087288874462285858637176621255141698264412903522678033317989170115880081516284097559300133507799471895326457336815172421155995525168781635131143991136416642016744949082321204689839861376266795485532171923826942486502913400286963940309484
5074841294235761567980449851987801590557885255383108780893978951751291620996718943375268012352804274283212053215307351082398485942787208393179217828313523635411999195575775975468767044626129049246944319030723328643414657452918667180676010414042124309419561774077634818455683391702241961931064630304090800731366054338697758609749399910085968749785062456897269667152066394382597246893010196922581169913176950122050361571770395369054940058339483843974464929181291852743598061454541482411319258385620699919348723293144520169007289481864773872231619941455512161560322110383194752708538186600790658951199233733174967771841773153459237877008039869651750332243754352492249491511910065745115190552207411746311658792996881181387283802195501430068948175222703384724138990797519173145057548020529886221743921352071397159602123468588824225432226214084338178171815952010864033683018390805924551154638294257081323458112709114569289613012652231019895244815217219698389802086475280385093285017054289507498200807204
1877671808414208650126741828424137039886856128227784839167384793724787311771990610344101557824515267318471953889607369727247525026122768566005894410708733378610476162439181617541433899921526019016255148934343633249264588702955196457882643215670087245921660584346388422834316715992479275242981606484147943813466274962163956020344387132681012987276353911428481133080521318871633347106971027058394584162633836170084641092775091666390836768318808419325838493512223663993433528416052204206508892342192866072409572603964283634354221147328239255437197307410877079744744865442832584525330488906202103159953143660677502931584967475621398893234965164055257188078046145218709440040840330980650769823007158480986163459600042530048580517485340677496132105508699566551386838228504834826425017438879318409352467562176255853776374723731447388317368663357627383694650723788061962763254309361928109667564387774921758849538329207871323025399352532620973285930184201644018901002773323499765774835125335966401889419734
6327201303258090754079801393874104215986193719394144148559622409051961205332355846077533183278890738832391535561074612724819789952480872328880408266970201766239451001690274739141595541572957753788951050043026811943691163688663710637928472363177936029259448725818579129920714382357882142208643606823754520733994646572586821541644398149238544337745998203264678454665487925173493921777764033537269522992103115842823750405588538846833724101543165897489915300004787110814394934465518176677482202804123781727309993329004830726928892557850582806559007396866888620985629055058474721708813614135721948922060211334334572381348586196886746758900465692833094336637178459072850215866106799456460266354416689624866015411034238864944123721969568161372557215009049887790769403406590484422511214573790761107726077762451440539965975955360773797196902546431341823788555069435728043202455375041817472821677779625286961992491729576392881089462100341878uwb
> - / 42uwb;
> -constexpr unsigned _BitInt(16319) c
> - = 2627723238202844734593528210036441397644224112049184868378010831834577492039736645259692442133560537468665927861231280160488737037607638644451145031889554569557078457728559890665090192944430229603341219963259499837606412471422041491392321377944430683327738899570355221943057508092711119541704691117701907071384712882644783009643200396240346365655860043111527324887717787506338111147788805979885801605021342047585162041301679344551753922701997368269944795232238874886098194759343298573068474608818358322518434782511069732797329482620522756442576995050342343559716596929997568140697461994153850282719374276045524526948313436094002393398634421757710211480013425387953089006436252036847553573885474180629254262438647346127462098789135554198787366415702252216790859116465478750185454645773734152676351670503270525404617292626896899730237926158293326447540206319154834398220123044550465903886878634766771065824008882586957518822701333555929857984594869031685661169338699069178282184753549263922342
7223360712994033576990398197160051785889033125034223732954451076425681456628201904077784454089380196178912326887148822779198657689238010492393879170486604804437202791286852035982584159978541711417080787022338893101116171974852272032081114570327098305927880933671644227124990161298341841320653588271798586647749346370617067175316167393884414111921877638201303618067479025167446526964230732790261566590993315887290551248612349150417516918700813876388862131622594037955509016393068514645257179527317715173019090736514553638608004576856188118523434383702648256819068546345047653068719910165573154521302405552789235554333112380164692074092017083602440917300094238211450798274305773890594242881597233221582216100516212402569681571888843321851284369613879319709906369098535804168065394213774970627125064665536078444150533436796088491087726051879648804306086489894004214709726215682689504951069889191755818331155532574370572928592103344141366890552816031266922028893616252999452323417869066941579667306347
1613572540792418096445006815472671637426015551116993769236905000141722943376810074187359103417921313777413085862282683858255797739853823398548217296703139254567248696079101149570408103776713947798346752251815365654448305519244177941397366865945576604838130455250898502853737564035949003922262966176561897745670199002376443298912801927760673401097511000258184731552675034906281464293064935209536776606120947583071904800720399805753234289940099824156768757863383436818507697242587247129471298448651825227005098698105411475159889557097847902482665935815324140919836703764265342890790987425495051276941605211107000354966589327240076217595000912275954778312003253352426141626242180107535863067944827325007651362995480529583458724884469690329738714185654845700964406091254014395163490619510733447727538171687315331867404492065331848584098243312698792767523028190759388941917646038806690598049147052029322201145747693079459384463557440930584834660987410296711333053084516015101240973366680443621409948422
3089535423200793619361066621523635138333071949675857709510246623578270082057593845373627754644593213511694799340435697589005171730412869312569995144579132884366864724543979793369135501578123803814859733983134834104975195720468081385513827225323421903045816417919536888887898936264050948644053011233768789016564682415233888521861166556793342365223662116883349759476292258652315155424431628407536492331622345779833699544022980163824904455584178665286877833385762620171269482394514620841257256794740307865515944817846748833567385388698214360784336910350490583704914700641332408720492396834716240637214630411024743621070432983803396754929609470890904235280794216538905439121760908467676546499780390041565327804122058643413369880265872674895012298018361509102904924291929842806674593714859387999453925424007022090069466220074179663268737341495281700093809393049733825916843964997096377440683341143111392219408276539024116171510614263868107283976403597687722315272782924847563997002977790058959538360498
9099084081251802305001465530685587689066710306032849298712531664047230963409638484129598076118133347670029704549206295184751171783054889490211218045322681317529569999778899567668829982207035948032411418382057247326141072264502161892285323531743728756335449414720326329614400327415751813608405440522389476951223717685562226240221655814783640319063683104993438443847695342093582440489676230855515734722099028773790309518629302472390856918840009781940193713784596688294176313226823907143925396584175086934911386332502448539920116580493698106175151294846382915609543814748269873022997601962804377576934064368480060369871027634248583037300264157126892396407333810094970488786868749240778818119777818968060847669660858189435863648299750130319878885182309492320093569553086644726783916663680961005542160003603514646606310756647257217877792590840884087816175376150368236330721380807047180835128240716072193739218623529235235449408073833764uwb
> - >> 171;
> -static_assert (a == 104035420857591336912033421371590282594618949554383312108016658002346729621809075187886810556089250519171906621444454338355954895015702651485390136163065190112858618641136386109985872833437486689598700444003401873678692740127267597323488784372301493640816109413989770365948235914632557318083097152197815560450925247817487980962431555270487460906147510436108215606628642367209525571478447319178007123437255461754491040756276160778293853969944521994107668165580080909219877874389675909142493269139537319578997141131109185638828370454486425623384865174757934426268782434751788699586973112527672021250884962359281306851455680239926549218932860934332800157896216992819480531309637672169509013220640901153010293602569164862363243469805553782278256652310412065059324510541006558913773071836572441888817803096026977339656338065485757937114708441754772139220505848611129471133288210945787143801106639643957649643750089633363257616620711210147673689610208240657756390397240974072579773
7162336060266724299262682963027758975719589213184278834763816748178347253973659384064502014166609966276276365911948251796162437485064618322435452987925569419207749303869957009187515572296092974825920128445718247115395611994626163709678379653804662270113642199222328179939231910556356649808610513835713167107960093732940155401402535472529845314262948384287403829130743120794819828038911203687822621892816584532456037443706537312200079293055483326584042301614839097487647975268866161712528420802033072670478029856147852927977509276880795320201330707208437309025474886548360918372629573524086551681748289855499045088814700848416285092483580997302004276045023244723783719637838813548308405502839640824921442501923177782405482132673872892466160260890531866472104767880873491792392312121780373603932508064157181247926020018908264767767538029765717460742268649556278120260488458272740646354530823680093746349319942102049084520394078200064313371341392468379588894883788089175030766695753883598777226542320
3470320354145742841869795472799186154631385288573730129094228733379855432514817031425884584962254283999586850250406406681047191820544352342046667950146374296364655891915135310082529994904874562441551527081311638121766367661807914647092917287784017613115795691373814041086838720316968010349263776702775009771662737124600992709418630470128579612748138807983617697487500079502839532266478317788699680283395230308668613168191852557234122469290277763000256531531071762280960597416576452124575885006363492171314551026369237325119844147154972582617127637240421323781252125819313268498872048683068789228870983086306586111793007178693570562554975762384431236664489360478109692520183356042112794589756922036102025380888246082763911915622037570736969677850621708281909652070776450422110772285659921383413532725137107621514770958361581240471968542997294446402584844918179956881219978405772785713402046471903103404871352324277109089891640558983922159359479964068994923538490500501798825116238188381267330618026
0931602902055966697959818348423522710110639396326239266299601139263260299521434523546406140610494389326654679284431132322144981017745231781290201550172288022219014695480722340733346810524613278322689559237011097328743609840024931300254707538619674324931023957662797178151131357638108862164917702657241608876888875152822934472871210395453237779282868767112670491355477607736558459506226763279722806223454862530846261212478858917574583089742594664412849677658245614783514210519230818425947916162496827685947964131847420075045403821417735560989294612338427979785664667342404360322691229080574383143194104895752448457393206937647986873989422753143333618385603582785837669832101260810460202314697058365446112520751877331125607781255602255658033499531518808006018903826482163757370770157446841421323038644940832376803068981340335707584011317358192377302802094242319541219701541955750707288766531879284239188942116170935670948579260796940039501429627634807289073224093389542774937118343634230323092968620
81371923061150409402403668284066920335645815769603890931600189625120845560771835017710222988445713995722670892970377791415975424998772977793133120924108755323766471601770964843725827421304729349535336212587039242582503381150992918495310760366078232133800372960134691178665615437284018675587037783965019497398984583781291648236566997741116811234934754542646608973862932050896956712947890625239848619289180051302224085308716715734850608995498117691600907423641124622236235949675965926735290984369155077055324647942699875972019355174794849379024365265476001505043957802797349447782453767742359446787304217770032967959809288342189111153359045680464231699344620995535326063943372491385550455978845273436611631962336651743357242055102619760848116407351488643448217122169718350824452317641509534606434395208225350712889271762643740106849245478364448395994915755050465135468245061369394410933866013068008514339549345174558881983866497072827311379042433413uwb);
> -static_assert (b == 479279632549833982755738215967357101486884905869453021516563898948915446591294289678884104882828483681018619007873937343032559095956110409690354224418625002966550159961834004740780330764422082810229193393826635058733624861250523067262019347540099774628575459315357616349150824579695313640630281667807589996920649924543478780215152006371546893079438057655154349456445174360590648508217399231758605134881847410713059287758746575793311941456361347290358374327775052253988819455767870384140373534325319062214637649448223675213701403987503519204500321584986093940400979311922337629196153927395934961423190792514929752893552191612781025930779806940809347748073488156862698382316586632554531097474068541478416687472958980350462147229542043370966376951612302580094672036569174235908042392792082009922861348754900810642762162386011767716267196524707159512614047405558309045526869231198654773018734270263596328291409529332649735222668150705420335319769465472201979730869384913211207207
5373996013739990697006554637202292010533321860069785825009277097128404199976537163430585637450535494816805148579561924571056517747554447120549116657350857400882429019761724655720340465974195193558337722024597541511768455489944562084450292229841009963137094549217451331681817905394129588975104478734693440715083683204782281607795336838872403491895763128753290640898354947825338982854931267559169706314889964518235856823428090439337046435662559651700143711569575086573569627124354652912728119674823637085164390655787621331870294794577940904392020709798017325360408809054191003750299218897721285030845109314351714839790187795971666305588199093482237700013773902733073730520307294138196179858239813740704437154850888294873651516867866531415605553976328397837869734756039081291031211259255824353775865994433632176594824860215124447150789997421456161924170543832752214317501857017117934870794479802957418094172659233722650272378842003962384939273591028858259485681280063522734650517124720700592024503190
5445152238832105970200308151371801900107107616143235847115536995978281165233083750307528808742605565540002941143874829336203146501750257713925224473144855518861387693696103669523617994232375111611201101459297439748647388267459200813013679266349328732383431914791502242752803351817813918019855167200467126443959596212095412230012937785180621368904740496659226139300584975540396940968189138713630212621475457757421407899273838583419421850094135489271442461781867612967840281259964938951919393938448193171251996576357123654457926939171468811259400443993779102766652727502895609600502472189226835366234904950156893142674698374992326628993607966485208811438064202797698153274845831487974169502396605979807274335098034836109236427828852711258048141786054778320994100643663029556902570837898367870844766792830052796171750493189799905267492521148625102911003353413851945670464764491436591194854953791559798723403394543172251931597408230783241193488626433308391622670766594854714782494114377403163099298640
3589281430493343304207573431954440506367102005746914258775268625663056944615427077330312326664431034309894720122682694874274735620802316011315482410182991906165335883031756812018133914090861319389023790839528337203606889129436487920140167370284870924438860873830296648014424844378195912932551426780779819757525353368558050825303562419989528653425507781193568399131883673447888828695552112293654073088339775808234324436627659543962164946450396759723040075906766506152022264815158093674649622869572430121164843379253826764183953324829436751005035078152203675523168431161209463034491772102996315554878311000500752369796109685119745615468446576523546008325039060775520970963367909216533343057221662059707100715990114520515109428581554773471551782223970832412406073499896797949247197263055911053575580685552002226777990994346631851517791364630330551754443656577948498726362806681419705536740324268597539896282803552799726080554573302695958428417269671660306173853381343814024048279362738039470198839365
706286164147555864933364363287875097138128425573909904433183795098670203800533548856219174579901097084123411402160448390274656216062207733804522678116007830485911118338137291415500040244636646228465275546613185451215477214924093897408659253897872331630294361379429268082112519489979283826532913282908147824847781517964779380824918394924322420104717839012960422523766744397106063463998218416521947089619846125464833145312281971994057275917591591279145274837283273569411904875883590818927011083766111368623876288661469697856984023924541117354584710728162060928747544449729071086406072820826707352705098469570212430005031769870770984490147544922541878582516496026055634218534739829767044431114272772863484628968800592047985977005687260574374332608765746965647976405949709304033414442630581488362251756922883517287565772653346189666094175256518980878632057889091042584644510374477219106080358138511257658994752983022904583136418485544787844335722425uwb);
> -static_assert (c == 877910742369718983756939060508412117978592490852198574421032559122366792451965262581837372001950924590370700613263257217338625506420135573519875944068826251478098411179104273956630178489731637399492219205096327228843406034228851197156969768002652376081122551643005269975404468281889267981913199560021628096606273673238473241136165744439969588386509610342875962281386773554725997852931943688986401368721939056760428331801110079995345152096844126486603181395448862805847511434872927541414315891787470959955624718369585383855232108897344587608804255681047991066144937466199967508281110381445335329419488661296149273726327727155188903861073076047845956925614932199835041402306636381498931110972831171298902299624728018258792144918535392288593787760450040073877424000870994528979160501117773965772018160145351225988200456446241582865271490428972723521053727772138981668764336614520000117771211219751569557888748379298875543540138845614585448888053708836039799464321601482849566246
0205686448548113229841097955613958440901375416256532864511852298696327611517233241324799070919491286426159788792631723833717451538043437364017185237743182402835670087683125602640318887451596650323528720128188198547270462971612157603487958526705005955580409441670771849388016438035850194585870327013409236236730914217722025655319472231141666790287955685713636274653565577454275838590350806168639165264676470440930351612992518904664647715805865941038423768376846697817543122409517591717292238745940345900530458551468519245767864531742102178628854376524513367983209186974575765707273973775386840081238803880335095740836386527208267311808973522450391189055739828936937359693167240524660624945856907042041257347192086984009640984509322622503890256046324768341632643546455779035376002061691113121234273164937984171774242327769915688742564049454163158318121818582764775268091292470889088445575108022688069271697198283151469645400870507006663799330661702702747443254220478311056407220749648103123435473381
5835208730552187341151209786784404558964588524975699899667232359656087068265936071288476301376185091512558347426364387962855698738699677293418712135210300114273729873885726742284413334588575122260492832433475214578049120087810369667863747603253414920332978483681609032604700190675353306116459095608887974519070883897641904030079983051686730294469340122451388381805960985594425706961500112962181441863870246158853022907449053406669059217439700137798133324937711920480432972814232484890568414170138076703081910957324642214513769972707454684597021527968182227457305657212026631030431211601014598336832495586844591088625369619943085350399708145578212681703887459419803788389699105928956705542918117397687718299410438578196037512469579622360911547558939620383631206904838624230010389486206816112538671492964636904178280343035479227922490985224047514289607138750504639061341508460897057144703039182990126916002853558594129248477604970769784327224466025218250890974545423433548473473960450795877572106353
5699926870646542578883331119051762306186067523001099412719645903032216675157165664232169078747190660947349603478964371047816225566409299125144678788763535185293382682071978173375457816107340136266810981911392425229112574139527147434230557453697491827393851359741896378730899459343419189068773030249591068607233883641315916228107226354275825769958808983867746939746789934806529358175103584438984838716184743516032727606660368313170324641040912283279337675151268874519556402164606924599236339646810051353621165145061052331521169712577463884531324397308353641769207596248691884466743214435301972295965363863294829404998426686187015125531502334672467143049925799395804908806616087054502527659797515485553762026569035404102874274275507439659763196532038078250094456842405342003835752491712509924133499003218952646583819297211097086138006098680208194804434552641485715856993900589523667230634434821280585126992071104389130687587301633060167397324932707250357187351836675057507009105128859076478863019096
6776854031578939382690709022667421734442841784680826494146620589862829612704279521637740421694195051400095278084716974624615208392585573200182664157066813849346058321763156523965698465901396025152159642193562900743812715885811057212579017860488539960334406702752688595217360219470968738009774067915037157027492209108801337707562571266897723911401203374308490793226200974353356835311756384895692909802720948968131504604855466961987314701846460342135201914356152591684810924688350929140120187693089324255924634578576427004426339299493833434502951593902551451002292839635000904253250021884625417628756439862964325562720709528784964868687330847894476999577326582332350213148861205413652337499383416531545707272907994755638339630221576707954964236210962693804639714754668679841134928393081284209158098202683744650513918920168330598432362389777471870631039488408769354863001967531729415686631571754649uwb);
> +constexpr unsigned _BitInt(16319) a = 468098567701677261276215481936770442254383643766995378241600227179396283432916865881332215867106489159251577495372085663487092317743244770597287633199005374998455333587280357490149993101811392051483761495987108264964738337118155155862715438910721661230332533185335581757600511846854115932637261969633134365868695363914570578110064471868475841348589366933645410987699979080140212849909081188170910464967486231358935212897096260626033055536141835599284498474737858487658470115144771923114826312283863035503700600141440724426364699636330240414271275626021294939422483250619629005959992243418661230122132667769781183790338759345884903821695590991577228520523725302048215447841573113840811593638413425054938213262961448317898574140533090004992732688525115004782973893244091427000396890427152225308661078954671066069234453757593181753900865203439035402480306413572239610467142591920809187367438071170100969567440044691427487959785637338381651309916782063670286046
5475852408378923071709288494858771867932807076008408667834717991481792508183877161831273233461995333874633634423562188037796970057593244103764768552224208762624259855719828181803538704101498242145443130132851995441934966242232199864029448496224894220076785649461747978927950893308995356247277775253307894927035745641122529551477709429297615456043508694042465582747523535103701572294850044021310431534542903979293872763740549385789768786064672173593986842750505191044139142860241068081163407122730594273622937031513554983362131706988944484053693987571885231604602927148758578799681735783281913582159724935132712978756344007933019292500528222586360156508576830239007098454108384879367785332504078861809545760463406979085840209512950488449380478656570290728507974429761468952941849937369995054856657428113137954055306741998480558027599017863768220695293429712619631193324765040642858693620496620834057898284331321549332428174328094158105481806587503936922727295862328420656584909712019277800142588153
3311545969511794227355187664684482107672366404028277283451141989135127816901710398709480382959428635234046834661872608878149262681618865733135910417181982267380585631782849903908808822313725829737392904330767357009039694778959879992292864384353261701216481107461888177462262894353903797488381268913080186091509003587024406100581941813006839098647031467785360508010331341183790435828783740154625741324046693989352750893154106524192987230720387644388210619326254465229013236469167191033200612786414699140401536668356931724805794959607035492936115832695555160023607526843504410588016279838079916160798736528245866203159909692182517620270789073002369870685576293269168825936535896407659582457777527599118314911837204720605511846311286460406385389482040724983787136893494143811968060552854688725693433424607559674641029795445863235817142871414182091818338443568133237931754104825239171071219662340633870206119521372456930328540224285367138611314821153569168546183645829503753803437831805510824008241444
1205300401526732399959228346926528586852743389490978734787926721999855388794711837164423007719626109179005466113706450765269687580819822772189301084503627297389675134228222337286867641110511061980231247884533492442898936743429641958314135329073406495776369208158032115883850691010569048983941126771477990976092252391972812691669847446798507244106121667885423025613769258102773855537509733295805013313937402282804897213847221072647111605172349464564089914906493508133855389627177663426057763252086286325343811254757681803068276278048757997425284334713190226818463023074461900176958010055572434983135171145365242339273326984465181064287264645470832091115100640584104375577304056951969456200138485313560009272338228103637763863289261673258726736753407044143664079479496972580560534494806170810469304773005873590626280072387999668522546747985701599613975101188543857852141559251634058676718308000324869809628199442681565615662912626022796064414496106344236431285697688357707992989966561557171729972093
533007476947862215922583204811189015550505642082475400647639520782187776825395598257421714106473869797642678266380755873356747812273977691604147842741151722919464734890326772594979022403228191075586910464204870254674290437668861177639713112762996390246102030994917186957826982084194156870398312336059100521566034092740694642613192909850644003933745129291062576341213874815510099835708723355432970090139671120232910747665906191360160259512198160849784197597300106223945960886603127136037120000864968668651452411048372895607382907494278810971475663944948791458618662250238375166523484847507342040066801856222328988662049579299600545682490412754483621051190231623196265549391964259780178070495642538883789503379406531279338866955157646654913405181879254189185904298325865503395688786311067669273609670603076582607253527084977744533187145642686236350165593980428575119329911921382240780504527422630654086941060242757131313184709635181001199631726283364158943337968797uwb;
> +constexpr unsigned _BitInt(16319) b = 993544351805745642992712665522225781720751131167133583256006557305527667874799065290734883974181856275793908464907334817210839718382702037794172598310751363628740653052635825350843729024193727690838628290435307910290453567560860457648616299831942770285127840821364145483722307961640161587567245325014842167922382941783422751813309105518027024926616167667717614967516425764081234429793565072962980187875805994409016886273051981720335234145831036381148231808327023243432931732382281899113450060166986892239601351296947783945647234581231232192421524184977214768745576022455924095273731900934854089496636356815834950135522926464677001807159050244170278726909797397989983768312219410311008972842567669024609114699395503791842577284002228822283293254251609150114947716085656446437691029323009196357311923064802666789639935279098261195756997897203817851957027844754070750286167850265790519274322589322566399480756891864489827370228548367638571765110404200210535299
3176512166420085064452431753181365805833548922676748890412420332694609096819779765600345216390394307257556778223743443958983962113723193551247897995423762348092103893683711373897139168289420267660611409947644548715007787832959251167553175096639147674776117973100447903243626902892382263767591328038235708593401563793019418124453166386471792468421003855894206584354731489363668134077946203546067237235657746480296831651791790385981397558458905904641394246279782746736009101862366868068363411976388557697921914317179371206444085390779634831369723370050764678852846779369497232374780691905280992368079762747352245519607264154197148958896955661904214909184952289996142050604821608749900417845137727596903100452350067551305840998280482775209883278873071895588751811462342517825753493814997918418437455474992422243919549967371964423457440287296270855605850954685912644303354019058716916735522533065323057755479803668782530250381988211075034655760123250249441440684338450953823290346909689822527652698723
5028723125703052611967684774988980207930718087589033817968738686823788509252116293927606286852227450735441166156355579108053576235902180237158327163725325193728620938285457973255678036919980517851560658615668888714611301335220393218434390179643820300807524767093987313411730624302750031119549076278372084883486866669047657106569177064709243184321601554507260076680354945717797931292122421012932748532378508488061527744636892434266832958846486807902403630970152183479663991663800903706285912887123051331718696396799228540664930767731669701904829888280170310168915619719862796753719630209324693372640613177863305668393839893847609355902992879635468638481199994517395484051240015140330966956055807661216114406385499888959702624251332181598480617272171634871318064816867668437899714652479035348538379514138457866671224271826489891565995296474394195537851585616131140232673038699275651705077817823664470113408512581785341015859500814234377037784923474482304738976435057739573855041121824466905850338237
4717596692909129369320106185867014120912909145286129227627601291062407124116540208916160694442382624546160859493573248190019824086229340944230880069001955083163047988300057988461460190696172301135444980457679433982605698695768009091604684867341972352969438465380940037721854507526914876612919463703940822551567801333218807499721766783549494004301491787743835490267310745316427528001025104036004093730873892568947572513163903201197900964271354229289421905935297293315111237619738381492536328867099555626944780499492508679172813690669324950711509780706036587211099821076833607838950872418486359728598773691207307198013716259077966467503342911932785530782717467374925746298305422163179752700998759573246022219736760844097348821189847143930205138880681852165968587367238382802132984815341020492660771097167826854167758442169523801178435138604786915878715663463069387242806786498032006329343588757474585906702498848574235327854870446754429879351158358765971371167706579237119932941937239272032198186226
9890024832348999865449339856339220386853162641984444934998176248821703154774794026863423846665361147912580310179333239849314145158103813724371277156031826070213656189218428551171492579367736652650240510840524479280661922149370381404863668038229922105064658335083314946842545978050497021795217124947959575065471749872278802756371390871441004232633252611825748658593540667831098874027223327541523742857750954119615708541514145110863925049204517574000824797900817585376961462754521495100198829675100958066639531958106704159717265035205597161047879510849900587565746603225763129877434317949842105742386965886137117798642168190733367414126797929434627532307855448841035433795229031275545885872876848846666666475465866905332293095381494096702328649920740506658930503053162777944821433383407283155178707970906458023827141681140372968356084617001053870499079884384019820875585843129082894687740533946763756846924952825251383026364635539377880784234770789463152435704464616uwb;
> +constexpr unsigned _BitInt(16319) c = a + b;
> +constexpr unsigned _BitInt(16319) d = 201297445670930272757410050706289982624491660465170269036956837558544487568343601665131324050787963146027819983307053684073674820301566372069948774255822501245951067183970281991127738921057274780296261225407186724668122441725219688250048125966841905344001692912450198866643346323472031729064718300479187798706672968308261087690363842676049695093363984215164826771706973231448072373451307677338614156650375912499484900858673561833191015411671765861950517217665521946675304171422505561338956884416634006130147812768253943589754589674751478065890135065694159454968411311007381804262384649506292683797740132856270496215291920477368030890927518915139926054190865025882333320572966385672903060939108787420935008738642771747194101836407658215805878319677167083639762255359053179081377804972674444167601766477058340469960108202124942440832222540377006995297899910334489799121285077103435004667868393510710457882392002319712888793520623296276540834303175498324831486
9651416635487070271657078325770796092742752947624962644423995181229310046503896380793929763990145608640845967729224907823058162403416008319843737453972867790630628996087360108370620188299924355402542995709161981294501843250330967434942751305776716075469122736533224184517579710671329559306363520265534427369543881068571245100335146946008558275274041472326409466596220514076382069177309078086642372799071132374851276652253785097659059865839797984521559502978275053714060358859221536360899243392228954223345810263425927575769044075430800959385523813722735179844648698115167276651371699802760221575125671937042939712954945912027720232711878874308099848347043619262539834005785039147890966818529063538042395540460721771095863605037373083846933637084503943194554332670057927091905288597536414142233108728887446228585863717662125514169826441290352267803331798917011588008151628409755930013350779947189532645733681517242115599552516878163513114399113641664201674494908232120468983986137626679548553217192
3826942486502913400286963940309484507484129423576156798044985198780159055788525538310878089397895175129162099671894337526801235280427428321205321530735108239848594278720839317921782831352363541199919557577597546876704462612904924694431903072332864341465745291866718067601041404212430941956177407763481845568339170224196193106463030409080073136605433869775860974939991008596874978506245689726966715206639438259724689301019692258116991317695012205036157177039536905494005833948384397446492918129185274359806145454148241131925838562069991934872329314452016900728948186477387223161994145551216156032211038319475270853818660079065895119923373317496777184177315345923787700803986965175033224375435249224949151191006574511519055220741174631165879299688118138728380219550143006894817522270338472413899079751917314505754802052988622174392135207139715960212346858882422543222621408433817817181595201086403368301839080592455115463829425708132345811270911456928961301265223101989524481521721969838980208647528
0385093285017054289507498200807204187767180841420865012674182842413703988685612822778483916738479372478731177199061034410155782451526731847195388960736972724752502612276856600589441070873337861047616243918161754143389992152601901625514893434363324926458870295519645788264321567008724592166058434638842283431671599247927524298160648414794381346627496216395602034438713268101298727635391142848113308052131887163334710697102705839458416263383617008464109277509166639083676831880841932583849351222366399343352841605220420650889234219286607240957260396428363435422114732823925543719730741087707974474486544283258452533048890620210315995314366067750293158496747562139889323496516405525718807804614521870944004084033098065076982300715848098616345960004253004858051748534067749613210550869956655138683822850483482642501743887931840935246756217625585377637472373144738831736866335762738369465072378806196276325430936192810966756438777492175884953832920787132302539935253262097328593018420164401890100277332
34997657748351253359664018894197346327201303258090754079801393874104215986193719394144148559622409051961205332355846077533183278890738832391535561074612724819789952480872328880408266970201766239451001690274739141595541572957753788951050043026811943691163688663710637928472363177936029259448725818579129920714382357882142208643606823754520733994646572586821541644398149238544337745998203264678454665487925173493921777764033537269522992103115842823750405588538846833724101543165897489915300004787110814394934465518176677482202804123781727309993329004830726928892557850582806559007396866888620985629055058474721708813614135721948922060211334334572381348586196886746758900465692833094336637178459072850215866106799456460266354416689624866015411034238864944123721969568161372557215009049887790769403406590484422511214573790761107726077762451440539965975955360773797196902546431341823788555069435728043202455375041817472821677779625286961992491729576392881089462100341878uwb;
> +constexpr unsigned _BitInt(16319) e = d / 42uwb;
> +constexpr unsigned _BitInt(16319) f = 262772323820284473459352821003644139764422411204918486837801083183457749203973664525969244213356053746866592786123128016048873703760763864445114503188955456955707845772855989066509019294443022960334121996325949983760641247142204149139232137794443068332773889957035522194305750809271111954170469111770190707138471288264478300964320039624034636565586004311152732488771778750633811114778880597988580160502134204758516204130167934455175392270199736826994479523223887488609819475934329857306847460881835832251843478251106973279732948262052275644257699505034234355971659692999756814069746199415385028271937427604552452694831343609400239339863442175771021148001342538795308900643625203684755357388547418062925426243864734612746209878913555419878736641570225221679085911646547875018545464577373415267635167050327052540461729262689689973023792615829332644754020631915483439822012304455046590388687863476677106582400888258695751882270133355592985798459486903168566116
9338699069178282184753549263922342722336071299403357699039819716005178588903312503422373295445107642568145662820190407778445408938019617891232688714882277919865768923801049239387917048660480443720279128685203598258415997854171141708078702233889310111617197485227203208111457032709830592788093367164422712499016129834184132065358827179858664774934637061706717531616739388441411192187763820130361806747902516744652696423073279026156659099331588729055124861234915041751691870081387638886213162259403795550901639306851464525717952731771517301909073651455363860800457685618811852343438370264825681906854634504765306871991016557315452130240555278923555433311238016469207409201708360244091730009423821145079827430577389059424288159723322158221610051621240256968157188884332185128436961387931970990636909853580416806539421377497062712506466553607844415053343679608849108772605187964880430608648989400421470972621568268950495106988919175581833115553257437057292859210334414136689055281603126692202889361625
2999452323417869066941579667306347161357254079241809644500681547267163742601555111699376923690500014172294337681007418735910341792131377741308586228268385825579773985382339854821729670313925456724869607910114957040810377671394779834675225181536565444830551924417794139736686594557660483813045525089850285373756403594900392226296617656189774567019900237644329891280192776067340109751100025818473155267503490628146429306493520953677660612094758307190480072039980575323428994009982415676875786338343681850769724258724712947129844865182522700509869810541147515988955709784790248266593581532414091983670376426534289079098742549505127694160521110700035496658932724007621759500091227595477831200325335242614162624218010753586306794482732500765136299548052958345872488446969032973871418565484570096440609125401439516349061951073344772753817168731533186740449206533184858409824331269879276752302819075938894191764603880669059804914705202932220114574769307945938446355744093058483466098741029671133305308451
6015101240973366680443621409948422308953542320079361936106662152363513833307194967585770951024662357827008205759384537362775464459321351169479934043569758900517173041286931256999514457913288436686472454397979336913550157812380381485973398313483410497519572046808138551382722532342190304581641791953688888789893626405094864405301123376878901656468241523388852186116655679334236522366211688334975947629225865231515542443162840753649233162234577983369954402298016382490445558417866528687783338576262017126948239451462084125725679474030786551594481784674883356738538869821436078433691035049058370491470064133240872049239683471624063721463041102474362107043298380339675492960947089090423528079421653890543912176090846767654649978039004156532780412205864341336988026587267489501229801836150910290492429192984280667459371485938799945392542400702209006946622007417966326873734149528170009380939304973382591684396499709637744068334114311139221940827653902411617151061426386810728397640359768772231527278292
48475639970029777900589595383604989099084081251802305001465530685587689066710306032849298712531664047230963409638484129598076118133347670029704549206295184751171783054889490211218045322681317529569999778899567668829982207035948032411418382057247326141072264502161892285323531743728756335449414720326329614400327415751813608405440522389476951223717685562226240221655814783640319063683104993438443847695342093582440489676230855515734722099028773790309518629302472390856918840009781940193713784596688294176313226823907143925396584175086934911386332502448539920116580493698106175151294846382915609543814748269873022997601962804377576934064368480060369871027634248583037300264157126892396407333810094970488786868749240778818119777818968060847669660858189435863648299750130319878885182309492320093569553086644726783916663680961005542160003603514646606310756647257217877792590840884087816175376150368236330721380807047180835128240716072193739218623529235235449408073833764uwb;
> +constexpr unsigned _BitInt(16319) g = f >> 171;
> +static_assert (c == 104035420857591336912033421371590282594618949554383312108016658002346729621809075187886810556089250519171906621444454338355954895015702651485390136163065190112858618641136386109985872833437486689598700444003401873678692740127267597323488784372301493640816109413989770365948235914632557318083097152197815560450925247817487980962431555270487460906147510436108215606628642367209525571478447319178007123437255461754491040756276160778293853969944521994107668165580080909219877874389675909142493269139537319578997141131109185638828370454486425623384865174757934426268782434751788699586973112527672021250884962359281306851455680239926549218932860934332800157896216992819480531309637672169509013220640901153010293602569164862363243469805553782278256652310412065059324510541006558913773071836572441888817803096026977339656338065485757937114708441754772139220505848611129471133288210945787143801106639643957649643750089633363257616620711210147673689610208240657756390397240974072579773
7162336060266724299262682963027758975719589213184278834763816748178347253973659384064502014166609966276276365911948251796162437485064618322435452987925569419207749303869957009187515572296092974825920128445718247115395611994626163709678379653804662270113642199222328179939231910556356649808610513835713167107960093732940155401402535472529845314262948384287403829130743120794819828038911203687822621892816584532456037443706537312200079293055483326584042301614839097487647975268866161712528420802033072670478029856147852927977509276880795320201330707208437309025474886548360918372629573524086551681748289855499045088814700848416285092483580997302004276045023244723783719637838813548308405502839640824921442501923177782405482132673872892466160260890531866472104767880873491792392312121780373603932508064157181247926020018908264767767538029765717460742268649556278120260488458272740646354530823680093746349319942102049084520394078200064313371341392468379588894883788089175030766695753883598777226542320
3470320354145742841869795472799186154631385288573730129094228733379855432514817031425884584962254283999586850250406406681047191820544352342046667950146374296364655891915135310082529994904874562441551527081311638121766367661807914647092917287784017613115795691373814041086838720316968010349263776702775009771662737124600992709418630470128579612748138807983617697487500079502839532266478317788699680283395230308668613168191852557234122469290277763000256531531071762280960597416576452124575885006363492171314551026369237325119844147154972582617127637240421323781252125819313268498872048683068789228870983086306586111793007178693570562554975762384431236664489360478109692520183356042112794589756922036102025380888246082763911915622037570736969677850621708281909652070776450422110772285659921383413532725137107621514770958361581240471968542997294446402584844918179956881219978405772785713402046471903103404871352324277109089891640558983922159359479964068994923538490500501798825116238188381267330618026
0931602902055966697959818348423522710110639396326239266299601139263260299521434523546406140610494389326654679284431132322144981017745231781290201550172288022219014695480722340733346810524613278322689559237011097328743609840024931300254707538619674324931023957662797178151131357638108862164917702657241608876888875152822934472871210395453237779282868767112670491355477607736558459506226763279722806223454862530846261212478858917574583089742594664412849677658245614783514210519230818425947916162496827685947964131847420075045403821417735560989294612338427979785664667342404360322691229080574383143194104895752448457393206937647986873989422753143333618385603582785837669832101260810460202314697058365446112520751877331125607781255602255658033499531518808006018903826482163757370770157446841421323038644940832376803068981340335707584011317358192377302802094242319541219701541955750707288766531879284239188942116170935670948579260796940039501429627634807289073224093389542774937118343634230323092968620
81371923061150409402403668284066920335645815769603890931600189625120845560771835017710222988445713995722670892970377791415975424998772977793133120924108755323766471601770964843725827421304729349535336212587039242582503381150992918495310760366078232133800372960134691178665615437284018675587037783965019497398984583781291648236566997741116811234934754542646608973862932050896956712947890625239848619289180051302224085308716715734850608995498117691600907423641124622236235949675965926735290984369155077055324647942699875972019355174794849379024365265476001505043957802797349447782453767742359446787304217770032967959809288342189111153359045680464231699344620995535326063943372491385550455978845273436611631962336651743357242055102619760848116407351488643448217122169718350824452317641509534606434395208225350712889271762643740106849245478364448395994915755050465135468245061369394410933866013068008514339549345174558881983866497072827311379042433413uwb);
> +static_assert (e == 479279632549833982755738215967357101486884905869453021516563898948915446591294289678884104882828483681018619007873937343032559095956110409690354224418625002966550159961834004740780330764422082810229193393826635058733624861250523067262019347540099774628575459315357616349150824579695313640630281667807589996920649924543478780215152006371546893079438057655154349456445174360590648508217399231758605134881847410713059287758746575793311941456361347290358374327775052253988819455767870384140373534325319062214637649448223675213701403987503519204500321584986093940400979311922337629196153927395934961423190792514929752893552191612781025930779806940809347748073488156862698382316586632554531097474068541478416687472958980350462147229542043370966376951612302580094672036569174235908042392792082009922861348754900810642762162386011767716267196524707159512614047405558309045526869231198654773018734270263596328291409529332649735222668150705420335319769465472201979730869384913211207207
5373996013739990697006554637202292010533321860069785825009277097128404199976537163430585637450535494816805148579561924571056517747554447120549116657350857400882429019761724655720340465974195193558337722024597541511768455489944562084450292229841009963137094549217451331681817905394129588975104478734693440715083683204782281607795336838872403491895763128753290640898354947825338982854931267559169706314889964518235856823428090439337046435662559651700143711569575086573569627124354652912728119674823637085164390655787621331870294794577940904392020709798017325360408809054191003750299218897721285030845109314351714839790187795971666305588199093482237700013773902733073730520307294138196179858239813740704437154850888294873651516867866531415605553976328397837869734756039081291031211259255824353775865994433632176594824860215124447150789997421456161924170543832752214317501857017117934870794479802957418094172659233722650272378842003962384939273591028858259485681280063522734650517124720700592024503190
5445152238832105970200308151371801900107107616143235847115536995978281165233083750307528808742605565540002941143874829336203146501750257713925224473144855518861387693696103669523617994232375111611201101459297439748647388267459200813013679266349328732383431914791502242752803351817813918019855167200467126443959596212095412230012937785180621368904740496659226139300584975540396940968189138713630212621475457757421407899273838583419421850094135489271442461781867612967840281259964938951919393938448193171251996576357123654457926939171468811259400443993779102766652727502895609600502472189226835366234904950156893142674698374992326628993607966485208811438064202797698153274845831487974169502396605979807274335098034836109236427828852711258048141786054778320994100643663029556902570837898367870844766792830052796171750493189799905267492521148625102911003353413851945670464764491436591194854953791559798723403394543172251931597408230783241193488626433308391622670766594854714782494114377403163099298640
3589281430493343304207573431954440506367102005746914258775268625663056944615427077330312326664431034309894720122682694874274735620802316011315482410182991906165335883031756812018133914090861319389023790839528337203606889129436487920140167370284870924438860873830296648014424844378195912932551426780779819757525353368558050825303562419989528653425507781193568399131883673447888828695552112293654073088339775808234324436627659543962164946450396759723040075906766506152022264815158093674649622869572430121164843379253826764183953324829436751005035078152203675523168431161209463034491772102996315554878311000500752369796109685119745615468446576523546008325039060775520970963367909216533343057221662059707100715990114520515109428581554773471551782223970832412406073499896797949247197263055911053575580685552002226777990994346631851517791364630330551754443656577948498726362806681419705536740324268597539896282803552799726080554573302695958428417269671660306173853381343814024048279362738039470198839365
706286164147555864933364363287875097138128425573909904433183795098670203800533548856219174579901097084123411402160448390274656216062207733804522678116007830485911118338137291415500040244636646228465275546613185451215477214924093897408659253897872331630294361379429268082112519489979283826532913282908147824847781517964779380824918394924322420104717839012960422523766744397106063463998218416521947089619846125464833145312281971994057275917591591279145274837283273569411904875883590818927011083766111368623876288661469697856984023924541117354584710728162060928747544449729071086406072820826707352705098469570212430005031769870770984490147544922541878582516496026055634218534739829767044431114272772863484628968800592047985977005687260574374332608765746965647976405949709304033414442630581488362251756922883517287565772653346189666094175256518980878632057889091042584644510374477219106080358138511257658994752983022904583136418485544787844335722425uwb);
> +static_assert (g == 877910742369718983756939060508412117978592490852198574421032559122366792451965262581837372001950924590370700613263257217338625506420135573519875944068826251478098411179104273956630178489731637399492219205096327228843406034228851197156969768002652376081122551643005269975404468281889267981913199560021628096606273673238473241136165744439969588386509610342875962281386773554725997852931943688986401368721939056760428331801110079995345152096844126486603181395448862805847511434872927541414315891787470959955624718369585383855232108897344587608804255681047991066144937466199967508281110381445335329419488661296149273726327727155188903861073076047845956925614932199835041402306636381498931110972831171298902299624728018258792144918535392288593787760450040073877424000870994528979160501117773965772018160145351225988200456446241582865271490428972723521053727772138981668764336614520000117771211219751569557888748379298875543540138845614585448888053708836039799464321601482849566246
0205686448548113229841097955613958440901375416256532864511852298696327611517233241324799070919491286426159788792631723833717451538043437364017185237743182402835670087683125602640318887451596650323528720128188198547270462971612157603487958526705005955580409441670771849388016438035850194585870327013409236236730914217722025655319472231141666790287955685713636274653565577454275838590350806168639165264676470440930351612992518904664647715805865941038423768376846697817543122409517591717292238745940345900530458551468519245767864531742102178628854376524513367983209186974575765707273973775386840081238803880335095740836386527208267311808973522450391189055739828936937359693167240524660624945856907042041257347192086984009640984509322622503890256046324768341632643546455779035376002061691113121234273164937984171774242327769915688742564049454163158318121818582764775268091292470889088445575108022688069271697198283151469645400870507006663799330661702702747443254220478311056407220749648103123435473381
5835208730552187341151209786784404558964588524975699899667232359656087068265936071288476301376185091512558347426364387962855698738699677293418712135210300114273729873885726742284413334588575122260492832433475214578049120087810369667863747603253414920332978483681609032604700190675353306116459095608887974519070883897641904030079983051686730294469340122451388381805960985594425706961500112962181441863870246158853022907449053406669059217439700137798133324937711920480432972814232484890568414170138076703081910957324642214513769972707454684597021527968182227457305657212026631030431211601014598336832495586844591088625369619943085350399708145578212681703887459419803788389699105928956705542918117397687718299410438578196037512469579622360911547558939620383631206904838624230010389486206816112538671492964636904178280343035479227922490985224047514289607138750504639061341508460897057144703039182990126916002853558594129248477604970769784327224466025218250890974545423433548473473960450795877572106353
5699926870646542578883331119051762306186067523001099412719645903032216675157165664232169078747190660947349603478964371047816225566409299125144678788763535185293382682071978173375457816107340136266810981911392425229112574139527147434230557453697491827393851359741896378730899459343419189068773030249591068607233883641315916228107226354275825769958808983867746939746789934806529358175103584438984838716184743516032727606660368313170324641040912283279337675151268874519556402164606924599236339646810051353621165145061052331521169712577463884531324397308353641769207596248691884466743214435301972295965363863294829404998426686187015125531502334672467143049925799395804908806616087054502527659797515485553762026569035404102874274275507439659763196532038078250094456842405342003835752491712509924133499003218952646583819297211097086138006098680208194804434552641485715856993900589523667230634434821280585126992071104389130687587301633060167397324932707250357187351836675057507009105128859076478863019096
6776854031578939382690709022667421734442841784680826494146620589862829612704279521637740421694195051400095278084716974624615208392585573200182664157066813849346058321763156523965698465901396025152159642193562900743812715885811057212579017860488539960334406702752688595217360219470968738009774067915037157027492209108801337707562571266897723911401203374308490793226200974353356835311756384895692909802720948968131504604855466961987314701846460342135201914356152591684810924688350929140120187693089324255924634578576427004426339299493833434502951593902551451002292839635000904253250021884625417628756439862964325562720709528784964868687330847894476999577326582332350213148861205413652337499383416531545707272907994755638339630221576707954964236210962693804639714754668679841134928393081284209158098202683744650513918920168330598432362389777471870631039488408769354863001967531729415686631571754649uwb);
> +
> +__attribute__((noipa)) unsigned _BitInt(16319)
> +foo (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
> +{
> + return a + b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(16319)
> +bar (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
> +{
> + return a / b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(16319)
> +baz (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
> +{
> + return a >> b;
> +}
> +#endif
> +
> +int
> +main ()
> +{
> +#if __BITINT_MAXWIDTH__ >= 16319
> + if (foo (a, b) != c || bar (d, 42uwb) != e || baz (f, 171uwb) != g)
> + __builtin_abort ();
> #endif
> +}
> --- gcc/testsuite/gcc.dg/bitint-39.c.jj 2023-10-12 18:33:58.783645899 +0200
> +++ gcc/testsuite/gcc.dg/bitint-39.c 2023-10-12 18:43:27.619964215 +0200
> @@ -0,0 +1,43 @@
> +/* PR c/102989 */
> +/* { dg-do run { target { bitint } } } */
> +/* { dg-options "-std=c2x" } */
> +
> +#if __BITINT_MAXWIDTH__ >= 65472
> +constexpr unsigned _BitInt(65472) a = 658740284148534187695114961136530369457104675286742408361888715029767487457639745258269110240249886317764910962617519926948952962144985853273846011218502304778275150828436197688464998018408364772306875907702316817182683387148871723308887854112112463579402930725350062669165830897722324456671608862084486079277484890130593441419516256731992139452670733775886523741986340167187192576591995410189701170331920398516534916389929865325155573360693377190463960880604148694272709727088093187342270468838060810119519418536794398483217811730166812006853596176938069200326048076414146566159766278810309056335049956085009263131004491237525928873064552737130860847202267111638587294503453079821608351890851983391930535455283263630042772165195219968036530472336968409378939264394750240002746339247166720220434625126736823436508882346116108479044493039389805807506148294795213649415262480381035567911841661371328917054986702037474506481387946759159278094756892664316744474
0172177025780789486457477263777754683326252695130791601305415942487191867438630342247891766012431321817956146006992791410985378132555479122690677126977679123211896931447048039498248139173855864957693668015308661369776414124358796125934565678146691145131134704977383224998020842853072423310321736996310364289081158019001425076773452743146006255535676716365683772865892184343742209122504034304024553676357947590221885718589357655356891320252356794358118593407414045424336567769132140259986837107548013236754806464417945754910658266800327835383981190175509877504291549219296225643924071788556222856080730036854659193851356424967393556335422466950542654831528372516117436602170137539639531362173269244805548811383573651913384773380693366160833612323701776758979241370713613061022951649636226887299600240891180298240400746424116492984934190948407076567804619068048605748483556056244806300201017124886806285679439885127934704870572096097474967314666229676597603811021887094210063005657427334381230934787
7934257043013803766940137680754965100302990989281818211387137383832600675317434920893732120105407723736041635958085676519190305809361514850656066374765384629954359307080862256105691419898168955679806156443004466405913142123628524231555115399711321193475052976374230374739915275763990520499641653144284448959338924397090731568126860006699218100212808418951593973346259258754997140003401228249592046733643429633842927437674005630309466335475488976044970815680337796705251785679176317921969250255914644143927301143156940750728409691193837462118411451140103456466642917621794037963804154558563563784540744625286045320380647149505894465602074709712052403213672513944120580472196908870481008605753502378254869195510822476848807886998210212224568817665331382282682183443019436910934518254905570403017861343476981516822213043567878416094061997484366094926060989684786188719853361377592613245034788253106057223977996442867392634883776229675223227731721808083021736947720678172726157569358655251453763272147
5561970095862382640461367259772024405324593635211592168930058759436508913556837932851224818398092230424461778990183208848583788584284820048873500022484756541266954373817910393460605251595963881991910452208106222604616234889515483000451430319462255486273563224940726352467416903697977037500017445276516352480451591652279909040767925635990867360131436890024501215607918669186276562642495471563796875148418219796008849469733793860599708495247778225422798848340690887569938355033351633084398189404075502890764544044100025262697493234036733315610058559765641631123596248844497220768067470020509000604865578889883891905614918376539134175769967820733928876755472439087216207116967990963854970907260008985368412696442511029495599193303597256800955834718805053176808446667092748409663904177481403360281281804668370023402002759220835199539889060892548433203395604054420779016888308704043933610473024694664481247398464987112866638908616221253038547252440179352658019549667814788072309555370795730358005088091
9369677655865938004147467394771961489159148333582696167476286759963980241247364868044106906202967646531701433960812648848623950481877989660828914356681407434412816347492724899630095804321199318281805382288758318827071552075685500987703863442553965726588128871506198981822939587857331671815372675082635580326526098426661814475181883812943192756005252472512758276554944237246163595779050742854229621266048288383077810003226262833568526836107611065300393372075365862634249859810820711359162852322393134493796225743408874556868538147322281375471355730113768518870757777173571990738587592594536121597146470480821492749960371148734413209132673118470708188463056583291153241913016351496677856243484786102136221899346945137666770249074589724816507380141261371045905982334200480126618899227051847458469058411079677504019296455312815532127873540041822230127450955469948324290624884252864392749191605033411560121408206183428625157379777147161046289020707003899011351738431487498838921892959357359576999295793
4439472313648608872221417538591099909547681713055197851963217806394271932283786418963737083378263837851866770792294581430370179812803807766812134735008944094254924133000181138341444754146592554240244926530488085797161607440296312032375671384766799546314294952639429116053444305204179954961737670754928180951211327209631174491438566704748775957423647631106931872353072411758039523701355399245986495256131899939578128637906193987861515696267624022768855677386145040750676905386076271594075012645017847456843861067907361603785482067517607711397078496893391404908466039763474426356995787412728936302077788321037622089836944185920214948667492076372211507958383725993147568828022520584628113743069072098077681737646616832744282683301027940111008949487559489400280166812162349769417565580841259074013682180200573711186777726659689975490119163357473183919117291539140678034476458394800768806683673132266242343880852243749183854335527770813216391997262974885810843114429314160237463276656664218915730925460
8287607113780466699024107163876887148532823136807652271074006972096459811830254496619125711038904909130398641888976379495564867449528417921603889715581662053936109327054424336310277538417988110007771302653656028519655156816439841693254356107429939402512632413057925197092179302308752797611948399595846629471917434033567008203473342688503906508446374055015313019210965710262639434320664592949718430890353948612205525327585178100503625658766247187156345569126466419499682606225041162246302192843016239211882776752053840563753647780720616499872782212130519028625947117982657043189203295263034150716514902151591694366655029670513715831993554173970408496182609762391828657088998765802208851488199580988924074473847768495405775963730765729313870323033186069389468053956097564743171730378518901900860803342202342660818722766995902773116057254920196212062451082613993211736494388830319075021030046183439814470732700637804997283420998709865145859078919498923086580402610246677763734249783909096829279107963
5175748397444386570237179283888277100574754349606282123381617587614947989001087020021563222921070641878591029278963855034872579724066129313230725115913178440279406830983196418608595319951724533505941782307497911401592762543885257550551554713020501845338035111394567991235911661488630267591864694830726576293800411060151365889519670008182458670502028282509373959888108154070821741813191407395334150924244457862243598414598349334760402927285489932160910684928671402848388641482512847981885972473443834490694529860645540669928782031666069598954491361297600494902657367938490785068866747919043557217923700640868575456076214197732136733951730109782095302275531895464983856835927864670810909574004329566524821753081118949583132946592452906065686758698479079462858295765107376858509048927814055518283469042151019530383961354587309210891369459453718328541768290324345431139136937581065490666297465103197659357663321342709662736364942452767413818681620652366984232370728102798050673363409649586560272088532
8039147475167492532627097604997707385503393991456792672459352936820122822469556596945676396903590546739682393729575454493944807057345819069181271569904644175551803259147445317231361820692382321822423289376965920517760072762131028848540838123733912106843655308311750496550815033703056692798798011918005011348199727933997069164542544843124651534694478753855625309629960678863623815672915274926726965714364858257611221106385074050699918280948177141442387115797213194242870596023564029577989498938485534058029690537190534744252272824857327493965876618976643677984346169877601719298683399281042997338804443874233186946808040598508364557521255575013579815682146068863549337248303001248078807047378108920762143811221461759354620875369589065024312588898065507971561029929345527858159313129820327669633132293160565999400466976147547125003253164886640290777125287017292361727094985547014756417512102317970262384641051079277427351725574074131116107146600399234403647819323600759586671280733725982209124764267
9992211474830088391406026702572050787809706244801270713965431585429535221361104657103682420640848408902050821872666456291403579524947656884609185078784864260420652786475840152952796511559826232586163774856061041576320437160676931563405735897483753590597229133430595153108462215323538443397947556688484023090807744222932956511700847828443540706215201689378683160860402350691460583452896881929076859189003890667981185308004502860880024276160435498421384812367137760138835316285905953000428473291971683818919369681019677760140819019120343322636706778282044284223844347157187045951204614303755741757657020119530927860085316188415624636215459049385934475200150523989134737471656757391282277298605228378564933594049812756204051560884077248738968143069175271503001429824700281719207697444291793204317416108758500439996747431884969081601294312721064646794542019968973334142565437883682598967596378623382684989266586441962264253932822326693834010434100416221318342693312490532531632638056172922320145549537
6660336694444928193643616334800755026488131373440349986688591042209684724586898383739538150990536281451049529441722707147551675043853891492250453483459303320508090079548891214874201911954901400155436691111906758499474429901830803920821041746690641518507670674920580101279932939998628920498629478643758863961278257197150772377193792970116371024416304340456482626780095058967615253359498941861801428864161452038557018424088458613087087074188634746864182985718345374049156984256562206499602791479944593881541461204548994860989404871935846458959949862464480996212776556398106541575625125811842143694914244660662646415043604674535496283093323161708719103663452828276393086459067298901532580834654091708601828548221629477663040760444401720983638681354625136918455839318086272782413361823110540756537772687420101671687474719329811022654871311305580438633554227658478532764214142097978912860757538912605944905623122165550432297516882454792159875421258028486034131706723217150307531865914219454549701614580
3181512026343421286297638468103352223053704896868265116206256544679438575897966426762874745106558292347134875728572127325337754733765251105470177415270966206899861267252369448068927266102835975020557437913164840102135985178231875990189340734544654744647827441286010902235438982564998068477390121580268067852517302500958493927727155669887335454802232441766876959727296032213883872141451322900261005024406412638925534447309297109774680653396839068981982303959449585919601951784676269338509798444492284027198527534729264816863223855205480827392176674198533541998652285208950844368772121015938775827868718348053651466660945842822857135950701469458166244446036560410696408598768008796242326788817178564489668276079897020785729862548025216683403145162467545641729518620497596028019199039246447845134132855463133735174323788649842018758419435906318743206053356800088370917852318294527105533345230477001222310383402828126358397712503413591645611054601866497386469412638491773728614643382590286186308330017
7232532406837814064199198188135024140348694027706270466021369105567353406205770066498263842006140664641735570867457643796651027942987489865651994213377965631698598003315334972582038546537251338716319854745231340612902177908718390120140606521704313867063905262667133549096665328949897123387074263772881059597293809305826752755534000446984738431750102046080578714219938556793257955113434403235403752495810019664311093138205121037297374158764923978553507093566204280537286315132796571371367516918152731018072692037673632507814889959221771695064732380332226324706401910521323259779885009168887973488778193839610592605778922045842223243738728718217489746134016282038753387625552113879107484111523275396195679976945428314756633958955550904049226548585131055971299461394463859440750469775270874431297450778095957565762335144274170226667440604878578983907899484807199318068819565296248685239313262040189247424555109887285606208868815089025520067812526851821265219836980236017526902269174896830756860404599
4476112498435382073592833122797566981149502553600483555735786688795240592515820635864846005374497181075980051697134125128397674469159411021982237653506805042560618027533986193976805367297759083986043370736905675402876887324537074824387209390842532145279067600574423906300409081228799417165437153428052746120478596574468689903750552674820547482986150877563334161010621682508428708666371400241197665557445385371191914872015880554598078649428097592227849184181305102337411407574419487382853686513292619872833958817037547279620135274241043285343572936311222620194162825500253549027505676658637382145933181128435077230242936865953968522429596224010546569274574311725055813412253055296696930590858625008228486558032540619079034386428703722731625852073202005919035527084830666265381870200289703930863061843124331444993194515058587890150484597321510193795382392846172175793857255368728882760691418793944863158784734156715226483692094987373639647905446246699354528188431488804163521065786592449273347763467
8092762053049423724420978749565535935202527272735525538857856532535829727403758248515676377734964271319895603733369499282090619370644390912703118190967699735839422150118676090812589197956828432883454591775506142072991995255477162685456179917844477810916117758366522467183885517800565518850836567463260579936570404378905085631880126835957647088321534365595303983957495652572590640830763831479030713794949481583992861854626122255507636651728698938040296394529620734556222565311409570754214795520535003346400553934254868951469742466063081282009587365288248731116040001268793498485153779630516908276030764263795595829834765298430173859886036974114210469592900822522496578393807022364135855868617791972115817676751055814736691157277719078078363722995682352787453931398544225888615155245513172842244076107970477685087347438625378887619302413866466619117008334792748656074141300284702324314107158575021092021045201219104849568044014318163216648167167102545567590192051572811882759399171815091482243321889
5616198719533138308129258253762416123766345873224358460447990535366315509272691690329485865146260839897346549424877860731283397079256359945719148924833036857620838404878061319307313878491706853490798640202071793826896185940101620706591594478893442837072042862550367297301234152537954533813923635257304096629635129304641465677029534138829724528906874023248236764346236686074174517132526846081120077707433780321241780680766276555917057831422894696364496456740931838548316799431024800543344223360046425344721378022939595915640477871657422817112620459134638891666149757853672851232318484899649471682592598596513318062941002335146069352408762243882869072957956235251455654852640762036856969213012441570492223996942611235176773867715181649057373446039782529960525808689029231244755529140117305288123001790212303098672537698808510135947033209171235159674935977131630028069136172887349517318596267571125766069893394152059165707572594773674250039808204154076902840375694434146212715310878577115402923951189
4032793008591764896141385488071353368337936568311832144019405327849465532153190144579622416826405677114170497600460234737122210233972567432729542458492343897272980160416088160637112948475257195655075989586645926663459931893433113299226841949231205151524463460548972658198177437262589084739066322263967777859913050922903650294143814690374042112974576540946374104604172410974399554183291089081004323763725083851242126627415926983808716296687733941532091844583808460792648248732689080860333145493707175687258254158795086961737486749729194243416638834073618842652264677812626018747445930527331704836922319430539259242926979606544639422428570624583718699138680797276813494540680484367798612136361828399462307578682051903067792452463123277305356632706883691400806888050859389281441359993351212784625645018960596500772240874959932710563336019166922681112570546416686593268513949904318841705840814561947513740770430905709625345397094343101020880595888044166853663663098452802473838372695257939491226615576
6194059496573034122939179354744906886317447299846294675145801761429867331920860320689436106861896387056042301081513818264319294187170363122704106526138368915635603316494940799629455580847884255301629707874127819875328740309245368068925386845081146527751898281929519183808884694732922929381859998068561552287796638630153557107517603976885737408961385726894117817772124305384275773752681561772589162896726543848118292224854735017911552771598879672195419903142467189758288893617797981332645308463000380199968291172662286342433407530992399311582382371037051384107721693674935016059465473282177680148455402959465472212928981753238596329614601855483413398833842270568295296640743598590779752989551301629995771523000231911679050279485698305095423321484021804360883790254659446161386801194534079288499545690468910577746611299797864563154863490832639144410652702292169488612519356587316152787229543906355470677554502438539602268426767473565515536424169935736875415273620834081490730213150398951736650842108
4508572407427745942178528791736726887512293055311158250148502310005469451501229646247496431955943037960587018059412108840866519037234846290695945031104454980208910826784233582517930360520920749494573459021281906637821800412973322406687387607546857320678365190971183577901317276799357810541222638071129352370226133516689261473984898831377715156887896008512563885687164956592304352300355838590745767204086790919088316504227550995883940541353772653104975515648021967504052635551922089133715096211786760442033577529392381342337052099884836134183570687904102924072849852500782168019556818197356408899152865394247676992915582604979364518624443771624117771985127275076829305311900623041842675800070682438724425872018357844619313003411807395161683415215592408738605415119796630869728058393490710948896237349523702899994614303198557513972257421753955678348245326123487991854982336681083995849329087914235273384151925948907971616408704285144839032414051927660906888204614746941294833969414506553780705025969
02012960005925071407505634409039374591587356995126256441595045666991786542475413106212634440243252914105680546441834800933952893940680530366893360583164583102871341878638954296317852245050855362654227742890577697939811035528084823005072060163844309859018655879693761266441850506107247499887845837529072734963012358189223535309540488630641402694119285809766132525455640455074277103890569921925511571780900429074779519535887352143224202076526307608773803900609314478528807884041223459718478713147780482731067298371645459172074879456665672144659257063151846218815521853521538039105580092129093604550652176702149722267464711925176295825259195451897982973468788292910834248649486634164719847512355589622486356044931885992391641340252366296529307289311708336501951699737694422661506981734291820308445302217945166uwb;
> +constexpr unsigned _BitInt(65472) b = 100114717733501279047723776182956757115347721138729600912473525092734313193742682589293676348980090646698499578185617585517470684073352391831549464003765330477102561187757762352331821624084183379691781020398833769817312236580255374406710448238653215266366011299735448468233210044198074360279493272538045406557958991166999429636554253642483353287723736626614076173774389030939047034368309416169925794676390609697640839419284172923106398747822703250993067360914782537098910254695325663386815684191492860666091783967519578790679002244952830877932146242740101430274624860813733813737621518346385654857238660113122429104843905171306980734661172930679373474815865977649539832219611124478579695954630737663119194766666017364148266829323683991092607661278489224151059990583807281880150958519699211512206729907482237561220086387258275529362147029865909521016312742478755489179294243171430093282806931016966661559517454422004572379224590073716192247703943965356759520
3073827339445770737411118652590598378534306664329464542010968008413384366965253666486456172750325281042742557204366559754333202657263437900165292309489645217312566856308161334320978232881700387313023628632590921668666707952909769868829305065094058595925618889538916425407362196550368072631315862423009023249236295894081589020446062695908525018240834079779531697908804203874241657015399662582485901818383020426572427163507019816823809480978000145783924609106064622285749329505292474238458804442469627328205957961678293287803900889845472619526259221931399019166102294928616610927477212027503407049557339545012847747420959633487613980816536640382211286057073146010001374896773014420998420489117000615037918039559128311222682873046091484643181149460330679974117604463282698990896298189504086987282577941675746662801068896467975544223390124446751211879041911857089677225145102252663842077841732611188279904312095239395038881395781404957782371168595087697436822977482733882886381613630382111710421783452
9773440096151277114649975165057701948491842621088123386290213315077908853630891767567572002312672656998926314241303651158888400421933693414445787472201706508830703350251419935476665153045120566458328975727408166241315088098733009113375006723083492053374372897505538926334473094866954003582268010119022257334641723771742775019139445781421034268772676649800001384803621347000182480652381039091767663546222613419185095621469893859403826011982356385294447741237771441432725243975878075393406361587093740862448663779914715959804039321532721530744260534011724602580039985855696314297867961197224839622170050340380408035282969514462937296172218242987369711090475838411126507190556803618254934370166654995783401132547582299079945471609674633763963167177588449036042224301160118918600495502730689497682356176550191485803913345996420390690539523628654355737073259258254592370270608238829898129244055432652314141219176888878677498535456022547727515905687696227098637517318179908786579024321912076815651475305
8075378804237121387244965229365089782719136044346354639742868457547718684681095030552362332018190999849681495887592146220633962494400153448731724916345133363187176014861754666835819786079622711131515095142110819477599733946526083895839602442738520215405610661155875963333902646752869321042183314833848600425342924029514402024057940515954560414087254132638206655542732916298810645354416986968872665347028969439469342892109369274868458350967335118125301472432660404078835720635929784538443336511239984968501806047941832562031327607795893386746691225953383835234381573194967235635474643094918398517417264166921806441528288088045443402355878723816094922844956240649972407815453434139893648396173056349465887442386211214383750279215239460582299014299785457774615881718062010290696199591746236715232317901166371136396637267613309688712874953346067259350936395868267524609507790518269395096951214637354016666487972149783655980128430859771990004203501929484787778444457578683004883770156322092059077341536
7223490325369721142572756164069026997497099967736039333198209078540247724795363158838446690939258212834947086458220081018108207831951406417161340002436068441336081858243323321129832498399278405646709702284324338252219619759150609907496350495842122484191510950569654247879757336301521118143521482927871349708302779615946211975356563203342316674715383231757158567063301756237204144467726425641366301537009830828432714761242223346750267605755538500167671263501653380758498861898160390855129597085059056389974186606222608347409182366365227527714251434152536344693160357695399244292798611612536280518851912420391943006432949894775252634963692705240453422081329063595504731040531965597897209304884830013758344910041049239388813761937461342433142197383993756048059710314646887047346746950954645212971284962450349147073127797538885358647112660927055484661972914265355741210148937541197871234015849719376239119318126548247644507703112323424685809594702592392726559612724188991625879104216116185242619859977
5054202107477945500515637468874034643573430524861402468770056461255210574119017236462595150312767727893075391570854436877391409829967659093738061266023394555566122655246994373044731120245499670168973359576723554419101888756242722171605708112324424302886220693962002031841633801927203022267353576141509124382489934422021382182690968287171715554640687059508440309211287062357438847406647647907302872745644129127213451813332591670783001795315630135407328934982107294540556245541280008190337613499008492905822281021392360904710088481548997632102325952292951959826274394370239281910309023934415222737862736398505318760449944876154710635631398199457541614946025594449798661509802115784505028435653545036270624841718728504202452605531200926406588137159168235463216980260442726208359820858225062783191542779625018236715862630059966969439921202610941629872463382240918517403923502205476292714226908068624628031893090119098020335048591162466849654699406327052814552242071952639780998954469556659684350348273
1492596788167816454610363907131928062248472260573041500893166062965788856187295498704098181866189125137557826948675639600493354685969266855297623794567974488898523037472688252341617982295015392873790962088664497225378086193671544310879669838785972260142903223019927245095777580844549010638884104639769209200307665477604099091055300078270362519111246477993239904430731996922462686314752826464505758784039999666723171757625919453065906122811537251305497217011514737417177213763214593764067148752664422948146012328519731290903790308244098558969854469190904931282697255521655384538710810480303644586476374058540600441774912294572534545156636426733874536036390499586116578633893608943483320624970331502526937331033083364637213706286447812835438610194090360193847259865214797296133832566181311155776439894102392354820221013003611344028693316135266795276622685748215557346584596407856198349627245526002613343566627596047387566650205245868910425334754220122268774663499153322547243446655200236971477227286
8083258498323299776689890251556156906557349587001210496783142598804332745169413137403684489780670125649334956796141998256379105167815695791601991558305605606632964213545785105944425124992871953795793242683362773613163600915728437980146389621942130127162696988224687585978783003111338236299490618976641256409323510320543668293965519682512039008496710443588512821720722408382580989432720164330836291638971245977842245209330904135333160569932261808583505630443200869413990115524123546740557952143661727094896223537439027096468423537669187280495740798526584905988968569587265646546608766778161889049832040569569422983162868096286663231110743020269167376509139459519369783181986108826871098093912282617769934425525688568420862999851215283545773581203715732100585462109956287214104851369142055617755076344028301266250530929705504209252539667204248937400536644612732926155787524440897264197326410323937269626652646851169446890792364329929163397911334752010774947160247837272667939659716043063163679094775
9255218973962359952938683597860641408920811936463844485300316351713038722843489905218526366801627407959817522541816179124202243571406912044521208292618194057085048442618233952645897881806590306037871146708831158564589874172996169923947168214470256810387084272070221666940268086027863584536223043406642786914423185915975926298695582643993661579127490716896885524225625490134307073674985802541230290176018977535858174347276183645382617185891703284845575248576190875901658329652248367538939682406640451450772233060965295299267807547456739165741004614125670790696528674003879817915361751059057145957168968218932531781420086282541336779875368516709744012570490959430860954370323090299486754454736661090702071871567946585674962721775272295602102379271937561894925794931802955147140646323727909738605325645810616578440281471858695432096895301523294423211455509148121851350587881118703132518943871589031484600339275982239181590759335715185417689671880045871277623155084039256252816557368966917364131487788
6854023490372744509901335180787696294817330796161905970053394112525443907867607433668652883386258677820962996685886115562854075574339741971216719661373828156559780529282458735911459494401559489864284887812419236439545341876135885651429400013372301583238860904028454489524708142722596306803949054854566597158217957039081871297261584604777835589339080130753277065539224637472918767946085816057384570763125621400591796712807858659361014495937425718482510759878432518805178469184911397470582102792186717135199970992054685542479985782231415083443247072002183081558412170430706150181461932786174632200040060486620130556082725775550597153503886491716273765811783242898035508062776289388360315897493848644783580401671326513023177609545661175067468865231253962607714995209579233510463800213895037006685022727111530678946960647569492041994611577889289214604187003067493607014843594375259767009393325507098249374731201260534197847535675315091627936145725445474417647007077970651601013669120244089638820059008
1844795269152725464512387015293883780731075438208824714826013076937817552042935936450538487319415068018555738716441051064481563486324766943945909966686474997597327693243378137508399393682284825856778668229960758088972851411010450242993271725590633036432046356788918401747659906001054574756193192120573981725362741737349525732356293496573882848348089309892981816726530132314892183269066756924208651385083136780354935306500525410004259803023906724630452625353672215499323562560611792149842138055657728171698067417741086716451343265813122003965614926912322791369540825493265538001325225907650927009311992608854430064954174726837092188363478893414165567139609555214471898251730451899704967831398652643073509844450825926584462395871199449130517601813944829565330548270914013208640093733624143108845016564637558786888969418588276449022083235305193921911343632092220936058758043636155825329719994957248779102750249409701235986342678679834490570041583276260318551616734929509859247974209261403009574431486
3524830594811912330215971109654234277823475450826949233300873115703046187478402411014516918501171394690620578112573544368293533782888568773869369543587027032898980109044199681565759544662105311070508798601416186959179650143471610299492489426246091985369177729260406066783789230421587096716329879018894549329270873067601463541520889918475426420817563807350197947520158646323295069213325616804086563666329131039061143301967130487170640776695621937879147358716226014694113251877512714119176177883357428797215644974469993207920452512834175712623757825520278029416827238494626396075384884674758089815247182057948121046122869261740300174333401059555858672007058217090686041481906503094168663158088216924947985075185274978757639280650191451945944828480919891932523455559796266687703652810898275894915582333170797064966875175475998307731141354237861136938912636543807785140210254992405444645086799444757749755292912380513641826908976674380665280871428129904708559863618044666425908164530280311887044793833
2134726962881831933268902895367605961305654742682557681942595468692376585710407167969955445144928854325958455185640902877281897527515272503957173916752368702422657830194930248690788806072926150700257030088973552028794286919001287564467565169267168276360307868896645323350741447653902093097675109639470686554558522889261292506848863285598285129339004052668107076800113176815163961345570041567054146209333141463996135121987937345779668356356471788538881904369947412786816384317275919332015924666412228298730977060742887197419749312437642373180122106860788033207555416255486970093794393249658029678141106618618752418344530675496475112902295282960974467835305345646815993451293962483421933603619298443409212189067242142672046810985939654246095575583636106034886704865149056128346328530869795152065794354344104033444822747517762489977160553533001635374459413235293846801145574868600827903435057462223232011527715971681357193578475384189501097323708718043676013057635619753633401699987433242030567257829
5246489840422975227418369151484696989607606205798369381059754239875513386948805621049819615924026058683870467136361351462554900905877136570630132068343421697652070577713958175751511736390600492016986562017658812576875040601509821287338385630497960340238768406140119635721893147158482755044800949082129117271516823509724782651915075318312504891239830222664373136539266830501584625111882418099581300493397704275651604138355741359863235102915135458624180632050743389510794622065136854431450298640739213450218448491457455061620627280382667802498186253256620393400902374963401194756144530712324212970808153617659171506544980699033768677480627013365172754612026247482530206977265000318646649450012451118442706938046339482936609567878433738518457419021315555751974374783546145725411944227826024170581053184801682467996623778015384123147829585451715118941272319386868142079679098241186789034235120914523309387979601289104153350818626519608560327348353298554072186379804183583909567842393638909846564395273
5628243332473383216060392000424872172633868383665603304741913722541529206617028598489366164008387154472041318961156414520392837713496994954847488876216306800039775765528719573965181275931572355694857943445466939663203712929902415087240180111736994161558364497487685650219920717538755641664151250304163577474931474659115583373978312308026111009478207620947820155481872344696883664111322156405028324519187786253371108442864013086448845462480268074307297562030631011261972921133306910435724332501877892552033906194409862846536265120661707500241604805579547339149243436305202534726637880985169429988931722237056901383224499464386640907004904511877493386836838460325863593961560309114880457088496266124443886593606747189366825030884256676278831941153956149078150376315565347946013404389553242694515612893461269602582850425215128337513451092845990309673471515377810940313019713124801931665175969397387267495573327510342198237625278731238579765822077059827596514600335618185699990894786477007670853558634
9492850757899232423143844396084844040078005090221296054651028866997635940904155999427038747919225619740701123163061243671120415487124489411500715828191499601409291460757889380695691474308683189522903077241070380367089132643611650523307834742745303310487887966951497117510647349374273456397897912211757807464869034382068316034160043853449543591014954136582441662095506858285864781585065293658602509060854597649067616795737812231598010734067941421565684420201992773835623036204418104877305471742752109397920380834966996710722028819710035428614600730086831596971100231590883989944752546536016172546412684040033559521236967246214853735645413254299253410727690575867954214416140558081346451163964108762439427323970051606289776165858416424357891422467181650062684992877166286740589476752703701626528952288163423007889277331352674140021142845910516076662232216674718029398638715878974237152069137050755428155130793640662166117584202466608262987553732524714724388803300488229233044845668887800816824438968
0808392169691812194480445474439410519299254176998225544228814219940872406551748807734735489117569029981849007356959484907297483210043822793400162780947035723641331255642816427196077968877564718028353333792784095527846480737314196356985189359927861208049176763055366050600091825876115234629949893044518999431751962661529489943854516054711585958729576878260545821534727125427152553026096218886386513716975020216729157726765133430007909783081832879677853494658359178730226530423498568765491937646780166982333328986987984737643452540026626535075640381843740350027211766445117410886398650913045302451682678377009556557791228749026595187676965350401992033014615387740506128086850395023368596777458940761355000615813631768427996254735518060488931860877409468666074503882613155474823186569469696965506628340059193485682937287513720597462503420387284136377029994536410309869235140887352382461857273893025017690683111781116544235840882436600818208825724023915494076254378809137904596210728874811828720999143
5180324314274409210776420501058152978458105325903566428813597439980399838364358262296028500366154000288384478306460626295993666916932940239465941503684606776852571537635171622049046440670792064269824591880829452908482603177107146948501289105911041148490677980887051148150863483921836791863052474990986965192415508460874508819694203259259653952799996114078245000051000352750375035879102992246248217367702735639235085721489382477482732397810828536454148763792470343831385403015608690416306693945489137685661479515467971479291467380664201915256002727139221508755217946544881806041506151914680109242136881071544918769077524364039400733653256740144439473965089607815024202359479087741595692354867195448330647089463827219481835670917223612834033277020785169897157158731901079260446156571467761843847556916110441757319755686434918914684972483808399313340825146588376172854232524931548651562801309480105037561795634675101649240816105663401609281901484185389726700696548193734383926811429044452354921485674
8090163208413527478840072549345380110648262081120319520850811775071545119935961470512637911989177087460006474693931889487742359706755672077087166572689858419021851837802780193208434024282299532942483000144195002022520619980583220590077215711664509153314666589125687826629822516884195708377252997538578332258307932873989956586374981442291372854468403699025042572235856717915388770530168587331179797655658071103524008115236353756549679170748759469516067942438616716357831153014255228670162534958193004943600542870528708805213389429304896418304635289448124302710129897769356418770523480407389315328572306634238009504382082021165613590522029840102543328930669970500692456407511650187852937349195602608014357736751059571489603216826077415809980979995711283335891962795940179019435439507734122753192445481086439094633796179207995025246597613838245829524552778303821902522279173224245471199657550553825642492239342948135017794983743597654410313919346933663867165680179522453998439173845369808176275332816
850180170341213378782496307778975588398912577730974746618617131469815557973549303574003815147711173642475398410677966310429335960283636647175743582296638000833820970775030964223374636373803454955444189296936840037446363760362609968685074787335071844649451957697708868264272628943789964979104588674822545864503338181273898348523408711384734508949115868795361526655558615590780941372174574518038087185667131948876078387967198148041613418973289441521934658231375183374956575695869332017751718627982355393837019680653556985919193671847767127134568298291883035015093292336382067308787956277908453081687665703784475018000718697708635284076006695671158759597412687872005027545848711100708185954993889142620615392711359879239101030375288401894286247542619281771596083146956639572008458511055345530112400412859347687uwb;
> +constexpr unsigned _BitInt(65472) c = a + b;
> +constexpr unsigned _BitInt(65472) d = 657333107129743093672883594806096262067918738874061206147335664829899167995562571122160000492961918609469283769527709143069418996054859407717556845406504426280482730632708732485145552100341960755611390660458404994923614982260732316970063779715367212239521543930463158307760389404496915413197406969618830878240172616813765249276206537685543796733736416393812774838688915876620018634191248710010090795379215236657683377162009518968159699247459297953292129341703124855584649467775033512751568534319576115689207898445526318534476109689204960777386924980005338527605075639671038410506669877320760301005973434568166354032399604338060068564181527165400916936371612832461776412921735435745123669020958536764437365761474205710589872325182658417968624337186642743499206339065313937696426755250939147111539739224479831378364561651936972350525518054002980867486454182761875450021065409169403951191750730424522376269252020603105686974335989810903472535843055124441579027
0145922781496218810258694889210961029914905150272997462890860980983982182266813031772733444179491098232328811368716741731236633025151820277867892481965593354957267776627630443053812457046593015888112415853579355149886004686808842764304867930063992530159346676981238710561501257887788094270593203409702079985047725655415718752041079924419208635513149676449062315123980245395390798751212926447652998948624511270937229871361759813000110646627640925847913427543377810037082562733811610334666014274428183885233228470387311599471275432210319948232764384482144462096906307023130509974894599017735411656370899420786097980786948798208690857921455345783933915686323649849390187230852629314975860297288793974076658199670742232486390254485025697666069525555286804732021540553670413618296365368851253088138944267368815377916892813527266723528271411761918661075644901778295710531640490101514942568245871623583974901255163696565322760275815174223826892898909264139303511760519706484625650991964211359499485139826
5224351584646864671276272287170206350834967382210977603114637135024583665957926257686586058765810879630550155133497957679518697701224201347673784813556755516652278639222049628628287667613121004050120363396228919211550751644909908584892325419054798571690630781528920127106892476546223788400087450236632648353332805463973464740030783584597992338831046583674519869603805425373352565430767940512477204822377530625570185248046102607943687326859064835877026768109497540886942682684799854161862922119146249366591746206428593130174782303743654861025754940013540275960320712831588609903301287960684961185629000492377328684361400422413202934931928128205758977693042413470979440630546227978341467432196713936659890524636113664916651345905532522446273701858583186487486581241346946982996651940112810669464052280768863401797902429886586329492435603149059738096812614308552041610545962554732460517382302778704900314853378833994526492859340082586070061874180401035531072947356120533223330596236951819458671353284
6102909023671143392301300384746530601941341734418652311133693489536523568884299452255732979681202048090794664439657693740178353953550237686125000429306829814580362107579044331180802522267631963361740380155389160252530474653277806637453162840421805899506374109102437967221764529974224520328698494741558015625874069944943388063976988579191922532975004937843466392261641585677061536724475768545015086566424163195463275033551016175528587124041393853020950532989748311705335100554187352311639528916732784466324043522519266334182939177568511599776497456522192613474007772880962377969879961782925182347690554377677852812999294619758232051455707664770710251584705575035393186201632269356422307503255193514073386718817917774219472664771288405442057441674213983681960459747602814778449094104351550865236410062172029683401489037331668616107451285668821250631044385056760194738656227074924730214383324056403705089955854350659342526167302871900140824901793495791558781756730902020585787894707399471391506389340
3813885486065958073729442734608447351576108565637469430324003484937763860381962790169174658445473707598769673235786416039268409773419650690395103034056856621007393854502073477467253913644143159649439982176059954180179000231571700079050161876672627005525957114543681910207007709689364049851017008273689880131986658023221962819285932613464496229586296239450324437879049775133337479963718056297129263039015227544470279025372906991972199066863205522981145588573948956507652025798232632387551627298184854851464615867936150814892356135777803588850205186100788047920401111048624557486985847213773830081027013943593584092837383678447799655808463763659911832039913758601817076577854356177285210846077985011148453217856030160853058624225521817041339123597540412481324892103802396812453959116220025449253847788346079940125172223038915283068578006277073500112921865822540214586968944532983207615886554401254638537995235084807136344768908429943712839312971285426918615888462344078508012782856767414295513997714
2314173327744101769578385949887626225232567431292464838177881053175933182795610276528165039456432713744227820265347923797672998924525666844096977943611539498280790283718695987111890972309916548512146602693673585809451569438925252460399015606252694572451638647723983860176322391824411594587395886929378769888525765272903804387296530026060315134144616825034150473979181473433350930826379704943481916964116513350250938678585295189807690963814876673299057200601671473184784764308134823451386765389454409346892892074774191075512646614701216770972610868772288229260369238970314495042811553164842978580655316213597939013907486910566989281674324160240738064996765996237332550300274306784336662255839815949109702299743980927123146425097820892903672153196408370662800689888188019379058741285331097301245972926112276153227947559985943546686506638810613424903193542704460404171589584398190245989640779754495625561723849214983737287782842000135718896989752537689864067398378213687459242441194971923220481541558
5705624425950858510419447998089045445069015711736928315405511659957745953974704000905626835627947976974512851368280581434105919447891804279045554562369419122150854549810712055252912164410043339128383204264721562792717740155584315871505448067811089447397214927055087098072426775524144684970540105433746481765774200596108550757420383692432521376930461074542878118739877363568217164926398644723322818086438834881918588007046525149646632339331210739571904410663899205443291302848586725340992016957278033428395141233783506477093936902809076503549405751074802834745896244317441122165192230177979217286143021390823295942748401409551690961823234539262579600181356596484909664646111274196511500202980228516727959586137332260543740828183760667330513123682820350383682212848636284390065783855535574278826945987404351726365525549769310167863842690737452197839673159925391943279131001552352099498081818733464189168447961922767416031702332355798269377412917358841259625836641206946506822264510660869770526808629
0717307398635009041507697221656866220477747767618123605407399849194240043466440850119179268068589821361496216112947851616066422875481409978589394210438781679725137692185174925272813011878956873227106944849464570357946600413112412229081024914149479625305399542012253529758198321506336302563779957474850233557586674853140689131596713185448201082792851590014518393380203875983778085662184156665020105197427796556630074285162573593810696044709208562944694914307097680203625742689065640443066436543802247876733520652283701886730900137555979340487112940432203900222714968660680005420340063817390721113891957496941812292778542310604725461463851245622043312465585148781181272440402802127160349063652267699065791307107776963744471572503146566211944653831184773275154246519191262817283871520433586386467126332012356960718081374403978479455785027581779374562453968972759105961820799591782269219060737134137861966700816632694682397115081617012291973292742000531798903984726686066083895301055285250487286220175
2813773661634566079866536422711701242406591907899014311859857561282458525992977344795421368705765423491900494672782609071622856881671225075228441073660291043270090532848717852955586557701097116656191206054810390050048974711729417972730695253698922905903402839461448947122909788437632918839109833855362870382021199337984636024211238445100119626506381001969142602820463906490830595091014587141363784712274529031186275532698542639030690737659655600732970978851629312632137955400109789124977675620891004796030561742309942982748726372788787844021365802206904154115828668469270647299065970892497506111177532779559235107495836644954860706519473738135333950676031184011334131153827391679043933870226065555817120578169594750859481964131203848536656321857915857019373230113604751095011430181838849196745919952458747873798651717228532368461626109205523225639696330985887543329702480065069798021969676105832222945278141918785180882254250181098714406914257413016773369311869929152473125037538836513147242640209
2702446216598670092800978810630954712277538571433776015380419087507200062096908761819410212936428119868902022828049238294546343041810759007286132366643835864136164416979625426895789640659230898177337998254015736318140418661883418222439047593339278891042503458226718034144341052087441861559263656760231088827309077334161745488429047380985979900548898573817593904054859855182921159648180192711392831111271448005177697974736850259670759414497416151536981815054768102109672128031568164352310056731104236745134606369036685718247881592667879504856436611010975190277672277558111675397238585414459036138670460274257902615863645764213469379497186376620931218766642112606592926654494530804672239692215411790314788396420110931875585747624249999530522696800264083889998941701084169165323701593108223066025272422415304694920502876445603902771631825668033843236470996947075140502418650251729901717326054221012523577610631254761457465089918530780429229231535327848633258972445006450801499433596822637611504915267
5887544298558355280680844862978799551829796731499545544499437991183502231656292785150150671464803362198776660500227361880542782072565525597737425133891572671730143693069954075351227079558745655924732492935817968206394352593029147851239928817504290953677536982950553408321205906725492235236990611599295323986848125470170643445058996817525992522482118170418606267113186327220366728835060948764422221988526699025470466781816937676915504901744390649817241481691689009940976935569870111443321158313392068055667054333480381276107585350392697932795867702826701158682468024416179774906367306525424023126036148275069378428785338184806566092468645903466988002458194026366579622727184058199889005932232159291467941059464674192402273440296726492293566621524180791057082722105906046400943943184827517227980734166087153962689993673448712631279375311253572160403791798495637298434425546350317143838246968778480810321251669665646586376487296509925461561394929831336815177079388503208565501070369930280183083723390
5991992846971231980083357412443374790849451715248332001200446408954911292590345506980059689220419521622573695142800778196641963819347779781464898335945168142382288667603631444785921490519524557942964428371858887048557762883101800114636975374788847139768098532708794734963700051171553605854224738749839228186541203233478952754225649056732496723537224770787140204485344097694581527085745724073853845931749145068705119355469706666814377304194353069473678901721251998125134277321554040010085443433214437095962138168614846132092960249532502790475660773357322473456633740763590177329302651667558515902026192312270713340464664559379349881654479834848594990705911609377850540465814247981868919471088482610181053279395956541668167109033136996544482455304496236470853311516882696402592860776402528524418974654229171819383398946865904742803905698663793581648361428196179753345853333461596621837135825352632730141555838702201751706912055431454254203634774237836923223909207131773115474932364730163918580203711
1409389216458424725623997151223643247431132269042033541316703318532020380935778916247660742250304366968616917404179750549738614870487979752638998523895185762159774847460810880247740510702735177215007720484236627602099598530876231870233612234899916615223453588612062974684684149457842602529148342919086209552836863259966354315568408706936797432058706107284587790270937691067191418286738854541044453647546006453829780588826159620533965516686871645439056382377969695802552309434866804898691213327950045375489979585514431304418507227395862050998092919449347189816442489359894842653041402163463929282170911551862867273011987045753131276932105700217417712123403443801183617557931206261138966921721929701896713974659899665997830193406929098941117076026440298686321086199762015965573477627473977310918935183155057446727395813946683274547393837843243884501180215302548220195829992101413454315735327022384985434259064376331465110392862139010770942050257924847771939341762321000871140805132550752254080769794
3824309321328770075463842897340172756860810538533118481841341512026478590358196511278205925132488797021830902908095661190552234257705515316017139183281573567170920283567997277096909203811676834457638056257968004969763863925309967218052457359263028780147978348555617876787656681791590189012828035529814549499757736664804319699530638068213137641260785291578285353952395509193955387681671881442568188143806715799811233852706468749478407946224095149435531868876482494787634889606454860950708971832870892467440838125678745900112062137852039126198133389519020033853942804504870361110050165084899820556321302052463531528961536358153769020729864986409654870193184112846021128512161607919425054636912804714991325132386498501892867131883367749003491028282446879173895151334725093759859697170052526227447869402374254014520547442278503466536520535663921319099621749692456384807957731432515766750265616523269028363842736137870199629207752439172494316150819950025156735216446945194431419120183019695363829635528
1391315214165221286987409934439741065567042555182155219977334605117051211162008552050535337492427253161086619689944865514767300074434538675912676999280216534587905627238194494953260482940568293400188546300502051046396999957249695964663901363407706222747131851011821193811243337366829604875455415851595817936629351826829550581136476539437795010218682911765844577711253228470671618789932794676490380865767038712588269058013669058792562996005423843803791484387085411898630625696125013546418161882721396452684841294493269501195578664340234891466164269467677385637878034293455809942446434225495352332378954730697473949178984606491568133276987301905841355297400053577386173285186611377447749125561813289416475082718496432897380687562954485268216052656604982175166636595368316816184037417869395475854625707060812970045553255755682765008637058611255039007981700581445526495567716561151398679279392913224930984914722746088712741496204641145240343337267832439894946010794902149269327815030140928095537137424
4194699571917475821259773739744160103624000646620582057350685066536203580200915940770580937095633056353943658889517037138866878155956729756878362971639783034143803983401962568868430571451480862530196062519591760127365230508909828831672245314930465761531662029847549113308053021228776722093041378065349263326720302806014023718206609807157563163069719384262663641360143977551635379444361833066885575211490719474010652466653743149862995149681251053491343954729391464008606095985801358505307563530525313690896115716020097160574116392403652652312169936942673785204254907363101645253672629823547454861297443455885329228940543530372204703754931504393818330569449708888926160773097773163417958834681433101462393930667965401575794279029051055753961806373393298229623514427046938939905852950121777493077856296749841868940847228498234679887806647506796935595346257745285229934886471320277467559932384760307510144051496538091809050044157446765503112214112673083771846868449862490074874787885083927825388914863
9794711270491006297788806136206583609101330286315585696585609672645879392391479536006192558476520620517143475622451864971860919827868669057011497366339168108390056130031742203276334638305654874425511969020169249904566027367443996802587776927418830528195550798227884451262339135540246412040111714809851102989895472688923238515102030372650619795251663753741968472764475022240404192973651248349787949111648446325931605364034115226438340082886069140174910423101018527477319970377049429136224843073509317188375499864007960296265907904007935101607171119111168014419143790288622621854200428811898527359285207356127735949528378501289982180396005642170943835176607603498888571376299465757706972331714895107030227222323875452626022762843917023879749557389716255969367618043159012791539182401377402574534474348976665518768361319682568793907189255939587848253595780066206372276587148079605045236368695815980596392771771804070013044133229489953020029751961507076744746087545717326965405318226668012389472997270
9573570698706627270034433323209929097134664823788484666779312590125436798445066410155762650942485034997893787224028460212608271409888891101832339701067151190376431210470677697853810239905340357318543088596033437087441047744357222850669065868528446046740410109557825052671697608704008115043754427611790290802442242197178818583202461150101668283595827485977845284539626583718745260600144453281308210442940609691638369829825393954583995698366266720158971927855718008153570289419638691055692609193578393304832631971933511941336873679108394602640602562097556694144199408702985966498710717489164632640898761368752687108705140589757820237281212812473653136623398287806799099262908394484009109400779936356676886679972945728534689830084292420337733083763707387359460107302890472955054186957291401602261166979427665022210699225524810990904147722777293253830299043537994818526494128605925817350925088323444808096338513145738279696564731850349272008307820505114672631691086424540539543915924116257585875165597
4663731178447142547115740266612234403929240784516167130519204323114038715151131005187275776856393883206917769881758747080865501981091711310100719111062769594029314573856084227639885287188144763978144035521154577450964138408063253505851812887165216620121169130896565562971887150859829022214499946816302184379649364423207873914782166879082179030582612211281005856407571582827912921480880173963048291820838561165766969148421664320979201476202321113564015511651534895596618155141999822796388126793764833483194645489059232110420340644194847773484552908587983915268381023013793451685080323585563331103013158593398636902586790595727102563822485853944830921860581904432796746453282496740384505327290403552204634925020224468156631254564939016733861996364896400490106666773684296319213845464189575237304053833044285653975355158181876520938745344842450277713572686677210983667352005374724412168213804206209545043682366823932758551262380397761986213212824779117136801187195444653678750161536867073206959642587
22040822975809759593976906308805244188511548948755947543912746457738061565530716519713167241081134918501973826739021484172593069513499777141328929736443889220619862691489015649243210929597568564547430948813132671040781638452369284835944133923240780767953175287558722117901106695398470566569210207177272401106331295413031614114233240842652452039520120577789477112213113151681038394702186301416182218247167584374421196913821288796001954550153326787772982152472873940191552643973037381956032576392763553240937704068420072583921057053471467372933417647188614551861876072347018962154219975121743480241605411751024300986478918975618499472073146934217998545512642937199165055642656035521248653183517787719217771774678113026792233128320134509150459329079579221641634322619683342322639111798635465124959513826815422uwb;
> +constexpr unsigned _BitInt(65472) e = d / 71uwb;
> +constexpr unsigned _BitInt(65472) f = 811190484386676781670876810615474549563811401393842372455835505307114683339386454098442086798491338543270576115534894681281643280359848474636558450717889603623208318835408653798686959081776338567538759280422428131437597369022346152627846033494390523881365489583881221541967109820583195819727511612756332448187766568784083686192518901453073620291519516566653074499529500585454136783597069069342198611287620579277528785268883007074750525505672072180484646865904143298260118994938776182516121711767436499295422087043717907420515810615649246867286303178267831674368742238268899414916133219880116859152348569119371300799546119504793724050864922415638237328585703876934199638512775114239638314855485483000941838487775980655924778743613747910931344958582587728953501561737639044605870883046260806347823961690798534967299819332207283415794332925650182703409249698931765861375172121635668546681490848541945145405129723675391627739795469484053678253688165514398645991
9762372744796197331385294018973409726477358122329656467308678043794952733323461799165303943642747008999562953867753632261634408701384724582588978512930710127758756579041380774005612815345934749637911947590879047867460731102135339402432654690122638486629202980485676254999837827539560786254602876788758238488689383530412247303411259855548296103497550222629447626395595341407018407269231225196070483152395951311619960291018219375772081861178561175142487243567075561722521039794925073628948049603122914778582228091507380722869026059412492254649563308071155646730259025710761380582815489436240655306512231803237594575866950166853191964024299614113553785615235070407120607415899580216329894174442928566426534660066481358132033008550618281096968236291055646738448252735588104104995857898372468227005197809749757398859520230654332822889936653530314100183613001017922395548431067169131567515789029816124631469990609162968610203711809068722764332398366140231796679332914860899020815181610389155121733625758
9721797279511678677607962987465599398444346206660607675612669385133994339334001047202637207070158304634164621649018083846364972854840542085445503273185398635963127539412104744443236732256410064386842938897180293501132242767965433327446407714979432067107304996848947553965459312857290102292633778071925103855561961642689712171066326296310751014912350815838229102059282801001807007546862384852431170548875729913417313449317847846268130604437245222947026237046389351718642033347919557634869689872939487994497721319996121053479869301217891602001377463819348096214595761560042060467757505786280651084681880163047905225772849072707850057452565822401181498495553368995371572225391463960379328369998850781937151047607536666997565456244697610971794918121724255472143489722289853957819365396078455701339705550882833666248654901691646941516172619659758623700966761264487839045597711090111609043113466081404797094428834184000722494962361259142927215260652320646674302376291741333046218753795318533934134259021
6903474976557043864116155926508704223422296189878167693237692562749504932477258412126902429387116160601786425366455810378480247440677220238902688186638506924048666827187571772805913390611149742001279260817337330181021410275060533913714257396092590953367106416867397981924123312521017101930505061006305740408075662961477906787930928215036264661889973931856234444596847520407227031845659526378903003573440782367737030416121196887537109517379830888214045223933241522837157577275991561982835218601655293411971481754663973914450444879343072535728742114544464133783215269914720296745632962106594449450154385784335300233033176461797307574865513335474841688095531162756815435547697948521114471724643248202301952355705741012220380532314155311304035356421010142500438293129526357756231716153961511901608244689389790219966358239465300928734354483713383564674949805206789191039946799718711905749791161768610829786870341188048286714050054589675520899625937617534857651925869631973330429441080560835078751733773
0327582127952836069042091510390327755551773917611806238766272653192442788626322346747275646489527610868587701161707460487050332978337646629416756125611878941404329084489046772121598092473611880261171746906155398546440328310512005855340200283220522575656448059046404106217005420540843520767371776446287866748409458532401061598400275296528559832514229640475467189262421241009291544422245092280750243426050951793653068171940038517933210207896296098905330430790363098706832894157268691388443721177180610729078142224009440451792593920861902149864474759575366753053485439611630869396672490103491033388238032310559933603999228939671752335777030596518096801809168303856041851398959367131549495200557564158906609642451427289321328080720358042540488811723764220525771230730352097648058599063149355880224959721599068072723572768046474110620045794051470724363247937469731094925980629359560542650415687526564385248613169641346965149777062561405556169552087473413256928018415533088430354192727409944459607546031
2500140627414316921245782551508392694567926458725922156525134131912620565629563745424477601001002834577003764301757275006572898941827383642087739961341233316802079286247050240864190436485241852367599925843222354834508189424267520537148646435669679609916702080455050518247564333696291426460728311097975896311205794873263365251428440180820526976514251965060111780918811290932324514544775320372515644899646445386297030021170451457124095843775923323648641302287349569472380872468981315675312934595215917185742254550785729284384994468474362021071156740095507340126577833882996928879297117957134110697823557811746768297256901301469847365366540872176266513666224312797304645117801470774161300769414206440106647681505178861726195178070504474193201547152440879140147395354291118092097766087707629160801177150569212616669050339675277783278561419070471509958120627858186869286180400810179621757437463950373570215026972271523776904898375864872682957691253734286904820890912266621421134519912609409321158405153
2783831210899316630767243948594471757612237769987817344393163137797256057367971169455189109593126271474508076936446987681864215431760625682691261353649231077717038359436004241214389540274873383217225704423295517387604126234696108353309598228551432378593190037551409318927682376515987265571246199344477070624272091882210641495214406400667486198478074969144280900272908926864268293845220126062075183752671072720247604721271034922246652419887044093015641716030291554771146028196629068643248048942334321832350063613346605199802287442545105400419142501111388369897710574546543615478085989331844563963565066452212846963515042360676842639324479808598459248072992290490240464732456732034365217109943034197546604672972717071206296903859438750537783431844557737382378815010824629532481659558088980847844756326623202556550659719139202190220359146333241747321778740884386004177967194906286932726679600111960663965829653421769945482554391420905124593885019427463520451854261480026349432043792464799926392329218
3042703328715549891977654503396868762123409394995290980002699569507932273390957709485203769074795518256193082813003620214517937186940838891307589654596148113437439800032011900259552704953740564811359302824680956419953547328489804108496753428664440011831047756560234233914997992802571142268749700658175687024194883278896532762021187344024995859148249364748034367466135270565734157986098284739358796944583500030591448683993146262193688199711235570479353425118411876983647468459336540638447267745123814598011523363123924709170288662228277676557055064057716425408290208448104644518445751005338888060956553249343606459318486579625194251427021751114140254367275633548000614230588464824447383152546082936363400914906910771379259295735215665564452861215385781406548267008243371764777325580220912965806250270656685059344173066644289308089520399296762553181158669487377332920565532240535903334170668732438401831703700178216887976468710221364910768401788111404605697362628836892383198041215754721443050791100
0409494544506938619432275414478439064152462285377461223295418752397837436482567742872764397512131024342672507526733360260619700643186477463782694275609954903143256542952944244778121152941289179788480630575079737246115747738710731162393425436847859590748398447899233172200885163210339069282573128507741201746652410914892598843232556714867016096598036327204404859186977944018852154292950479601707726551489067324830725948985200010822771865994042549528143137537234897029439040042099258593057347700830782468002060943008703943539233162564161925283351163593564000534389587666012967529689803053042601268511160410637186606459825374862793733909559137035783365120986108633756185235286103911854615676281592264788454915332644527001118582184317205780738425507296610451103953245609660526224451952038193836909795487838919754293279246980412412277469667514578815693400872697826159671033387900060491350863625690886949607407803017489536456543547449575452205017872347883973885053031375178228655676446542688676430489905
3368951635898763709640537615522345963133186617626454363343224980361807311138077662133529204191091815666622469887451705503463696957362770665951842062789275402721756898606043398750013175716321080331433405102854767599863476102096036467304910664765183275029159640097387734373907131068976580490799210259103970863526006301404738619700593259408821987085983018037930632409412266490480557396024757103286476793713437269143999339272941127484150160485783104323146126558006784436679617817189677496568128978476578029671692994151315540724941207956228703599238568916050716169810398583329598553691886259935506816633995700123560322907953841643562017311281725305835440554465715884614960579959800513622650476099497821344223779929552891146414100006679083247975150592714308569420764404041068835115304271573813370995886821509412403636978058072803918161587782387622890708183676051920521039088301596420962976152699802558596712502006107302493441373901512070310352505582740358250021957936105493819919584318523871633772577995
5868181452341655799707206003438310757355827604057247184357683062138919386081369760241829365338650678221207633739990320930721447010031723576141280571085098835924831859816546260424738587398175169434671872845741793232481861238091620415853979257880688825680512667651843545707684965515185693635794866478402009549622296418543032397636145003860241183103314398178213968899960380669789595106482413196009315948086834392405734382643885501047611976743934836241023772508312092047186988901395910351761605153764081814892473875435408915845711516553707804642553684881477286145592830125977646256336562572059381180554143346002799166847724573438083449097918994681937536426511419390753084349607949957060640764554681645198938012345028361188937694741197108300696717185433148358240911630086474103295893115242225590722927278237006336618545578556146314071443402061689232157130839768856176556821859009466338892047469749575411582767690930146189657986769510002869994048274673109786158151186701259030191890484842347348204466912
6212681353219369262557674792141559042307781925390412160830618045086937241164165649447650723634354457142234648420469253813076126735987958558693703224345904768090230475931054961533525465895971268945384947233816059121648653851353453912800961632935932861729834819069634919635535224730153324057833673435077653698129140436860433080504229548612604634726787499023145026639040302604734451197951750210597736330455651622023033797538538538388047038717462186292552700783681032951322029660431854988718647042310141247996594683975241674287271866496256088758252070549970212193934302912289510530303203831345332617060689084866476564117717848075568001674095145292184997435515321066836286842449524618961120843546331558247350173766825349931296560241611815167064564222077109455628613665751622910083205972562374990491989440135610674632037756035201220531489214743233527679896283445539353795937582940464566820043656823348330117257561617021315014049449950739422399371130289848322210348793026445266609167020369472192152933194
6039817111487334685826221326852247073449616860500845951826693717758635497035958580158230293620599237044019087718297191571803365034301167165486337546896800818175050167003337555937637976890122928445793790200291273758630198848776890321846156505462702737549784195006078312256845087760903760133151457200957741981453516214034293529517332856554423814831330624624488708772072372182779529793791827572477884520295086965704885033225642966555472912931593964985878122470488108554220759071025190748304821199746466324546844665117851008722545778249238926462197152834080232290438377229033878251856199041214500176334239628067340539839348856949362450306292118968092962291788703591025879847888327644761321238602849933195532543333778392851415650164927222522215006636853985000372885436844867680393252724340738019634634309421310453792021046914314369982162585796377036368654110081269210821513890680011673450186837530200066359379179555303469051623346850251676186795041771880907909429462132855368941462209218868768949079494
7367518461028859814201750461724265410493512170502970337435304521088701716406179403791016287095911825874582305926539712564906083658471280480521866999621206399259851558231027076218837892131055321901128483843678615728836393152925020666799818129715802768507173514386492993683861891616145351137730479944167429889060647346330537466335067645074835934872593788506240344372350912409460115495348832067175227807339362146765097184711707692225047751178429867365886150072161206457580760899889560785164429545339145645453121527108528092493619236334800648755779853438497844397101742051431041301134125791007410155749642565004554632856952275190912727447472385414827704520111575897469935286689870598340280857730649866932514347342440161477881908004790324686215432667051665690813805062088670170319698297087286236600488587134826312541081496335726994286313447520277560144446930539564393062430166873770835531137518015625332209613744445604393356685903638293996725743003960325836872379904738908383903786070958089720887186962
7268202249353732838171824296209296294548516742651643397676384749036910080620422686703669742292285224805146963851250167147621958192005244523117780154638357434245675935026566469741372627933840058563022743977770039792941923366831648672050001010333404021614070168174891577961210547481087335204029860430074623406526352168871545292621654379079768226371019632197882405089965244441091504957041079111109676293226058631082853605089096750145815866278653725337363601678627338076852854131594110446067843045748196020864098897960603689048909134722146224159214858620044517227409018605296559371894118327828546734398364921268494096918767605212134173850356612880499233235875192216561439048754061975401146302507573162756351518836491904543648427377290672401377607941743202014178133247052968916763308898658059366804112593142747772802872872304011241156942330917342016664825114824131243881038959568825225716955297062560791044525662833617673328465929407476131817005115131011425346567647872751463087723497711057993035067620
5316944840637992180045956371211507172171832998967855628050159870837261310989385416653526787297938266915428867122544542307356958072369388913828734743098211087918079028517244977877286943014694912903615397357357340281698617415143435514971268315006709107081559308121319108873855893583554225552853752525437738214150622387696150361071169163461308949261043133801543230936418101449940840883345954594749785692752008507150281298237884228261827765501898889941890285716716142277630003205979709173302154866378254618529500122156770757284166693898173880700424833284753165376168648921731287815291142317714573792627067182582344625423740227494065224826933186239153133615055821385904759148039135845579018357275669961015048512694282523887490697416037209819689039537661842683349382761960041329624913896925481546410630311270463899229014116608341279393637742031207391333596187781896710811899186135781436355403544730496027937424487793033640719525003944693137562062529124808874199923309600138023819902104106314840729029023
7599845973502257343428655048885440422549941043744089976554867535395602713175364766024471919007112118004623506538125809386432925530039106172251879846572068161794850613278589161469632390416869725541818541484032082694273818221104914899186556146055247525772851437600462673985895811278321882258193865999525800836639067402441755969205112811901975524851882633561600443396282870158347516806496828718864621424543611613574270097424119295270590135717333536607242738295364979877531016954561375092103535410723785080677317042986830597742153470514223978939981735848939852848962167110099578547614259036164216760141929463934053507352400318902156789206452915471961178038479496510287718563419041767855497247669759241794510076295823479514563418384119857560503669336189091406663868893380478312200320614085151784535128443790125425951796399213204744089933857646127292144711737115274565646402662831028888536896009809639548375864617266716045270265276372854441501974283397142582335029784987889108154937627432475432037747092
7375294403461571445568047178227228649780287407629716070804833784829531827100866306285704108381700908714688679792170091907185890482755056663783653285850369390801734159537296613413088952244635065103645191579854038158054805810126516527000246940559539553778892449771733156126807409645105473768008808972072008217506082220527464421397385482291529628610427697726036406268830099560882593282337035370709287350673933627663463610202838804830135576202990273111350225601975962441083015431105048646343759044877770708388334099167417362280821803262543471360466340830978889317353377750218329560019091914123445543397162385202752767669258874323919091915867230744011350323401943498133873125741935300069150865471338673218318699682037848842960704204726712036770403135645242073535305594100787208225387595470760974598941367205963787787451921872637551209837515546984033501137650105919525019782774083428947486562538308599107816386191438690298067432065274285152619455640208329873154326556265218124953422102104061164759739406
0200077714474496335066910535665675547942901372135515028410228033740668291912558044619263373822919710716576197401526381878360689870440783116556930901368905818479728114442277855685986974902137443895325398490620857934343641405693849911422622520023416337879830420858158620092849300921199565330000129420399319184248744360523098096120760454383525079193013159313708840269855454056143147117429908664073832889638916891919877200906612375841474666643482587346060934195451939079238730570961866000800878297908134177210751802972384534735071026563907049030224635073898182440228066667559051800378663591026380896311824622708627687873873685707342242867719869345578436676796719999777893685033516795623376574100155163701710008885374446675061613770383742755762862192522222882500589863086565593221116515609791527769889918232436935909875726296159038381373580719958456708672278767523359313594173360326904357197770740260997604296514232606111685952397022893459581946869777655467870125168333880245563293061610908788112541918
12807181148398358492263376089635636576122404761772834195976106082533669359788834602183992961701195820952116398799174622232396129037427479764558336883762314935238157985291895843414254671829878324339001987738619891291427323314592666630164935825946743743891716827463547008617450634928010342360487247773526521316117380620849244670899334798193689224088577441539145108966591940250014425667966508636518668132105272814102989073304527222247595005692471942155566669672508265839552263578063972763273633393197633385588002045734487191760501135491526337629695993173298383444778411111350828500653946760200905423307420627645624295420909895627482832393225261330169329637488004609091139880602114081817083587800642684902092333638498363749375561841720781868464322821196677454133629871922182954402660834327698585486213839832288uwb;
> +constexpr unsigned _BitInt(65472) g = f >> 131;
> +static_assert (c == 573771709890129755232352987756281630967862993290529251737915142267391269982991324871875402753323833456332024430265722832441950037301865462339310405762549818636913661982416467385824438369381189291578342658390501494481125919831027092092993795150401798694310434772396684527385065394906763899532776908774636300528739291467231730847707562015069885657592655033856835954228229153814358339979545841338047976937153765113935464289284680531445146938050255519212100930990956321796015190253510072396448063715373476647908779942323020652083648779194396675711523855006605028065826309193206113057658721007469314443152481847662343592382223817404476366934616613220195866560522685408000141189909505834959033800680207860029282403268984316938699959967183984247339798324524757830246565592685094044242898619864446277821174388483274464648005297299647297180972961941358851447618959367943046018100625736060922697641336961544083396197529398376014104287020876136190707043486811940154860081163109225953478
1297416506234255711721216997580317129793984125086792398314926854320999952246539537612948979892502074201832934123792618687466581445360017058143530667479259435025461088759833294219474149588233153886236981345816740058025317372318952935026399446974423965297420859540978371583357282079771260300201971617930713827606018170167417742873604942914979766400461107995601729519625295789084412712886767707504965043039631879839755142906098875830968325376797875391109961543497016670887043663850159417180406826992366196983375553673912359377605845613054050482109683747115042139104538904992572662497662079942465307294011920083330256243800753744740473438613152103462857878734891946926881367109276774822278759871720401490289119831128865988645303876266902112379178274528499569524347002151608802470200498092487463348215882576058462323858637605167896174255057996443622675054426041710724210979155651772329959671071414870373731094918073896661794802169848211687486438521041974033938894137655472971190652135404808340695819235
8775355325345507072554884236740160471200259192566137094372853322221762223094632248220548185456945141125865077645827772322028652990486811164897145703431533429290615187818334391383828077139094311820133411825864375296948673419508392908735309533794376305482404486262153845151304245674729526505850830277816734660459648523460411806223632018060140822898787537826638236736751423736216559819748923681398783598859809563130523214652005683927088749355217131149051663499588885886330919134346890307879961324344245434284594400898921111984879378661668306107937578725335792263176557153878942501439033799035563039116379919159618164339126594670691646729276045965557011176383422843664479955728477223045422048303147106364799579008832203805312334786141336502003121104130271974959332146376010884841925918029468341023983319772851851664342534284512591451020982074054897782588530597448807380584790251174403400238997787446351083672030851327022087535958506159285135629734186095662860675037323703747160879949801105821048487074
6211822570595863981353081264095847945583772561243862378304673238373435033624736803815789997075267759210933890381874904844973121795344398890421368821923108073945425704235039869702400387915393144595880216616489335103511722606779157958754978507810499848915928134539811945961149784803724214701186525151140504115131146491873929273909752792222434090446363969126083034174950520354002250755537819463290450949850719413264899960169168233252162890453544473541440505365090838417857108907210464788533090211670993751880181642398016963296330791334232874686178520158484031943839562882700655636433158664205988075025053313577304616713307152634350348245035585394755246880198968054448362628185640733559933227345759005247312730000401504253013791275110076604119960400794424585943024959324675557445910179382185169958852281309630206663747603789081938035613313174535626913633613546116680536077440811829020700396271018801076406596960809495026587250311973483714756025786438011277067091343670128751951316392349387557996176917
6659715734900930225664831587694253349411596232353864945902032959800086248704439533715543113101355869584655410588417641747134706529377715259457539643357682111066160815763390189058057588475156721398377153855434721544933791290286161510204069552334609424189266848353297269194673280667731597938435030145496713905308932884339571017536342340468852979295867260287162566947351248302357445617072653126026094610362233717495867871185022945926553711692143249108093570189855291325522391113518072806917187289106242930378328702600901631571694463391937892882572388316568254442861504277953492292550264917779921358115852156815850244639757448910008487904149711091332329168091123481064419035479466817216537895350581311631887445193558814507863298003135372850797982556566592031527650183561875388349657425238652855055575284302749544120571040530463861115955825978571807126083746313791384259700577677973355792395975378200779752921351112446932039452864839707707145347638218933045681494726244323828369381827813874213057484601
9552822985604546612483744887207912067845279067463815407828656789627494881030985107694337930545926547433509012296426510716888770579076820149279306121299381655054952027022977335524127091352403292373008785990716311488261080490309254583535811987673294043461070581913091893080936636115904845041902191703523201071787259612447592676792505759677966780452587431984189514319347175891229710097096365686473870394668607558038051588936187179612143798475705278075384349930191177322696048657400014763260912331412279202722110386136894083215493922629076606190648325566402723954664692455059976157716620580788754045939267603789964810044706415968757569230510841226863188335626223259706356490036456648924181052223770415859279916782365738594735517943035253936284458160249089252540393577186711907727259164271416839138540376190055656600064257272234066886224049144273431330413829645578960245276381213558329997342418781219387097787222357594015898718426781092557058092859739532385394368000749767108956540818781858459815407818
6955729014247721180235226783713530954219762414186910280002042653106013817618392808872520698189797647585042208311065010281855218297013637541962393608828905942027759415779750892615869553599772898732788234332935416100423503560671222160963866166519544951435853577089323994845135984578038008087498267288243636150017565040103365558953328043639204768065917662784316790536683886276039638854142894394584640702067224582052581669508029640728143032677778767401325069589680872334091713005267785177339040032893714348999759817368409979068161157419028514301817867133261815752719554166800982936965405740462674370395121517858732756687615438502316121849778946949352463028153537076266376798874076549050902740433635099179679710555082773582282552617200320370217247843807128232840386431124187640600835358748506557530022341601569237842884593073368642864698078632090686556015118185381601137778080670184848903682847429276770477990374763455201375401926326691687406084567307411771788779104214135500842702209528171911040389296
2504270062110104234801803559239581408398060733392322406321401770619556526911347081911871038961443966226511626702483830593224215301258566612885275610642893573473934389909010237150835731577843081808228161249781105108191460044855997282718921236634856227652109686374856452260152283646748909620410703194316884709375614643273325431051087705898157548447831247578967850046569368095757123059920037981179489900040852245320894319463753327487783862003244408405466612279153822879850812227410534456091842166090943196621306566339190351042057152827628751393642759014912315365945324766888038425258086068552270892977239119087861356974710561626755772265797087199959842356717478506548369094299965020057790828213613138820901435545787707986294531945230711986829043338644795520445300396621530537684506245786255913971864650684128918476108117037960847144499810085801332506304841487381436332403400780694071528469036613310429853870540141355737197865078267033805134027953028079869103987825708654159541217125801586945311420999
8969123972862084269553172667362635960143002024592703543374501375512557282260274028696504420109848710726436876464883065705050998810792120677293673583998993466899168700267969980764897320695075843573224646757856180890382606532742035206458623542872260827143221389848642948556565071800150434517846872802324425127417431258428308071963629234948095760674934589629845719662968285652513693448668835853248319759608740716614581476514221999640547376483602031471307813774135163763491173434014650976791905327267186992022483428738586855935367723720074384474949712341321238520301025597375659385656017148986957121657129834110025621044271357895265671534892080199098542882169009910595958948436713380345352476106696395360258169682211637750121156349580825248660061244110679902128745055300138269575958449002147545083559956031766052888223796335450194196798699171795633203904189952604630734021921921228481130132654726544095150977821187685183379064045353585395430267018036660734909163408245192359244775200076206192083612085
4698315779418618846604583502839923770914112310553975427463742597320420178612225053141119404003028607246427545765382414567227570208306344257781122516174049930840884170477478160954150086034404032656584232269734867391844258966210681363291860805329066085142341667603001993093647428880156212117103610497005808457834324356496141546091501549655164571704747102838421596654981240607040634642433943637480285114841811855660219306046084420790985828031264463256554400823820711784554251170739588301802901071397916658691286162633547372732323744014492572081378483131918684046868932854986736665891183991294311829168687182955676086442917125035386738353655694039605480715511127123747240243005795507889613232529577559073226029253521732238418197863882587245086324931331805264620594086593581844464246753203799813999621271708817096310551977006034505308727230737543896146359163912432260511419222532233414352621395665126058791495854903012185362184924343098041155341831830830185035897447993823181054561371812471332859228649
6612722528525841293218105525110355238008306584829516052466676510595403793856015351254604057200465502398125373126734863289214002213321153370556410488375846787444997901573937558919251342456417532579657744479788073074811892471828621536395383424782588384359548395638284013913974824581267716602815478671504890944219409021073572929151004256081685303896104282472528056515051552960096888776427450528217196566641474557803224700904875717510681583672591839330215271834561956917190714636224747052005596872576085873322330763909816370909676939864071261852724205317993244195610493205408170389129839010714020740972404210631211496997708548703766479220360319509208644828170922340067666828361050469860863644039660602618969749970815216535043958955176645503080175740290623769724595984984071523166879176850063530131303642275766773828144219963022134604149290512586315555781757311444605628687033061828306198046356311905567192789897186579574409768390707999806988853581876206226809274439862204217545422595700443521281453254
3616097338938440636633760068444824154299043305340019556109318202522362701812949888780299273388613136975822732556342715808161476596121870401470789675277766242452731042279597726209189388638578732487045756906229414074535488399358987687950637914538413579269681144908454883498414796024816282527308557576791227134605302838338307096182103410790870363530944179054254517330982268764929562387176562572373243832876072729602677151703023053348694653148509610201047071522702697862029532402007702587104968360278736656675538015138000711226530185640098499149143684089184943616800337677747604790252218278882721763582376598723368183425562453278578339141336589135811587376152040402853615753844089939155790961519831882099532989537993927199933822033592774496226679696190989726222733191782650231166839942077425437951502569511184735236266191787748436290237035160351734983084840658965538422978102631057875165913971869963222524448095761054981357243107880300789567816565621063245987538673626476198682322043087378393011275471
8333310321760417836457961226795151813841242212563829174938173529482978832008794903611073750629457551650127929849918972167843342865830329301277279509775005575397643971696345937368116240334371651878269158007338635300251101641378358371438581190262531285281312726066892126048918311742097477532649671000793324650410723689502049862567000962446528766830433115709824663867389663124077032277634747145311653887112775365181978327492205993319615158969002934314223698358472874347728812299846257327328097895793955081159837184216829524140358892133061340890782014881062347452340576140384469482358551888769950414430558433579340505912931127531298092706914644713122310249170674661822234929305375473729163409190827707933027169530866645152816443944764305759357491217831203128628848894592420987912651839063370988739880285965727961370630720816207220955168130436388496711826294617436068663729890700698523462059956888052204550041163970681063306784164242111651715182592290569153749270455697239194483836684910149965746326025
7425246766420552147136561396708142705937447608901845940403730236887102808591606175901042389274679628521196609271000813481965558245713843902366644494489153072356001155708554156541182797260905922911112739722642762911669842198389739139859621983298715636873878259443789302394104270142464441408670855623888874664503383572562998826877304894326554734137148103299313714380555481449630747040589587630205856023088348243077664546511925564880914470894863641253834227733527575157275137244689479222842160465716666977390326999329550797849364750579228099749978924641986408699016763034703770877722461373125411934505226838918817150703395329642821229362496577879094835036001642197339404445241239922426682489802415853614845743421336624273395779607972362397702298560828654805412964431378569379055793437428735323332844982660831305120537601424192694882129913673432390158964442862948392940422188151085317054083395750132907598126587014538478042669676045033629839902494468412395430418669435013924251257521405557353321907862
5595654506575681699072565203146347216173447335173123370755736026192689837437929370388699416297158649912413517250011432242968265199820201285954144825232821959165666107896169208671492458377776249215787552509646575344647307422465423326429392152423004052360721153457253592949492403097525629910898420163145166185911562561752960199555784048725709249291792810374859562786645742272989972525467622834487038796465828018426717594897076745074463811550754089804843219188185754124341879969296851829036079963082578199796004955232539652960074116179854894856313316073228971848360244723519616575592369250758341622753179190894764703211325914576710306847315159357359272977607375726641672685040994533986221234325996425307431022601884076697597718771994081708400850415985438885670427617951757236278628683577635266112681530724520278096375923533828352912752994717601742038214560209829690103601941545691441836366234036458040814909716174697885680044935700868734581083573849480267460985666775249982111539085280548230383912709
8292690120734301702761981722592225496131195552441440653387218933082604995616914372547444962584632368882651882773093797736824176035876550810019841920256960413970883308480891856141829550636997412183089923951716982203730165114831434439141576900630919271558041327500525682199789015652297636406129327199918421630696365282636428242128508055268137797971731346802153921149087382216209312750337619185158752924109172423971167533498252236910844663037397807852105853382997698946916209878321067714048243718014927978703910496713037493230504535069474916264854197378168930109711824124734092070007758126389140706325974719942098631373548798527696428287003787523735765304814519442374952111622011215508603954315795850964797785531460637470146377335261975084930572447772657624280566760200775935794065379095316046526224042678283939752460267624955243635750729045775107600497002320521104801629865168413272688239201547847021126756740330490999989070770969073164026748656998066098439617589013718504879809988490922104393905971
6354963121176888855526921545262033539025524968661582970729383976846542530378865079231760158425685475005753179219311033459250223760542852757511075563454330360057452833685991010620740163804438681686338248424180625410589204799964923682658174798569815117096563941812084385946888371090957986478116965979538506288883511305999737407093305125443283514465145273046069044633840988096610945703907289646719751460353189466623691652206333988421660767442282054706187880189064440740500529722991330290790598914266896239933047790579178884099385933918944884270209182143529016194384699083880946555780227224536168437680470573099819622742225599849753106318604633938888508031534492454885252215630981749524638218209117018281339720717764823875000328145402070630598663184408285238215290786927656794528737701140783124829271931483693365794872037072557646339747791033078621018611054284690905957083771635733419688999258049193438640364617778711412599107657521559407175484451225530067201700639852049376329639131254617846593431769
4364203456231175279118241601817994306053825851788275404207507029742940394885299706629314787178170012288301675221361088585540013652866459345122648052430544454738922623717360205960207988353514027996049637943629561010850822232857411334356832633050261519929532029564320421258733019611313914563382448992228140724182383681244953648342664319660717610251899615717264870779936476907176205505283987266119295438992422272879445907906015678883364811903413095647831590128094339976754886945541457700620475959336707369611589241476492461640768459267381852344960429303161699202710553466641045206393484743062461243195396164578651399435046500761075777202760982601136433411690243839582809040626594691027600401165936716934892278404446694606493857993204606232018944224554798158200523410564443488141766793172758844260998734710961833531918359661619396461926332529677237590199176808231815967876906077143858813392535013059603823260109176996696506116178766611761855554961376636946668660167448652954408060562070235178943688385
1790293264346262939559908179539194869515442589978322849117558122487491364939398377074322359355291177880852553961326348244961091621080800605803905412482299027715127210782215921230559301080044271380942865683603305633182180843086629914811096283864678558312154778651637768719975193281517090134157806189187714789189198549141542961944681522736660774237430615449505963109044484030074255488971090372774809721636708356725395384499986893123737586693157742645098831246269809670356550291313986137923054795611240358191176912037423691194655897822345098631258310555636068287149188927810854471222039186678194464142763808552052137171197610377418672968691242683204527489901077144273414426763619253786424183013497225554820233012438490038422228384452815213220576054878043190417464476989201519545560621163051843131707097901886747247273029977591728007119206993608020638865691742408298042999995232067609581412938773845694050155592034739944676219378298632157698606552626031331913653343646260959432324089925907391921822460
79010986217319903015010301534889217980664788324403254938505200168831699124840149090307724792109135193581334978980453959144421948517385726523748989575197758434898688542906068559717985212861609354436320557470737689343713752675030695577044546143840004678208388540426881739449913507701753208395772678143431446763872789610598910353393327933983049729956012931601687494173098494285210682640867822541915736893597305275198025701325854826155860156845842261912029699309965219373327871140745396567573273856307816111226977214979759176835322753978160811867041793816448967839795503872543666156544717824660368965764738108535644744259013242678154849116803726409914591785248541248970129110386875628233500985207949423219262838418057121695256044990188524077420479497943082095944724774879374625875467782415157uwb);
> +static_assert (e == 925821277647525484046314922262107411363265829400086205841317837788590377458538832566422535905580167055590540520461562173337209853598393531996558937192259755324623564271420749979078242394847832050156888254166767598483964763747510305591639126359672129914819075958398814517972379442953401990418883055801170251042496643399669365177755686881047601033431572385651795547449177291014110752382040436633930697717204558672793488960576787279098167954168025286326942734793133599414999250387371144720519062421938191111560420345811716245740999562260508137164683070430054264232500900945124521840380108902479297191511879673473738073802259631070519104481024176621009769537482862622220299889768219359329111297124699668221641917569303817732214542510786504181161038291046117604515970514526672811868669367519925509210900316168776589245861481601369507782419794370395588009090398256162605663472407280850635481339056935947008829932423384655897146952098325216158501187401583720533840865622926971298423
9800978717198536661851979084891545722381494339414059411643398636299624569266888870749758889251713720748220609894580028560377313354881117401348264474123423159230721770488159177307200585709266697394205640403956116569443475957836609197407530530959491141635917264630687456719145356915073352091616515007627772890198704118900293852835422079505721570597155275204775772889032290771342252040316213057658070241354591285915648798067099895560441447244194098643778257371565648358684527147081949134131307704770861407706021735507492884834879414763583749432262404257930295739288167630613255854043520310966335184206970138322099799889373726456244951670878380069563643987116379316867408869420836583206560844606679200685056696457782672769112007824347612298621888103761145941262486435001764912871752489251852644953370159897558765532776636284392480388232256025768606382592239579598510659501227638850668875007272812063834873627908696089897032251984879069441565859886910541726269002766494872534486112431721739659809417559
3346862376296065282866151242550672680443150894400822064729473602375473322205367436099366415680983038985237602396090424433343358892333458474158138928481760040321531926215663385986085018867928055227536269922408321950552571012753237424916381382435098770573087995135526462535334436953003730075116627414047133436663075471264777942015558568555661788174373838554017697789814000721798880031517648768408711616966341701329137080083189909685953194520419071671750257302535005861778763548093308967030628459758581873485608878512189945106697098610620106986367201171251563244086321071387269275533803510390603780790704820300285823847786096064449264356397765452083719197952433772311925960840442164309704964276216429460072318176806369642639016702229840123220536959643587299995284422694099534456411663054737185630848492798008914778078314294450335347623400434580340296543609232017550024482116589725211711061096949288065482900478989557845157569268170472578975982191719060877930417235143407688269511668465198454038189210
1832817443304972678790622161153031424131962661319047280118731622895398562931270490268724879492475624986166695709225686881866197787756098330394876207857808917156059890517791497692592084725900225707789400920109586813314313859749022393670949449440053474960231732358062704688307739072616923416724042175976602907009843069284397933767612588511924496143157162925438784118979955697204347276653750979525739483874670669758573414142808243691479623929222974232866338808714580720619054812299696431442314820449670893215407292350016337713376699327031849963391229409806166154760509553415749785479654053067398328168020591208777537261560091226352467020712077514638290424834182192144095075007314808554065801151996865097848823621532965411348509400301385467549943306482837716125484654016268824276633890383140399157026813143195233954156740378621479762034345150366471462896094471724972132934259234371415619656132888252595107277891368873437781551821825058533495432015354958571532246066759818861276604704762519082544501137
1449919344518939931797336007940097789188737302729244873777412380519964307669681278308126300332093543717279450385098099563936764836699798057756892752819821799249653399498793182604845045318394301662223943988129155040915720953060038035952052274005185789023954520689245140635235222920689972016882616934115440590543567061217600323360980618944118926590210950892024619667208529995956708505655250062634195810384376045031266291356627497156543082498519657053031022251031876602185390560823739227414951926670634950552614275743385336408739698733504292845635367674119095052092742554611028283136639357174062102587864335841971346209103892478749059211146138875798699405428670672232691332504204241054159461769056564581772710176791291607519892390901989410316749441975206778104167769323979505991334913163492873415735525406922933899405642643765493116791360313436921953477386666173531853361344227119209208443993077193149781364659760484102590581649697784392416744313160673954947581488404808866921123541171010327851281939
3772374577306515810186714691961218081940677539684412933514944051448119773882299596822856084880771723658694364682430516681826729498044421828564493357350276038185761932830868378186121975624892374379509252730880637268167627614440414890776955841864766000248341396935790978292106882999125028012008120102681414629995112712761007231189601162019930245041100666807536522290675640765467488681854244155283012223359570689869987272978699539857827043100945736879978541279063131621671500548527337108299847992639705740158657203804530663341705448975053844028689068972273936680016272063159124761486360864222449315362657620516886312217357972170053612671501403151172606056724375752586848247661712604379862394005606939610065387461719567469960779149870944595493929419983125885998227162438165213022497079031374863701334591529497953079586815226216091412948651696423104467027583659422881675550394020416374030596970725329207447581467605824956192943313433366005728730110160123182031607316861863690819072617705017524781811057
8055560560688796401505655932023842697754241774588374583062963381557220895250630953485229368124338847090290027391396907435275428961083688904437823309592552190497059386493018787504765076429185299708053155148710304044373870518043787954080584404302939574749896866935415049254281838639079551782780564219871198249887864355538762502718959259919546646112503328969319950600561471441299743783716668847772659164854260774150186393424240478270287902343520007666607468800826373719707066137011314687880480610962685179005544933533910568379444719823665964430839780728790312908721450954900306036821156888483515412321692126129142199751034562341661408706136051387196710769170808727480986201380603544687267022728636986681325110117972770888046653074394859695327060350191949845163075852867006026516825334372326375162712041928605870230764353151341123717849521021678793350888734580777604926875801033048153758377411158827346523524411768729956869595658251889098064558649587248601158119029099816578206772717002437661779578738
2405207354446290451377109531856512120292112463653859216149916690308703194462802565297881994525278664247980877289410436589562527056956030534824137594627006937003961988561911089052263302604879676560488169595932974970536654808661238908880844425369371168673518762684980707836309799260352441630403767398789703002248891810490424060271621957766927314620005459132081810791808671359183246756940558530464893359383906470155909922125645863302387203249433352399472877026853014708544276822256687150328902327160143502437887517684477944348046394974935070736218265719267613268084596925902424104073179573157482102504989169865810509104015838904286355585331195466452496394933524122761055019228546055022241277616587272879537426060769811566119230748147567993174995097452482841244889465399417445728346946496277409462086442822504900641950743072928696566836576017970571777212393791242632702902446667799805586902558637598144221288847347904636582102453521875773104203840402909977317325429979226038431296021523066712906276912
6572586510861551045643087194223963819520926142651350036609827246190734322120796371115352809398285364889609657579818626866518931089662381751084634553308053314021952898170559319234072121203958295845139401002435799961592528526336511135075215266847111193130858856954412561745225118106144887862001689208429064822832730204366365671135747890097383947634456206325113514212696601607554626355316238072093345820702172731029141884027683944694325322326238468495968951267760266373207993832240851825395157383535130961617924468716602597213191270713949512839195307703198094787416860411968318466447229266984838179571600908387127755661230617092019648839480540861033987540601960111329484324262064163122705039675485564590819667790427955685431439236501207069539760723386973373255535467378660840487211200646123765913593967927510378114966350993694683999572297163221892013665464880379997214041797332158060486307242139134057580639788987462978037907404807065877984946295674862638204278223713398798933296069394710734732207055
3240815226240781284897941649906726782225942376770704312812547551858324243572433971646340877222604560978234285974381350714487510375554698400191780868985387925205337522055254786165264786273261600448085096706878053834421193793435604071890849941164391597386395848010481495153892474310184632151139545541072880969618376592937999859928026160306470287401211063637917126265042524945623705790523166204475630950333591915029238611968191762728143401485588876210805814128969245566633882719865122176245924463431951715842086750236450006840051564804190408841791940222692500559490965372477515688268253907405496642061472907342914619010121657212579181361467764234637924865485254654467943228472410972274349854112832298416317954400352112014820699718681808295773157325470660796230565624096088825387707637204654499888032220345920989819199754462019497516156333728274845778054436974267467207501484818327497996634691908114728824070307789831590463706387785702300364749922544296903520329009609348748598472207871485112473007786
0113866004195492326520840466900768372534419705892256664304637725563592495020849805913769944366517411099356031088120458588362570611114891086943864356436555035705953633181331909753144356247630941135766693792998799790478772982400409793912023919648666772283388601021820049629564241689148343643448064042493864007125347630318299327439603056927614460722797643972347505401494294034397495758488308486578122227911179826641556199639986830728509129143223957663347796577281847103269237061115588810798668075324480670574063873792532299712489722291128392510518344248140528037137051444259187501459363767703349899697659415220515623195275920376039440081963417417717778488991631267449304129904449706292874731640386186482075268023558439850093833132649001488848904374515558311188652372996503138001034036742470369985906582322130466590669452469819944230692673937517321738627530070869216673587279969691282142607985444572656868291966915387974030133703987798331235323082398885303522634323845465046596793507886196175629750983
1103320299216020832182326359504692959437248463316776468437106347859238998901999326228977035412395462248791498337109548987978730050626997383637026292399480908149185197914823321046428772354730826828954595610002535372728134330688517098264927510857457373188309931227540289935527801056111588995128455258421060217219224023566896793714401085615690428852597320696593700120768625456132177368660767702401576556999586854668137048161060661230533664396129574824132784959935267619838652722837235346425546716358938214215436971172539141515015173742707709093850339103648137083524861503603543523980552552493962451358682477999084340358422302603654916487199449827958507698329926735026647142378144521381765182247826115025587477511460558513355570851403149958948326080116473806468817994933138766787288245393199745610421051923809496906909434737737438941354124219971483585708920368445946249487077961454549495149068594650354516777542861203174934696865123713976371703108636300162640749809479104110676343255128082988233580947
2709855142568511616100186294425399353967187772580310395684195656686846115845499108406502700569267254295406499817588703876956335949148148960788415278113818141194000719299627010161982704907375531833943096522360889958075510189999882556652751533256426724908005844306820566942462454815614379651882905999952611712068181277375771031068600151105053225733715057841114673643294161325414723447247896413844761392712900873991500727727988233012755468137985487045848323147699725209424244123873303345760534627485114513265503137177270494363511154154010126502031675154781468525410425582343562369254805002623756722552094430638213066101557324249884101582258371550962841630889022903012629467213985495629174612197041783095535483671731125269178980318929998149748008732059177416300672714752080719604134060781771051728726498516455316263934982877808288029831289158518619994126749438610499036246939468147866808815583628635866352666003012691226678944025246264467520199665240846297381415679648946836733478583637226664975883109
2202595630056581347691282448638195044846959876093631817405910579265078767792237742284268877335346001676834132757331711712700196032790948686156225751504221517037900287058699766841743741208405640802484315387760517208524587829947927859363349786698053347588248847593788998609616951450443027464447516429301858731733293053821320621494063790955331484439993674921063926312213917524743926963108050422269343454516153168279447811583232604838777280107721823644556182544302621057336580046297031644282870599547529436777552306833857924222723083829605681484426485218127269169084739556196930361015918383751452857692304729794040874267415473816415310131245229360593138749523391435809936108327893964776514270966899298440657932230095421131677504623164618554781903288345202478675629816975389052743478031513033823268376679265497840192282444597072280422002464355572372968954551313402488380655797920097223047665825546296055815785566815735907487536366126795995401713305556611875238197440872810371591035955125537354107777646
0545647794985550796573299373495993267573710711432466494594378242324697658440038384733924816464711078189813098696386674191426305632789037372659022010194640133736986595690941258310124713099298663445629577404577036569949156849870008764432580071847635484241187799108210711092190726551543405544548382854689507860755600759771542267913637903895555743255286237282636082802722246023225888543333857341673618391568547970130370416909047667329283780826880861829057219290316920487912904060170980919274424358441224649571237555408781537276287703475601951602645118723177197102037231303514580749829513705207709787576034657030377652502799016768790641263943737432938272232657199123165843838819455337206302933406333004080817869806978148265093031910711242500234699430096220867864841433618866867400881277550440802881060923599553190153009941705993012687298169833021868303616502198804786872224497060880184485795384149420722171121414987528507525827137792168866121141964650914463841993000198490275404418907633056277734855749
4732075689780507188202817812141664869508007135966483915775937944747297094500891628667526280126080333998404053740784126418138539396675750752315216878030933195589338833030254735958022623267030648066711592266070181453059500443564036283847411309644435370856412705956023552243720250796266568065803243388752146081981140573461356567703830118679807945577667574016387858372340609953359965086606647146493876713596821337835204436170776131677949232013227414096628304205354026063813469761303258719571993966225488958555093510427679791988971742172779979160922404736762880638975534962742894170841469656176520040761328916017189723598495076611011733196408040688628395455067286145659096950255539579524498493898542819120837012716973317963326487849849715816371147080347801323811060493129264074757544079929354744987108772532724901250431897896897092387811630627162295682938692000390799380186457408883817104297882448016632464850925981359863538329736159272918094180915299281795598292795892856092097063188703480460632536098
2801135403107864238170887727205050276881140384008280834354196529586186702079606507770624613552749105594170309616716435291565489248365025504774726943706679159544133293388246302007763336648125704090938066714709854651532080179463141589007818025673076691918787514845417481746636218042043807028021792519610195091693000524860027880636146132030941510935880313014653792920635561056039364945983727219621979385963542572448366313924041042499873835353547221799042211798661167797499778976773686180810563188743606051078743526771739579728410026917138048477667310265665664583380885650561306139838320219898219647223068311676031239994374143902737796023390990843505030107464036278460524410866049446521446792005458383980313750484390174478520503365797543618827631046702834917660820283630144471175315984474176786997691999552913794235477825267025138385346169107332918699418518421978936952631965938000839989819396907140863442441168295708478915143607756446119360686684108911218880729896715510407708446860503319816719243277
4696384962267505770612203977166879812365229000176671547105727338247553029496457795771681390456378112975504607619561818453284985494460776324473846775310813658949028506908930080730342378304272446602029644710362285705167698406378093023578042407827922609396757195357757908512330179734915902538651045348139181103102057957889673638867362656306824344422009272843303183943865427156772127384423393931885027929331540781104219293473615098815453419515095786131789140027660128247454379145885060992722016861878185832868836167758302257240285298728953090343942829159135164082691151393189623437885579392609418462964986746137774982086215228836131178342814489868731125722406189414097337184197093460108291098553444688077027929696186507517933920793954066703464939863226018246555192897593523383466432365391077496071407359894099987188940454615905991310280343011260307783794547332289883592852237075274377600476779078504619290936242042745453532827916204386862861536741443014844428050597346841670246712109107567771612273598
1853155305087654090041184203543897366928456793118364387536804232658134896980836455221010943495434855043472538001537621563522139593046154357787767005431104545971669418574851780250907092283316306268963575222624300712467342094598896648057984691403613468974488944872998622837323868755355189267111780877757568894059389970538280324764242551100008248461368426518187213353352357694434213832166987557418266406227696226731269684792001568400021847396528021967067824143661722248433981399668779553795275336703143817493437527034996864062750575476033683476592990160272467162084962796568071976074871258307939299418014923559299385665473033725113974451523809060277107680679572873780993418718878242541739331014400659375536978260477488357552107556192113366347417991104642703118092203083908784935287088794768526725852335467431719632035696961197574244468572784804202348383106161583679110160287614379640906594882850609519086285042813749276356637781379038220846742528795286871479100756150807333745975474958321450363517740
760238117025425974486078154207830247097362626165324810782122767883284045649030069274675687700549598368628071401598588410441252531499209707332674122415338248580890294783064345979541280969199051704799741386653088518816114562299165926309199651937446790392973333738006627698157890241933414100089173174831431184707510434403555662528452402504077142425536804953254061897213891569242003073903768794005932350898891391492985275354272208278492706372857379439317642872859681436000458822433289482266728226315775670196071226105231934830048135875895979603688395385169281157101689790447091271008526926070764802626463647543922527775678125834056317542431590664776972614685296274947164129345320953791799602460255113053411734201692035340147314494078580586501891867882863976375198757727260072182528363757963uwb);
> +static_assert (g == 297984322449166741882678745659945111294651208039787883443168648148167881181162119670649938592026514572411506535279373003181394413981374807394980166051699580743384688129742479406439831196874127097122987077086390657218446338340303927546224670821675753842566361249709124168634677501228304311402004330476182086550950045108154326877832373993339668835666622842494731842664664945557812846619423941340076069745551974968471119701370210169994185400044971351901806986055657462458432539244780070196672163160389183118431496659966221044929115735468895317775407304823111899933049110070374080680090662152184300708481293284182923133953739622451292262094928551538443853730841109195861114689936021110247070273638618118998819128429828590683960683587130575633545364962156627386471020188586671739593754143188711774961338499591993129268822180883646641133111086936401229762604497113273519323222337881108354550721185553731450492911547434941155900605073171118565397350325331922182304832602443347041938
8946979466218496619953799396399907847525921687831248297470744203625649278250977237345527276927383388231564529885486331179554260865030488216142004069721118166525234208003519717380253474976946972470326815802471081917566952277085147509317644667223832952850290875534951587098459927367935044682600285790463816542957718722704714357860807145263351834247127106386628034611176207186978936490397990171720506169996984370261092923163080506032861528746765936937084031915931339713350289331882944150086004036173378286305478809390889770867433158367260340722070647949267607238873326669115630596291841623232477525624811017799205720714130156706968225620636682145616867650946626185885640993847215632163886139575702666340721125820542407680355061498665748459400557431916912448470244399965204998915093806348959174342629424599386645126050525059301310937423020581855370548132381446799776443423282521626583947948267473198796376180863329330833751226528387136461209115998820185437066014518447613948590149103363591381204479075
6144158913525552429641012849929727963443403717727376487350639360231917245906451656664043825445552575910730367456550208688513910014028364857635115620260661725890378663220166170586315294293674161240986703299566970473620561528908884250063780883792514734224688857563036631219375697604761545663806029135955446308329698729187633118726312957682328458165865329528612815778259975236473921843981997298878825807911669198854508239886525812277435714684005819874906489012032318711200528590760750570526041852880637356865931470793479763913927643202410399111751142093604070407422948063457225322500044586890851162487991894225174721754156861359977725394051668830407469004793273274348712069653223607355162389110859799061463530280124845281291280807143650682769463073672563974069400047110643228833827027461693537080439809461719940027498281816925274592533558602395110549455677542858499427662912175880073255153392214064243908048250185909069590209744180868907760635944391850223298315749825841911357067093249040115124993758
5362430302932255250763530590131235133251116983671821269151506849075995198146238930885422037833855926622693095329842920404000102147794956013589564139028671996449185374642297786196332336949409225020043805176021092113475676135951059559832164308897259564107132592032982467296087489598800557036271865564018641116380184709660126707359950894815159264368303147756797191600874973700449754456262699311531130825894917060955587094696531059134019902434432810068657614974722741667709330236003801688282637962709228317891999917099357158176911523374213945602787476186907831712714735966410437549719333077588344323485538040948081818404248629220454491370504032873486459017405026657144649962389314644042951540958923025974833604003909053498943681955855394022325300914532043403069588220611519489903095279188846484365087681491533175448235911242069753496092560205468494886557368763722522120508305444669377476707643156692933296275185141026175633876495167719904911873104359312899854455266971821238155325016672177660954157116
7221480313074500081776374685594130029844480438137355032396041706915684482446060354487966073855918686861888634386973914089360330679596347224496504416805703265848326933615039338619213797119830707628375391004708181322212415695706279098529010512145490891366195198159076001540291480295261777281324964863297316374045284373129625436278230414735503397263090982407374844902817380454771747084271420546484568449135656290873150911614238725483548644242418064120406962489844394069020488726612721153360990599219565050642494043410199180613294392122148367163499807541944303171610431995433619886931620069504888360967560264320473266205340194034021794702347254737152940776350395901586931645446885136832665581394520085508012854248358904764022512151522346009692128908250657233008537280215742956114907093642694855140194874514393394715373539352107086617578040474179218362911831034630333477917599500318867113877998558066177460880863611442937910646871511399136050015325121933944735299413556379749265534008174765587710242327
2282522093490036439208508486641371157289888819319721741072021088988838185575526314420629404039273157137765410457726146724738238380912109958473128084231429395806333577982707754174511689519819992445390193198198658674126964252857209724109156960517790623894027903793027127063672501493610074211338320954814508470755576473435095989167775767189027449015518474082166619942092480362630295618282318120120784478999847987626484022481457667372563874126148626833365925380661168036280884209429692348940543937907700655045159826358187660828871244692799325658776545285122623630935724707862474702154310309904951694032327191814827022575329978008964102267856794554960532273796606163812328655447447843939879079636519295465998645050724045891371587372278645762052618094041441489071969833201075688391288870817741047957072975950738340906036013816125144698235601966779945176857432857633399909230472912455927908602203373016718198614604928264423172202682557163587717390960517005049436804372462076787514085114196168532579703170
7314004318792956260433876708088354185586346775065864351990042173089179336337795289309675461545338423467198840963828819429248763457206002141803907879106458512331244789084423878783973300675769871818833047184501760546521998883897607481453366372830148056742579406197382909302628253013867862305103618046264894720481854727339258917797242670674537330960773430644474784260097930519402464379602272782634931978559449950623837976973825589229409299360700264271714028876287038598689351350791073294404424220767579247156563143198591557535486581492595293765500017208125634874222056647607793322269928286231907781048984860923800427797004885169176606570238224529041160962379188574576963818247228981164279368928354470674684684070090420780670847508765499525650209656687575906141278818779352214593406167525112481217314575955479801123350657578320058916651649053916339746161673247088836370069615065207928960369126279715909917044123312575219248234766311051698978788440605063228224152069647933393142185958563044879869638249
0442312802297155616152474997050148291335831908450689043714276440614734458762953663726415816807792394355416212713029348114134334715350573336715488052387179567746233407193612626359518798389473362218842594774409710277280079838496745639886697451722807605016089650856869965825293271650469811421783389285748701557392728638707446179598855911240560541175341823786277133984339742762464331019374344565101705554889476630735380270181790895963488232958355693912216269159420851330327095944587597176473807436036172743001335724704464880360751628179196305572972424681241217207184463785470887368112747462733140518114669537757127467421443780691544521780277505281584197571804560199073441642633036099361877303869400412049733667771047803804624305570586586583117479545031402874106862414162455347268065446975307830153595504326428327190990445606834026263662227930182932320662796823991339381628294518496329966297858359624438019876690019328035921110119312063903725280619065361385364977747722009643141531231575556396526754474
3737395010806760019102516763403978882159819651640938970139344764659441590225162332671407148444880969613631409727647114892093790763899889575251819843426046454701461164266075412453030724977752871861083191084321517298250628434552232026386426397723496147104928347285904099698459531024308948589396794992195467602362080739396575252883580280220821638109567806035125118547858876658113425227036790662985374378852325482982045005999509082737712016309072932342749447188645797866863307956692202254274096257229720450056213784002994618833012774061411527155971154557389097691677678141035861132494437203379707367812549575427083312703505887015979470139355962755397252795113687602766495784089469668341232834905294201079498970320080406741451950210575593932460159381736742522819101649364144856706686103595233078202056255672800217818041865057688977839959137871100908550020967057057308917735988786388788052699769578854534978855415079111598231460966054321228995734190020325078812000201079027820474779442492631325689095753
8786330854976502048570798725545594734834199117687460157897109933759667942197765492538535301784765513111059740564235473554695295525609088543253693624555454100917983799026213310294838876826749482179566292847529309083298296747339202767707470941857466859965964124276799936819499746984193480147640029324345519299816240671362438639020785584710414892794458078952780523019328565858935657792928913172078434077444007677796205175209216703223380507288900457479834513733627979105359292693937532730123622178895616739259683894599658336854016900818413971625747129241325505207314647274849693523708966924148216128273171022993871059463650956157922159743765696716006167697514882897688090749559473633659187419916290592190890145974607666729615544047100972730035437333339104275771425065637096756505992452325059070770026216338941123880737205267218501753172826807346638804594659412296175588872140411122927230175061706210737514311420270418339942240293410128221375628262871392334185191206751754069766623505125811913464507701
7734962264550528388089819300666094559432579383142060254721210461864946960666657234791470443282598067297984882483659717417452961400185858954753155965497729319312727006570200015850069821453978826868814737267599109242253355885864443959358820263947705050473429665004607965664064790154882275704347373161952239923016412122482546636192413725171505875886693349491708392332677671973215540990914492593822446326449465870215246605063320528130450521588537551219907850120747125765202400066530652047013174521907958654610531183014009613229369246809451192588627278135856392682922409557868365198420098337258366580357137747602714491364818497873093387897956725304306966001273787268705060979884010879084512939570787057291237433227938298372484862432253958676165002988316149523572457785955204160257934718003718864751308395260233779412116659743116737052776215433754977610637037615356265588193550507827849865028655241032963227464649378545499118114485467918633549739094648381803854266568478725230503958976825682016945526227
4070935643105621078189499806863932972473187397166808047422437248169273260555301215824183715525067199124002511185216150503341306108923690508295521642787129456634906823886074539205650887996137900313156803955685097335647168198343050412274573595260250608802876865485888024072019917345123849434033283566478908088265035768478211683223376432512441588787190764012153315909872510218339126604004796078990801028669133777338710317564240776134511810524463606368771117942931124804883649428527160017692567898683240236409226430799434265084307696860149739966884956352228793342336285107735457499085215192833410476346646383701031126925208288541002096440132320482015655980943794434204072206620053672585659226466354793301901487364350146519867630971691770986995057080225660905837503456552838203132631041791897154141335541677639190964910215683663487060604980846305614894646240323789368500369758091291245113498841329427792734330734803282924511704131080318489668163617828033603395900451487922230312909796925948381102991146
8220546746964874260707533968324302216184282954252574997969944206078605386454195314917577333360340216015354265837585676275556299389468598865441585304898206422416558566170383050774920325528580775689463920771234072188094433466862094012714937635553428515450030749446052654965733032318868574491559103371427677321002259363781051703712010849802415103259104526263035155936331561392367330889058627456958820838541908598105811603620704082679485336244496282442471191961736832621859131915131134131208348903581665515891561395947205357470807301122945939941217635311688839110318945359104870690957071750452144414138838848024109236996599228874554839921989260589748074034967644463013586671992556844288637948043851743496384631556729796320021720388655546374176606881327730492557109053330677876326764180648043685441807093375847793326438440142812944990874689876375595418688839727351074216540551488153178817578584989401653071456867633534092634674275989358626815613498456730245642782107094136962606190385309708756764045936
2421399144683452829680790431499687736188912754870687666050934238906742876033420234817687390218876499671590122015710721839599477994422823202570688068053701742266282943616396202404918389662315225132456855385922291995628086616445737322761737898467399895429451340671293635513047048404717288832770182856912254011255902944310554913338010887631787893488570877948119787220358440795089304039066226752794973821317788930343252560467184168925738974471486458557879278307790700100736624701045834202704798441004260281380781052754175592512497879006009407897467775912200547159183002721509516380053895600458418838633559498515341463978959089316103206521662786556247824347749271898771233602817093698666772794131155863934416278095538381998927228905920827190416711853276257693993601613922933008547200066422918497834908180403310168931084561046768618043373911299715115636953610000593789250841751934289027402794499956679186844164317108851163628750684360749435328163421608492719520442531861616038002706013780598380872423325
8618373597362604084772620575548007554735347777391638935368867781173138943420137303127382395494860537617670160035924495601832037708702973800426654932341543282278261613196243383667905292201034018092087846236419463180081908614772996072182181475631925657135805746736769755149885159738078245236118655290281971965234305542674569161473901630756445921641134653221918773817366488270251547556553445951856258504157060074846199618221127220780775488108206614587779803010482980949599988435901666000892139982997311053704503820813573985517680412958243220188442951830553187600252244113193599181872435497016639064999726818396372997120756358317896887004368831719573185714636352388773401931148269187200760456815204645989551987623393621306594072130172374142854695647745385134266260394221479246638034464958250019727875388606182872986888783267877119329425439261928807662708446658489716263804660134040984758765172767392018690172608055362199607909977706235198762015694206501563061184219994813537596598965037650742184551655
3364281298216784129462508052808699786306428037715441926749661427047175148587379192626723304221787677019960821729801610583502816948376048048918914182538684996446668897371701461626725957581956338071510235281535975423333841687013762725529829420092807105037471280712616312930542333422783560573120852602599851446217464829295216010394722568326336683896928763552607961547397107584693715231347668220976614896033519815048299857566146466920509086710435347459108968109461531088230108135657154343641294380075860798257256408299385785222015129979036146565186297092108475652206555185502975242058773272653607863863207400931049400376256673108363350616462165719837484309537247160899480562864617509168672220038538235827955519256620242076539563629424821716531156169415835280415836024518937145314519054807243668547605569274427479668262387618754139037954208657905949054947907025792949092385215155895150058265059303860721303865892178947166868274889932154871032727795442270271341116976637486221880550968838947254837227058
5145992856686928459093038253277084393346836609303652769568794599323001781334621232922225556633609531916458920958236761583066286058164874427139929707317898330622538426523183824999155690195243146835251338899146870860809273906747418947282210036260997649802602263256003511831761130290090133103861940612780491606392483118329749425657871725342423403597482492012528638199333975259338623373353847959476416928269719611937228791111151902002082782446143899308986008672737212599389284739720628756130386039741919885604891252667193273018963807502828933968731242864200882666757969298727195050303213565365675830459689782389461186961594064291092967067443979833584016448479839062593916376052038169355769779613749687902834672534473051717832384179329764280472242192102097366088133115247552117192582896905890908595492066735448463649813649546308160492229330348076209832861631025797229265227180609036259599402246059377896732996763021744401752574163804522987002934698801495808457277139897898437209613853198949990565691855
4786826489755330939796198694531597704511088156379062341123293295518802525687692186882544300669083021869264815460641932403430710625466965805696101573184162037649331430509823557536730381559741312755561207022942288392997545062374284743535347995055673645037635267101631718560797941766939979345842257105659818759024388745163435943430548152822772246258077883370773252929015899844104006131190134245627499981302192117817503265438901221817741389115833357581935745779927204521552590187770875390757765548238495852940181105538496855904068066688668026690107729150021075489752456818910460907620831637809136111720910366919838287991763482928791748202589855715467117114637839467261942141745735707911425500856498654501970611071951782463930001708380526113138372274175339335662509216976645164154703071438074490395763946786352790222348893491203713832049967892693792723281438844117355316466098637070993105543662349514411036242212001644754859251446687255243764019263618483003145105226068454039223391184981227114376461103
2891142827340697351298784438700146355035326488666265666679149011661629305871045767494142611537940647538021589618026429273557199183106630282151435698189709056324332696453200049003039570556321753111384567468446028356289047404186070000854299430930343167006989811405718778168879164747598547539978592711053866936002073061323654738871053401425080061628529061185385967329699871261662119903517049865037801553638714136996639547928006108090294559556003098229915433300422536798917669326241449390604281605794531014614330441439962348736745060377356625967711238619637292018958546031296103050964487431551409345077040614455925466995562994187465965175668490458904515441808477372773300017904426338292059956456086258327733695163609895881320058085560783681485688618930862356284437477843996297284712534810863454510208542794290826273691963421482030237240909978709409839260877652857283547351318803739978863286902402079160612762144020471982158430636735353849566687958320905511908861931407026785214302588153112251040479017
38300533548529803349897158550493609982225769194034849807698159537877895555193536203558830022247566834435050885516469224684770384749924654266966662000902430627265289641143382738252234277626796684149644206035576614604674203041322937356663227140931005992313613604607015407976103540881585077144015739356504208743192058109416473577195313011234604304724364984149920580678685505306262473132159795312126331269718770461048329028893386454886617883785246418127743847205019651073400232203851162419350487342072044133458470845299106673918135646890264041635815461909682536651955578794886488715663089155422196473858390320269399281721069474509476566112352026843925757498701587450846186392850664266843050309911138045544674927859244458425621557512679785762866254871670uwb);
> +
> +__attribute__((noipa)) unsigned _BitInt(65472)
> +foo (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
> +{
> + return a + b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(65472)
> +bar (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
> +{
> + return a / b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(65472)
> +baz (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
> +{
> + return a >> b;
> +}
> +#endif
> +
> +int
> +main ()
> +{
> +#if __BITINT_MAXWIDTH__ >= 65472
> + if (foo (a, b) != c || bar (d, 71uwb) != e || baz (f, 131uwb) != g)
> + __builtin_abort ();
> +#endif
> +}
>
> Jakub
>
>
Jakub Jelinek <jakub@redhat.com> writes:
> Hi!
>
> The following patch lifts further restrictions which limited _BitInt to at
> most 16319 bits up to 65535.
> The problem was mainly in INTEGER_CST representation, which had 3
> unsigned char members to describe lengths in number of 64-bit limbs, which
> it wanted to fit into 32 bits. This patch removes the third one which was
> just a cache to save a few compile time cycles for wi::to_offset and
> enlarges the other two members to unsigned short.
> Furthermore, the same problem has been in some uses of trailing_wide_int*
> (in value-range-storage*) and value-range-storage* itself, while other
> uses of trailing_wide_int* have been fine (e.g. CONST_POLY_INT, where no
> constants will be larger than 3/5/9/11 limbs depending on target, so 255
> limit is plenty). So, the patch turns trailing_wide_int* into templates
> with the type for length members as template parameter, where CONST_POLY_INT
> uses unsigned char for that (as before) and value-range-storage* uses
> unsigned short, so that it can handle even 16320-65535 bits BITINT_TYPE
> ranges. The cc1plus growth is about 16K, so not really significant for 38M
> .text section.
I don't think we should introduce a difference between CONST_POLY_INT
and INTEGER_CST. Let's just change all trailing_wide_int length members
to unsigned short.
If we do that, then:
> /* The current length of each number.
> Avoid char array so the whole structure is not a typeless storage
> that will, in turn, turn off TBAA on gimple, trees and RTL. */
> - struct {unsigned char len;} m_len[N];
> + struct { TL len; } m_len[N];
this struct workaround is no longer needed.
Thanks,
Richard
>
> /* The variable-length part of the structure, which always contains
> at least one HWI. Element I starts at index I * M_MAX_LEN. */
> HOST_WIDE_INT m_val[1];
>
> public:
> - typedef WIDE_INT_REF_FOR (trailing_wide_int_storage) const_reference;
> + typedef WIDE_INT_REF_FOR (trailing_wide_int_storage <TL>) const_reference;
>
> void set_precision (unsigned int precision, unsigned int num_elements = N);
> unsigned int get_precision () const { return m_precision; }
> unsigned int num_elements () const { return m_num_elements; }
> - trailing_wide_int operator [] (unsigned int);
> + trailing_wide_int <TL> operator [] (unsigned int);
> const_reference operator [] (unsigned int) const;
> static size_t extra_size (unsigned int precision,
> unsigned int num_elements = N);
> @@ -1790,39 +1798,46 @@ public:
> m_num_elements); }
> };
>
> -inline trailing_wide_int_storage::
> -trailing_wide_int_storage (unsigned int precision, unsigned char *len,
> +template <typename TL>
> +inline trailing_wide_int_storage<TL>::
> +trailing_wide_int_storage (unsigned int precision, TL *len,
> HOST_WIDE_INT *val)
> : m_precision (precision), m_len (len), m_val (val)
> {
> }
>
> +template <typename TL>
> inline unsigned int
> -trailing_wide_int_storage::get_len () const
> +trailing_wide_int_storage<TL>::get_len () const
> {
> return *m_len;
> }
>
> +template <typename TL>
> inline unsigned int
> -trailing_wide_int_storage::get_precision () const
> +trailing_wide_int_storage<TL>::get_precision () const
> {
> return m_precision;
> }
>
> +template <typename TL>
> inline const HOST_WIDE_INT *
> -trailing_wide_int_storage::get_val () const
> +trailing_wide_int_storage<TL>::get_val () const
> {
> return m_val;
> }
>
> +template <typename TL>
> inline HOST_WIDE_INT *
> -trailing_wide_int_storage::write_val (unsigned int)
> +trailing_wide_int_storage<TL>::write_val (unsigned int)
> {
> return m_val;
> }
>
> +template <typename TL>
> inline void
> -trailing_wide_int_storage::set_len (unsigned int len, bool is_sign_extended)
> +trailing_wide_int_storage<TL>::set_len (unsigned int len,
> + bool is_sign_extended)
> {
> *m_len = len;
> if (!is_sign_extended && len * HOST_BITS_PER_WIDE_INT > m_precision)
> @@ -1830,9 +1845,10 @@ trailing_wide_int_storage::set_len (unsi
> m_precision % HOST_BITS_PER_WIDE_INT);
> }
>
> +template <typename TL>
> template <typename T>
> -inline trailing_wide_int_storage &
> -trailing_wide_int_storage::operator = (const T &x)
> +inline trailing_wide_int_storage<TL> &
> +trailing_wide_int_storage<TL>::operator = (const T &x)
> {
> WIDE_INT_REF_FOR (T) xi (x, m_precision);
> wi::copy (*this, xi);
> @@ -1841,10 +1857,10 @@ trailing_wide_int_storage::operator = (c
>
> /* Initialize the structure and record that all elements have precision
> PRECISION. NUM_ELEMENTS can be no more than N. */
> -template <int N>
> +template <int N, typename TL>
> inline void
> -trailing_wide_ints <N>::set_precision (unsigned int precision,
> - unsigned int num_elements)
> +trailing_wide_ints <N, TL>::set_precision (unsigned int precision,
> + unsigned int num_elements)
> {
> gcc_checking_assert (num_elements <= N);
> m_num_elements = num_elements;
> @@ -1853,17 +1869,17 @@ trailing_wide_ints <N>::set_precision (u
> }
>
> /* Return a reference to element INDEX. */
> -template <int N>
> -inline trailing_wide_int
> -trailing_wide_ints <N>::operator [] (unsigned int index)
> +template <int N, typename TL>
> +inline trailing_wide_int <TL>
> +trailing_wide_ints <N, TL>::operator [] (unsigned int index)
> {
> - return trailing_wide_int_storage (m_precision, &m_len[index].len,
> - &m_val[index * m_max_len]);
> + return trailing_wide_int_storage<TL> (m_precision, &m_len[index].len,
> + &m_val[index * m_max_len]);
> }
>
> -template <int N>
> -inline typename trailing_wide_ints <N>::const_reference
> -trailing_wide_ints <N>::operator [] (unsigned int index) const
> +template <int N, typename TL>
> +inline typename trailing_wide_ints <N, TL>::const_reference
> +trailing_wide_ints <N, TL>::operator [] (unsigned int index) const
> {
> return wi::storage_ref (&m_val[index * m_max_len],
> m_len[index].len, m_precision);
> @@ -1873,10 +1889,10 @@ trailing_wide_ints <N>::operator [] (uns
> structure in order to handle NUM_ELEMENTS wide_ints of precision
> PRECISION. NUM_ELEMENTS is the number of elements, and defaults
> to N. */
> -template <int N>
> +template <int N, typename TL>
> inline size_t
> -trailing_wide_ints <N>::extra_size (unsigned int precision,
> - unsigned int num_elements)
> +trailing_wide_ints <N, TL>::extra_size (unsigned int precision,
> + unsigned int num_elements)
> {
> unsigned int max_len = WIDE_INT_MAX_HWIS (precision);
> gcc_checking_assert (num_elements <= N);
> @@ -1886,8 +1902,8 @@ trailing_wide_ints <N>::extra_size (unsi
> /* This macro is used in structures that end with a trailing_wide_ints field
> called FIELD. It declares get_NAME() and set_NAME() methods to access
> element I of FIELD. */
> -#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I) \
> - trailing_wide_int get_##NAME () { return FIELD[I]; } \
> +#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I, TL) \
> + trailing_wide_int <TL> get_##NAME () { return FIELD[I]; } \
> template <typename T> void set_##NAME (const T &x) { FIELD[I] = x; }
>
> namespace wi
> @@ -3922,21 +3938,21 @@ template<int N>
> void gt_pch_nx (generic_wide_int <widest_int_storage <N> > *,
> gt_pointer_operator, void *) = delete;
>
> -template<int N>
> +template<int N, typename TL>
> void
> -gt_ggc_mx (trailing_wide_ints <N> *)
> +gt_ggc_mx (trailing_wide_ints <N, TL> *)
> {
> }
>
> -template<int N>
> +template<int N, typename TL>
> void
> -gt_pch_nx (trailing_wide_ints <N> *)
> +gt_pch_nx (trailing_wide_ints <N, TL> *)
> {
> }
>
> -template<int N>
> +template<int N, typename TL>
> void
> -gt_pch_nx (trailing_wide_ints <N> *, gt_pointer_operator, void *)
> +gt_pch_nx (trailing_wide_ints <N, TL> *, gt_pointer_operator, void *)
> {
> }
>
> --- gcc/rtl.h.jj 2023-10-12 17:20:33.252599425 +0200
> +++ gcc/rtl.h 2023-10-12 17:49:10.512175574 +0200
> @@ -290,7 +290,7 @@ struct GTY((variable_size)) hwivec_def {
> (RTL_FLAG_CHECK1("CWI_PUT_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem = (NUM))
>
> struct GTY((variable_size)) const_poly_int_def {
> - trailing_wide_ints<NUM_POLY_INT_COEFFS> coeffs;
> + trailing_wide_ints<NUM_POLY_INT_COEFFS, unsigned char> coeffs;
> };
>
> /* RTL expression ("rtx"). */
> --- gcc/emit-rtl.cc.jj 2023-10-03 15:39:49.612854328 +0200
> +++ gcc/emit-rtl.cc 2023-10-12 18:05:43.784655293 +0200
> @@ -772,7 +772,7 @@ immed_wide_int_const (const poly_wide_in
> enough that we get no benefit from using VOIDmode, and various places
> assume that VOIDmode implies CONST_INT. Using the real mode seems like
> the right long-term direction anyway. */
> - typedef trailing_wide_ints<NUM_POLY_INT_COEFFS> twi;
> + typedef trailing_wide_ints<NUM_POLY_INT_COEFFS, unsigned char> twi;
> size_t extra_size = twi::extra_size (prec);
> x = rtx_alloc_v (CONST_POLY_INT,
> sizeof (struct const_poly_int_def) + extra_size);
> --- gcc/value-range-storage.h.jj 2023-07-17 09:07:42.156282822 +0200
> +++ gcc/value-range-storage.h 2023-10-12 17:56:14.679386043 +0200
> @@ -73,8 +73,8 @@ public:
> private:
> DISABLE_COPY_AND_ASSIGN (irange_storage);
> static size_t size (const irange &r);
> - const unsigned char *lengths_address () const;
> - unsigned char *write_lengths_address ();
> + const unsigned short *lengths_address () const;
> + unsigned short *write_lengths_address ();
> friend void gt_ggc_mx_irange_storage (void *);
> friend void gt_pch_p_14irange_storage (void *, void *,
> gt_pointer_operator, void *);
> @@ -97,7 +97,7 @@ private:
> // Another variable-length part of the structure following the HWIs.
> // This is the length of each wide_int in m_val.
> //
> - // unsigned char m_len[];
> + // unsigned short m_len[];
>
> irange_storage (const irange &r);
> };
> --- gcc/value-range-storage.cc.jj 2023-07-17 09:07:42.156282822 +0200
> +++ gcc/value-range-storage.cc 2023-10-12 17:57:00.713760714 +0200
> @@ -229,14 +229,14 @@ vrange_storage::equal_p (const vrange &r
> // irange_storage implementation
> //============================================================================
>
> -unsigned char *
> +unsigned short *
> irange_storage::write_lengths_address ()
> {
> - return (unsigned char *)&m_val[(m_num_ranges * 2 + 2)
> - * WIDE_INT_MAX_HWIS (m_precision)];
> + return (unsigned short *)&m_val[(m_num_ranges * 2 + 2)
> + * WIDE_INT_MAX_HWIS (m_precision)];
> }
>
> -const unsigned char *
> +const unsigned short *
> irange_storage::lengths_address () const
> {
> return const_cast <irange_storage *> (this)->write_lengths_address ();
> @@ -263,7 +263,7 @@ irange_storage::irange_storage (const ir
> }
>
> static inline void
> -write_wide_int (HOST_WIDE_INT *&val, unsigned char *&len, const wide_int &w)
> +write_wide_int (HOST_WIDE_INT *&val, unsigned short *&len, const wide_int &w)
> {
> *len = w.get_len ();
> for (unsigned i = 0; i < *len; ++i)
> @@ -294,7 +294,7 @@ irange_storage::set_irange (const irange
> m_kind = VR_RANGE;
>
> HOST_WIDE_INT *val = &m_val[0];
> - unsigned char *len = write_lengths_address ();
> + unsigned short *len = write_lengths_address ();
>
> for (unsigned i = 0; i < r.num_pairs (); ++i)
> {
> @@ -317,11 +317,11 @@ irange_storage::set_irange (const irange
>
> static inline void
> read_wide_int (wide_int &w,
> - const HOST_WIDE_INT *val, unsigned char len, unsigned prec)
> + const HOST_WIDE_INT *val, unsigned short len, unsigned prec)
> {
> - trailing_wide_int_storage stow (prec, &len,
> - const_cast <HOST_WIDE_INT *> (val));
> - w = trailing_wide_int (stow);
> + HOST_WIDE_INT *valn = const_cast <HOST_WIDE_INT *> (val);
> + trailing_wide_int_storage <unsigned short> stow (prec, &len, valn);
> + w = trailing_wide_int <unsigned short> (stow);
> }
>
> // Restore a range of TYPE from storage into R.
> @@ -342,7 +342,7 @@ irange_storage::get_irange (irange &r, t
>
> gcc_checking_assert (TYPE_PRECISION (type) == m_precision);
> const HOST_WIDE_INT *val = &m_val[0];
> - const unsigned char *len = lengths_address ();
> + const unsigned short *len = lengths_address ();
>
> // Handle the common case where R can fit the new range.
> if (r.m_max_ranges >= m_num_ranges)
> @@ -411,7 +411,7 @@ irange_storage::size (const irange &r)
> unsigned n = r.num_pairs () * 2 + 2;
> unsigned hwi_size = ((n * WIDE_INT_MAX_HWIS (prec) - 1)
> * sizeof (HOST_WIDE_INT));
> - unsigned len_size = n;
> + unsigned len_size = n * sizeof (unsigned short);
> return sizeof (irange_storage) + hwi_size + len_size;
> }
>
> @@ -433,7 +433,7 @@ irange_storage::dump () const
> return;
>
> const HOST_WIDE_INT *val = &m_val[0];
> - const unsigned char *len = lengths_address ();
> + const unsigned short *len = lengths_address ();
> int i, j;
>
> fprintf (stderr, " lengths = [ ");
> --- gcc/cp/module.cc.jj 2023-10-10 12:04:39.822102088 +0200
> +++ gcc/cp/module.cc 2023-10-12 18:09:16.609764265 +0200
> @@ -5158,7 +5158,6 @@ trees_out::start (tree t, bool code_stre
> case INTEGER_CST:
> u (TREE_INT_CST_NUNITS (t));
> u (TREE_INT_CST_EXT_NUNITS (t));
> - u (TREE_INT_CST_OFFSET_NUNITS (t));
> break;
>
> case OMP_CLAUSE:
> @@ -5231,7 +5230,6 @@ trees_in::start (unsigned code)
> unsigned n = u ();
> unsigned e = u ();
> t = make_int_cst (n, e);
> - TREE_INT_CST_OFFSET_NUNITS(t) = u ();
> }
> break;
>
> --- gcc/testsuite/gcc.dg/bitint-38.c.jj 2023-10-12 16:01:04.278163963 +0200
> +++ gcc/testsuite/gcc.dg/bitint-38.c 2023-10-12 18:50:40.877103397 +0200
> @@ -1,18 +1,43 @@
> /* PR c/102989 */
> -/* { dg-do compile { target { bitint } } } */
> +/* { dg-do run { target { bitint } } } */
> /* { dg-options "-std=c2x" } */
>
> #if __BITINT_MAXWIDTH__ >= 16319
> -constexpr unsigned _BitInt(16319) a
> - = 468098567701677261276215481936770442254383643766995378241600227179396283432916865881332215867106489159251577495372085663487092317743244770597287633199005374998455333587280357490149993101811392051483761495987108264964738337118155155862715438910721661230332533185335581757600511846854115932637261969633134365868695363914570578110064471868475841348589366933645410987699979080140212849909081188170910464967486231358935212897096260626033055536141835599284498474737858487658470115144771923114826312283863035503700600141440724426364699636330240414271275626021294939422483250619629005959992243418661230122132667769781183790338759345884903821695590991577228520523725302048215447841573113840811593638413425054938213262961448317898574140533090004992732688525115004782973893244091427000396890427152225308661078954671066069234453757593181753900865203439035402480306413572239610467142591920809187367438071170100969567440044691427487959785637338381651309916782063670286046547585240837892307170928849485877186793280707600840866783471799148179250818387716183127323346199533387463363442356218803779697005759324410376476855222420876262425985571982818180353870410149824214544313013285199544193496624223219986402944849622489422007678564946174797892795089330899535624727777525330789492703574564112252955147770942929761545604350869404246558274752353510370157229485004402131043153454290397929387276374054938578976878606467217359398684275050519104413914286024106808116340712273059427362293703151355498336213170698894448405369398757188523160460292714875857879968173578328191358215972493513271297875634400793301929250052822258636015650857683023900709845410838487936778533250407886180954576046340697908584020951295048844938047865657029072850797442976146895294184993736999505485665742811313795405530674199848055802759901786376822069529342971261963119332476504064285869362049662083405789828433132154933242817432809415810548180658750393692272729586232842065658490971201927780014258815333115459695117942273551876646844821076723664040282772834511419891351278169017103987094803829594286352340468346618726088781492626816188657331359104171819822673805856317828499039088088223137258297373929043307673570090396947789598799922928643843532617012164811074618881774622628943539037974883812689130801860915090035870244061005819418130068390986470314677853605080103313411837904358287837401546257413240466939893527508931541065241929872307203876443882106193262544652290132364691671910332006127864146991404015366683569317248057949596070354929361158326955551600236075268435044105880162798380799161607987365282458662031599096921825176202707890730023698706855762932691688259365358964076595824577775275991183149118372047206055118463112864604063853894820407249837871368934941438119680605528546887256934334246075596746410297954458632358171428714141820918183384435681332379317541048252391710712196623406338702061195213724569303285402242853671386113148211535691685461836458295037538034378318055108240082414441205300401526732399959228346926528586852743389490978734787926721999855388794711837164423007719626109179005466113706450765269687580819822772189301084503627297389675134228222337286867641110511061980231247884533492442898936743429641958314135329073406495776369208158032115883850691010569048983941126771477990976092252391972812691669847446798507244106121667885423025613769258102773855537509733295805013313937402282804897213847221072647111605172349464564089914906493508133855389627177663426057763252086286325343811254757681803068276278048757997425284334713190226818463023074461900176958010055572434983135171145365242339273326984465181064287264645470832091115100640584104375577304056951969456200138485313560009272338228103637763863289261673258726736753407044143664079479496972580560534494806170810469304773005873590626280072387999668522546747985701599613975101188543857852141559251634058676718308000324869809628199442681565615662912626022796064414496106344236431285697688357707992989966561557171729972093533007476947862215922583204811189015550505642082475400647639520782187776825395598257421714106473869797642678266380755873356747812273977691604147842741151722919464734890326772594979022403228191075586910464204870254674290437668861177639713112762996390246102030994917186957826982084194156870398312336059100521566034092740694642613192909850644003933745129291062576341213874815510099835708723355432970090139671120232910747665906191360160259512198160849784197597300106223945960886603127136037120000864968668651452411048372895607382907494278810971475663944948791458618662250238375166523484847507342040066801856222328988662049579299600545682490412754483621051190231623196265549391964259780178070495642538883789503379406531279338866955157646654913405181879254189185904298325865503395688786311067669273609670603076582607253527084977744533187145642686236350165593980428575119329911921382240780504527422630654086941060242757131313184709635181001199631726283364158943337968797uwb
> - + 9935443518057456429927126655222257817207511311671335832560065573055276678747990652907348839741818562757939084649073348172108397183827020377941725983107513636287406530526358253508437290241937276908386282904353079102904535675608604576486162998319427702851278408213641454837223079616401615875672453250148421679223829417834227518133091055180270249266161676677176149675164257640812344297935650729629801878758059944090168862730519817203352341458310363811482318083270232434329317323822818991134500601669868922396013512969477839456472345812312321924215241849772147687455760224559240952737319009348540894966363568158349501355229264646770018071590502441702787269097973979899837683122194103110089728425676690246091146993955037918425772840022288222832932542516091501149477160856564464376910293230091963573119230648026667896399352790982611957569978972038178519570278447540707502861678502657905192743225893225663994807568918644898273702285483676385717651104042002105352993176512166420085064452431753181365805833548922676748890412420332694609096819779765600345216390394307257556778223743443958983962113723193551247897995423762348092103893683711373897139168289420267660611409947644548715007787832959251167553175096639147674776117973100447903243626902892382263767591328038235708593401563793019418124453166386471792468421003855894206584354731489363668134077946203546067237235657746480296831651791790385981397558458905904641394246279782746736009101862366868068363411976388557697921914317179371206444085390779634831369723370050764678852846779369497232374780691905280992368079762747352245519607264154197148958896955661904214909184952289996142050604821608749900417845137727596903100452350067551305840998280482775209883278873071895588751811462342517825753493814997918418437455474992422243919549967371964423457440287296270855605850954685912644303354019058716916735522533065323057755479803668782530250381988211075034655760123250249441440684338450953823290346909689822527652698723502872312570305261196768477498898020793071808758903381796873868682378850925211629392760628685222745073544116615635557910805357623590218023715832716372532519372862093828545797325567803691998051785156065861566888871461130133522039321843439017964382030080752476709398731341173062430275003111954907627837208488348686666904765710656917706470924318432160155450726007668035494571779793129212242101293274853237850848806152774463689243426683295884648680790240363097015218347966399166380090370628591288712305133171869639679922854066493076773166970190482988828017031016891561971986279675371963020932469337264061317786330566839383989384760935590299287963546863848119999451739548405124001514033096695605580766121611440638549988895970262425133218159848061727217163487131806481686766843789971465247903534853837951413845786667122427182648989156599529647439419553785158561613114023267303869927565170507781782366447011340851258178534101585950081423437703778492347448230473897643505773957385504112182446690585033823747175966929091293693201061858670141209129091452861292276276012910624071241165402089161606944423826245461608594935732481900198240862293409442308800690019550831630479883000579884614601906961723011354449804576794339826056986957680090916046848673419723529694384653809400377218545075269148766129194637039408225515678013332188074997217667835494940043014917877438354902673107453164275280010251040360040937308738925689475725131639032011979009642713542292894219059352972933151112376197383814925363288670995556269447804994925086791728136906693249507115097807060365872110998210768336078389508724184863597285987736912073071980137162590779664675033429119327855307827174673749257462983054221631797527009987595732460222197367608440973488211898471439302051388806818521659685873672383828021329848153410204926607710971678268541677584421695238011784351386047869158787156634630693872428067864980320063293435887574745859067024988485742353278548704467544298793511583587659713711677065792371199329419372392720321981862269890024832348999865449339856339220386853162641984444934998176248821703154774794026863423846665361147912580310179333239849314145158103813724371277156031826070213656189218428551171492579367736652650240510840524479280661922149370381404863668038229922105064658335083314946842545978050497021795217124947959575065471749872278802756371390871441004232633252611825748658593540667831098874027223327541523742857750954119615708541514145110863925049204517574000824797900817585376961462754521495100198829675100958066639531958106704159717265035205597161047879510849900587565746603225763129877434317949842105742386965886137117798642168190733367414126797929434627532307855448841035433795229031275545885872876848846666666475465866905332293095381494096702328649920740506658930503053162777944821433383407283155178707970906458023827141681140372968356084617001053870499079884384019820875585843129082894687740533946763756846924952825251383026364635539377880784234770789463152435704464616uwb;
> -constexpr unsigned _BitInt(16319) b
> - = 20129744567093027275741005070628998262449166046517026903695683755854448756834360166513132405078796314602781998330705368407367482030156637206994877425582250124595106718397028199112773892105727478029626122540718672466812244172521968825004812596684190534400169291245019886664334632347203172906471830047918779870667296830826108769036384267604969509336398421516482677170697323144807237345130767733861415665037591249948490085867356183319101541167176586195051721766552194667530417142250556133895688441663400613014781276825394358975458967475147806589013506569415945496841131100738180426238464950629268379774013285627049621529192047736803089092751891513992605419086502588233332057296638567290306093910878742093500873864277174719410183640765821580587831967716708363976225535905317908137780497267444416760176647705834046996010820212494244083222254037700699529789991033448979912128507710343500466786839351071045788239200231971288879352062329627654083430317549832483148696514166354870702716570783257707960927427529476249626444239951812293100465038963807939297639901456086408459677292249078230581624034160083198437374539728677906306289960873601083706201882999243554025429957091619812945018432503309674349427513057767160754691227365332241845175797106713295593063635202655344273695438810685712451003351469460085582752740414723264094665962205140763820691773090780866423727990711323748512766522537850976590598658397979845215595029782750537140603588592215363608992433922289542233458102634259275757690440754308009593855238137227351798446486981151672766513716998027602215751256719370429397129549459120277202327118788743080998483470436192625398340057850391478909668185290635380423955404607217710958636050373730838469336370845039431945543326700579270919052885975364141422331087288874462285858637176621255141698264412903522678033317989170115880081516284097559300133507799471895326457336815172421155995525168781635131143991136416642016744949082321204689839861376266795485532171923826942486502913400286963940309484507484129423576156798044985198780159055788525538310878089397895175129162099671894337526801235280427428321205321530735108239848594278720839317921782831352363541199919557577597546876704462612904924694431903072332864341465745291866718067601041404212430941956177407763481845568339170224196193106463030409080073136605433869775860974939991008596874978506245689726966715206639438259724689301019692258116991317695012205036157177039536905494005833948384397446492918129185274359806145454148241131925838562069991934872329314452016900728948186477387223161994145551216156032211038319475270853818660079065895119923373317496777184177315345923787700803986965175033224375435249224949151191006574511519055220741174631165879299688118138728380219550143006894817522270338472413899079751917314505754802052988622174392135207139715960212346858882422543222621408433817817181595201086403368301839080592455115463829425708132345811270911456928961301265223101989524481521721969838980208647528038509328501705428950749820080720418776718084142086501267418284241370398868561282277848391673847937247873117719906103441015578245152673184719538896073697272475250261227685660058944107087333786104761624391816175414338999215260190162551489343436332492645887029551964578826432156700872459216605843463884228343167159924792752429816064841479438134662749621639560203443871326810129872763539114284811330805213188716333471069710270583945841626338361700846410927750916663908367683188084193258384935122236639934335284160522042065088923421928660724095726039642836343542211473282392554371973074108770797447448654428325845253304889062021031599531436606775029315849674756213988932349651640552571880780461452187094400408403309806507698230071584809861634596000425300485805174853406774961321055086995665513868382285048348264250174388793184093524675621762558537763747237314473883173686633576273836946507237880619627632543093619281096675643877749217588495383292078713230253993525326209732859301842016440189010027733234997657748351253359664018894197346327201303258090754079801393874104215986193719394144148559622409051961205332355846077533183278890738832391535561074612724819789952480872328880408266970201766239451001690274739141595541572957753788951050043026811943691163688663710637928472363177936029259448725818579129920714382357882142208643606823754520733994646572586821541644398149238544337745998203264678454665487925173493921777764033537269522992103115842823750405588538846833724101543165897489915300004787110814394934465518176677482202804123781727309993329004830726928892557850582806559007396866888620985629055058474721708813614135721948922060211334334572381348586196886746758900465692833094336637178459072850215866106799456460266354416689624866015411034238864944123721969568161372557215009049887790769403406590484422511214573790761107726077762451440539965975955360773797196902546431341823788555069435728043202455375041817472821677779625286961992491729576392881089462100341878uwb
> - / 42uwb;
> -constexpr unsigned _BitInt(16319) c
> - = 26277232382028447345935282100364413976442241120491848683780108318345774920397366452596924421335605374686659278612312801604887370376076386444511450318895545695570784577285598906650901929444302296033412199632594998376064124714220414913923213779444306833277388995703552219430575080927111195417046911177019070713847128826447830096432003962403463656558600431115273248877177875063381111477888059798858016050213420475851620413016793445517539227019973682699447952322388748860981947593432985730684746088183583225184347825110697327973294826205227564425769950503423435597165969299975681406974619941538502827193742760455245269483134360940023933986344217577102114800134253879530890064362520368475535738854741806292542624386473461274620987891355541987873664157022522167908591164654787501854546457737341526763516705032705254046172926268968997302379261582933264475402063191548343982201230445504659038868786347667710658240088825869575188227013335559298579845948690316856611693386990691782821847535492639223427223360712994033576990398197160051785889033125034223732954451076425681456628201904077784454089380196178912326887148822779198657689238010492393879170486604804437202791286852035982584159978541711417080787022338893101116171974852272032081114570327098305927880933671644227124990161298341841320653588271798586647749346370617067175316167393884414111921877638201303618067479025167446526964230732790261566590993315887290551248612349150417516918700813876388862131622594037955509016393068514645257179527317715173019090736514553638608004576856188118523434383702648256819068546345047653068719910165573154521302405552789235554333112380164692074092017083602440917300094238211450798274305773890594242881597233221582216100516212402569681571888843321851284369613879319709906369098535804168065394213774970627125064665536078444150533436796088491087726051879648804306086489894004214709726215682689504951069889191755818331155532574370572928592103344141366890552816031266922028893616252999452323417869066941579667306347161357254079241809644500681547267163742601555111699376923690500014172294337681007418735910341792131377741308586228268385825579773985382339854821729670313925456724869607910114957040810377671394779834675225181536565444830551924417794139736686594557660483813045525089850285373756403594900392226296617656189774567019900237644329891280192776067340109751100025818473155267503490628146429306493520953677660612094758307190480072039980575323428994009982415676875786338343681850769724258724712947129844865182522700509869810541147515988955709784790248266593581532414091983670376426534289079098742549505127694160521110700035496658932724007621759500091227595477831200325335242614162624218010753586306794482732500765136299548052958345872488446969032973871418565484570096440609125401439516349061951073344772753817168731533186740449206533184858409824331269879276752302819075938894191764603880669059804914705202932220114574769307945938446355744093058483466098741029671133305308451601510124097336668044362140994842230895354232007936193610666215236351383330719496758577095102466235782700820575938453736277546445932135116947993404356975890051717304128693125699951445791328843668647245439797933691355015781238038148597339831348341049751957204680813855138272253234219030458164179195368888878989362640509486440530112337687890165646824152338885218611665567933423652236621168833497594762922586523151554244316284075364923316223457798336995440229801638249044555841786652868778333857626201712694823945146208412572567947403078655159448178467488335673853886982143607843369103504905837049147006413324087204923968347162406372146304110247436210704329838033967549296094708909042352807942165389054391217609084676765464997803900415653278041220586434133698802658726748950122980183615091029049242919298428066745937148593879994539254240070220900694662200741796632687373414952817000938093930497338259168439649970963774406833411431113922194082765390241161715106142638681072839764035976877223152727829248475639970029777900589595383604989099084081251802305001465530685587689066710306032849298712531664047230963409638484129598076118133347670029704549206295184751171783054889490211218045322681317529569999778899567668829982207035948032411418382057247326141072264502161892285323531743728756335449414720326329614400327415751813608405440522389476951223717685562226240221655814783640319063683104993438443847695342093582440489676230855515734722099028773790309518629302472390856918840009781940193713784596688294176313226823907143925396584175086934911386332502448539920116580493698106175151294846382915609543814748269873022997601962804377576934064368480060369871027634248583037300264157126892396407333810094970488786868749240778818119777818968060847669660858189435863648299750130319878885182309492320093569553086644726783916663680961005542160003603514646606310756647257217877792590840884087816175376150368236330721380807047180835128240716072193739218623529235235449408073833764uwb
> - >> 171;
> -static_assert (a == 10403542085759133691203342137159028259461894955438331210801665800234672962180907518788681055608925051917190662144445433835595489501570265148539013616306519011285861864113638610998587283343748668959870044400340187367869274012726759732348878437230149364081610941398977036594823591463255731808309715219781556045092524781748798096243155527048746090614751043610821560662864236720952557147844731917800712343725546175449104075627616077829385396994452199410766816558008090921987787438967590914249326913953731957899714113110918563882837045448642562338486517475793442626878243475178869958697311252767202125088496235928130685145568023992654921893286093433280015789621699281948053130963767216950901322064090115301029360256916486236324346980555378227825665231041206505932451054100655891377307183657244188881780309602697733965633806548575793711470844175477213922050584861112947113328821094578714380110663964395764964375008963336325761662071121014767368961020824065775639039724097407257977371623360602667242992626829630277589757195892131842788347638167481783472539736593840645020141666099662762763659119482517961624374850646183224354529879255694192077493038699570091875155722960929748259201284457182471153956119946261637096783796538046622701136421992223281799392319105563566498086105138357131671079600937329401554014025354725298453142629483842874038291307431207948198280389112036878226218928165845324560374437065373122000792930554833265840423016148390974876479752688661617125284208020330726704780298561478529279775092768807953202013307072084373090254748865483609183726295735240865516817482898554990450888147008484162850924835809973020042760450232447237837196378388135483084055028396408249214425019231777824054821326738728924661602608905318664721047678808734917923923121217803736039325080641571812479260200189082647677675380297657174607422686495562781202604884582727406463545308236800937463493199421020490845203940782000643133713413924683795888948837880891750307666957538835987772265423203470320354145742841869795472799186154631385288573730129094228733379855432514817031425884584962254283999586850250406406681047191820544352342046667950146374296364655891915135310082529994904874562441551527081311638121766367661807914647092917287784017613115795691373814041086838720316968010349263776702775009771662737124600992709418630470128579612748138807983617697487500079502839532266478317788699680283395230308668613168191852557234122469290277763000256531531071762280960597416576452124575885006363492171314551026369237325119844147154972582617127637240421323781252125819313268498872048683068789228870983086306586111793007178693570562554975762384431236664489360478109692520183356042112794589756922036102025380888246082763911915622037570736969677850621708281909652070776450422110772285659921383413532725137107621514770958361581240471968542997294446402584844918179956881219978405772785713402046471903103404871352324277109089891640558983922159359479964068994923538490500501798825116238188381267330618026093160290205596669795981834842352271011063939632623926629960113926326029952143452354640614061049438932665467928443113232214498101774523178129020155017228802221901469548072234073334681052461327832268955923701109732874360984002493130025470753861967432493102395766279717815113135763810886216491770265724160887688887515282293447287121039545323777928286876711267049135547760773655845950622676327972280622345486253084626121247885891757458308974259466441284967765824561478351421051923081842594791616249682768594796413184742007504540382141773556098929461233842797978566466734240436032269122908057438314319410489575244845739320693764798687398942275314333361838560358278583766983210126081046020231469705836544611252075187733112560778125560225565803349953151880800601890382648216375737077015744684142132303864494083237680306898134033570758401131735819237730280209424231954121970154195575070728876653187928423918894211617093567094857926079694003950142962763480728907322409338954277493711834363423032309296862081371923061150409402403668284066920335645815769603890931600189625120845560771835017710222988445713995722670892970377791415975424998772977793133120924108755323766471601770964843725827421304729349535336212587039242582503381150992918495310760366078232133800372960134691178665615437284018675587037783965019497398984583781291648236566997741116811234934754542646608973862932050896956712947890625239848619289180051302224085308716715734850608995498117691600907423641124622236235949675965926735290984369155077055324647942699875972019355174794849379024365265476001505043957802797349447782453767742359446787304217770032967959809288342189111153359045680464231699344620995535326063943372491385550455978845273436611631962336651743357242055102619760848116407351488643448217122169718350824452317641509534606434395208225350712889271762643740106849245478364448395994915755050465135468245061369394410933866013068008514339549345174558881983866497072827311379042433413uwb);
> -static_assert (b == 479279632549833982755738215967357101486884905869453021516563898948915446591294289678884104882828483681018619007873937343032559095956110409690354224418625002966550159961834004740780330764422082810229193393826635058733624861250523067262019347540099774628575459315357616349150824579695313640630281667807589996920649924543478780215152006371546893079438057655154349456445174360590648508217399231758605134881847410713059287758746575793311941456361347290358374327775052253988819455767870384140373534325319062214637649448223675213701403987503519204500321584986093940400979311922337629196153927395934961423190792514929752893552191612781025930779806940809347748073488156862698382316586632554531097474068541478416687472958980350462147229542043370966376951612302580094672036569174235908042392792082009922861348754900810642762162386011767716267196524707159512614047405558309045526869231198654773018734270263596328291409529332649735222668150705420335319769465472201979730869384913211207207537399601373999069700655463720229201053332186006978582500927709712840419997653716343058563745053549481680514857956192457105651774755444712054911665735085740088242901976172465572034046597419519355833772202459754151176845548994456208445029222984100996313709454921745133168181790539412958897510447873469344071508368320478228160779533683887240349189576312875329064089835494782533898285493126755916970631488996451823585682342809043933704643566255965170014371156957508657356962712435465291272811967482363708516439065578762133187029479457794090439202070979801732536040880905419100375029921889772128503084510931435171483979018779597166630558819909348223770001377390273307373052030729413819617985823981374070443715485088829487365151686786653141560555397632839783786973475603908129103121125925582435377586599443363217659482486021512444715078999742145616192417054383275221431750185701711793487079447980295741809417265923372265027237884200396238493927359102885825948568128006352273465051712472070059202450319054451522388321059702003081513718019001071076161432358471155369959782811652330837503075288087426055655400029411438748293362031465017502577139252244731448555188613876936961036695236179942323751116112011014592974397486473882674592008130136792663493287323834319147915022427528033518178139180198551672004671264439595962120954122300129377851806213689047404966592261393005849755403969409681891387136302126214754577574214078992738385834194218500941354892714424617818676129678402812599649389519193939384481931712519965763571236544579269391714688112594004439937791027666527275028956096005024721892268353662349049501568931426746983749923266289936079664852088114380642027976981532748458314879741695023966059798072743350980348361092364278288527112580481417860547783209941006436630295569025708378983678708447667928300527961717504931897999052674925211486251029110033534138519456704647644914365911948549537915597987234033945431722519315974082307832411934886264333083916226707665948547147824941143774031630992986403589281430493343304207573431954440506367102005746914258775268625663056944615427077330312326664431034309894720122682694874274735620802316011315482410182991906165335883031756812018133914090861319389023790839528337203606889129436487920140167370284870924438860873830296648014424844378195912932551426780779819757525353368558050825303562419989528653425507781193568399131883673447888828695552112293654073088339775808234324436627659543962164946450396759723040075906766506152022264815158093674649622869572430121164843379253826764183953324829436751005035078152203675523168431161209463034491772102996315554878311000500752369796109685119745615468446576523546008325039060775520970963367909216533343057221662059707100715990114520515109428581554773471551782223970832412406073499896797949247197263055911053575580685552002226777990994346631851517791364630330551754443656577948498726362806681419705536740324268597539896282803552799726080554573302695958428417269671660306173853381343814024048279362738039470198839365706286164147555864933364363287875097138128425573909904433183795098670203800533548856219174579901097084123411402160448390274656216062207733804522678116007830485911118338137291415500040244636646228465275546613185451215477214924093897408659253897872331630294361379429268082112519489979283826532913282908147824847781517964779380824918394924322420104717839012960422523766744397106063463998218416521947089619846125464833145312281971994057275917591591279145274837283273569411904875883590818927011083766111368623876288661469697856984023924541117354584710728162060928747544449729071086406072820826707352705098469570212430005031769870770984490147544922541878582516496026055634218534739829767044431114272772863484628968800592047985977005687260574374332608765746965647976405949709304033414442630581488362251756922883517287565772653346189666094175256518980878632057889091042584644510374477219106080358138511257658994752983022904583136418485544787844335722425uwb);
> -static_assert (c == 8779107423697189837569390605084121179785924908521985744210325591223667924519652625818373720019509245903707006132632572173386255064201355735198759440688262514780984111791042739566301784897316373994922192050963272288434060342288511971569697680026523760811225516430052699754044682818892679819131995600216280966062736732384732411361657444399695883865096103428759622813867735547259978529319436889864013687219390567604283318011100799953451520968441264866031813954488628058475114348729275414143158917874709599556247183695853838552321088973445876088042556810479910661449374661999675082811103814453353294194886612961492737263277271551889038610730760478459569256149321998350414023066363814989311109728311712989022996247280182587921449185353922885937877604500400738774240008709945289791605011177739657720181601453512259882004564462415828652714904289727235210537277721389816687643366145200001177712112197515695578887483792988755435401388456145854488880537088360397994643216014828495662460205686448548113229841097955613958440901375416256532864511852298696327611517233241324799070919491286426159788792631723833717451538043437364017185237743182402835670087683125602640318887451596650323528720128188198547270462971612157603487958526705005955580409441670771849388016438035850194585870327013409236236730914217722025655319472231141666790287955685713636274653565577454275838590350806168639165264676470440930351612992518904664647715805865941038423768376846697817543122409517591717292238745940345900530458551468519245767864531742102178628854376524513367983209186974575765707273973775386840081238803880335095740836386527208267311808973522450391189055739828936937359693167240524660624945856907042041257347192086984009640984509322622503890256046324768341632643546455779035376002061691113121234273164937984171774242327769915688742564049454163158318121818582764775268091292470889088445575108022688069271697198283151469645400870507006663799330661702702747443254220478311056407220749648103123435473381583520873055218734115120978678440455896458852497569989966723235965608706826593607128847630137618509151255834742636438796285569873869967729341871213521030011427372987388572674228441333458857512226049283243347521457804912008781036966786374760325341492033297848368160903260470019067535330611645909560888797451907088389764190403007998305168673029446934012245138838180596098559442570696150011296218144186387024615885302290744905340666905921743970013779813332493771192048043297281423248489056841417013807670308191095732464221451376997270745468459702152796818222745730565721202663103043121160101459833683249558684459108862536961994308535039970814557821268170388745941980378838969910592895670554291811739768771829941043857819603751246957962236091154755893962038363120690483862423001038948620681611253867149296463690417828034303547922792249098522404751428960713875050463906134150846089705714470303918299012691600285355859412924847760497076978432722446602521825089097454542343354847347396045079587757210635356999268706465425788833311190517623061860675230010994127196459030322166751571656642321690787471906609473496034789643710478162255664092991251446787887635351852933826820719781733754578161073401362668109819113924252291125741395271474342305574536974918273938513597418963787308994593434191890687730302495910686072338836413159162281072263542758257699588089838677469397467899348065293581751035844389848387161847435160327276066603683131703246410409122832793376751512688745195564021646069245992363396468100513536211651450610523315211697125774638845313243973083536417692075962486918844667432144353019722959653638632948294049984266861870151255315023346724671430499257993958049088066160870545025276597975154855537620265690354041028742742755074396597631965320380782500944568424053420038357524917125099241334990032189526465838192972110970861380060986802081948044345526414857158569939005895236672306344348212805851269920711043891306875873016330601673973249327072503571873518366750575070091051288590764788630190966776854031578939382690709022667421734442841784680826494146620589862829612704279521637740421694195051400095278084716974624615208392585573200182664157066813849346058321763156523965698465901396025152159642193562900743812715885811057212579017860488539960334406702752688595217360219470968738009774067915037157027492209108801337707562571266897723911401203374308490793226200974353356835311756384895692909802720948968131504604855466961987314701846460342135201914356152591684810924688350929140120187693089324255924634578576427004426339299493833434502951593902551451002292839635000904253250021884625417628756439862964325562720709528784964868687330847894476999577326582332350213148861205413652337499383416531545707272907994755638339630221576707954964236210962693804639714754668679841134928393081284209158098202683744650513918920168330598432362389777471870631039488408769354863001967531729415686631571754649uwb);
> +constexpr unsigned _BitInt(16319) a = 468098567701677261276215481936770442254383643766995378241600227179396283432916865881332215867106489159251577495372085663487092317743244770597287633199005374998455333587280357490149993101811392051483761495987108264964738337118155155862715438910721661230332533185335581757600511846854115932637261969633134365868695363914570578110064471868475841348589366933645410987699979080140212849909081188170910464967486231358935212897096260626033055536141835599284498474737858487658470115144771923114826312283863035503700600141440724426364699636330240414271275626021294939422483250619629005959992243418661230122132667769781183790338759345884903821695590991577228520523725302048215447841573113840811593638413425054938213262961448317898574140533090004992732688525115004782973893244091427000396890427152225308661078954671066069234453757593181753900865203439035402480306413572239610467142591920809187367438071170100969567440044691427487959785637338381651309916782063670286046547585240837892307170928849485877186793280707600840866783471799148179250818387716183127323346199533387463363442356218803779697005759324410376476855222420876262425985571982818180353870410149824214544313013285199544193496624223219986402944849622489422007678564946174797892795089330899535624727777525330789492703574564112252955147770942929761545604350869404246558274752353510370157229485004402131043153454290397929387276374054938578976878606467217359398684275050519104413914286024106808116340712273059427362293703151355498336213170698894448405369398757188523160460292714875857879968173578328191358215972493513271297875634400793301929250052822258636015650857683023900709845410838487936778533250407886180954576046340697908584020951295048844938047865657029072850797442976146895294184993736999505485665742811313795405530674199848055802759901786376822069529342971261963119332476504064285869362049662083405789828433132154933242817432809415810548180658750393692272729586232842065658490971201927780014258815333115459695117942273551876646844821076723664040282772834511419891351278169017103987094803829594286352340468346618726088781492626816188657331359104171819822673805856317828499039088088223137258297373929043307673570090396947789598799922928643843532617012164811074618881774622628943539037974883812689130801860915090035870244061005819418130068390986470314677853605080103313411837904358287837401546257413240466939893527508931541065241929872307203876443882106193262544652290132364691671910332006127864146991404015366683569317248057949596070354929361158326955551600236075268435044105880162798380799161607987365282458662031599096921825176202707890730023698706855762932691688259365358964076595824577775275991183149118372047206055118463112864604063853894820407249837871368934941438119680605528546887256934334246075596746410297954458632358171428714141820918183384435681332379317541048252391710712196623406338702061195213724569303285402242853671386113148211535691685461836458295037538034378318055108240082414441205300401526732399959228346926528586852743389490978734787926721999855388794711837164423007719626109179005466113706450765269687580819822772189301084503627297389675134228222337286867641110511061980231247884533492442898936743429641958314135329073406495776369208158032115883850691010569048983941126771477990976092252391972812691669847446798507244106121667885423025613769258102773855537509733295805013313937402282804897213847221072647111605172349464564089914906493508133855389627177663426057763252086286325343811254757681803068276278048757997425284334713190226818463023074461900176958010055572434983135171145365242339273326984465181064287264645470832091115100640584104375577304056951969456200138485313560009272338228103637763863289261673258726736753407044143664079479496972580560534494806170810469304773005873590626280072387999668522546747985701599613975101188543857852141559251634058676718308000324869809628199442681565615662912626022796064414496106344236431285697688357707992989966561557171729972093533007476947862215922583204811189015550505642082475400647639520782187776825395598257421714106473869797642678266380755873356747812273977691604147842741151722919464734890326772594979022403228191075586910464204870254674290437668861177639713112762996390246102030994917186957826982084194156870398312336059100521566034092740694642613192909850644003933745129291062576341213874815510099835708723355432970090139671120232910747665906191360160259512198160849784197597300106223945960886603127136037120000864968668651452411048372895607382907494278810971475663944948791458618662250238375166523484847507342040066801856222328988662049579299600545682490412754483621051190231623196265549391964259780178070495642538883789503379406531279338866955157646654913405181879254189185904298325865503395688786311067669273609670603076582607253527084977744533187145642686236350165593980428575119329911921382240780504527422630654086941060242757131313184709635181001199631726283364158943337968797uwb;
> +constexpr unsigned _BitInt(16319) b = 9935443518057456429927126655222257817207511311671335832560065573055276678747990652907348839741818562757939084649073348172108397183827020377941725983107513636287406530526358253508437290241937276908386282904353079102904535675608604576486162998319427702851278408213641454837223079616401615875672453250148421679223829417834227518133091055180270249266161676677176149675164257640812344297935650729629801878758059944090168862730519817203352341458310363811482318083270232434329317323822818991134500601669868922396013512969477839456472345812312321924215241849772147687455760224559240952737319009348540894966363568158349501355229264646770018071590502441702787269097973979899837683122194103110089728425676690246091146993955037918425772840022288222832932542516091501149477160856564464376910293230091963573119230648026667896399352790982611957569978972038178519570278447540707502861678502657905192743225893225663994807568918644898273702285483676385717651104042002105352993176512166420085064452431753181365805833548922676748890412420332694609096819779765600345216390394307257556778223743443958983962113723193551247897995423762348092103893683711373897139168289420267660611409947644548715007787832959251167553175096639147674776117973100447903243626902892382263767591328038235708593401563793019418124453166386471792468421003855894206584354731489363668134077946203546067237235657746480296831651791790385981397558458905904641394246279782746736009101862366868068363411976388557697921914317179371206444085390779634831369723370050764678852846779369497232374780691905280992368079762747352245519607264154197148958896955661904214909184952289996142050604821608749900417845137727596903100452350067551305840998280482775209883278873071895588751811462342517825753493814997918418437455474992422243919549967371964423457440287296270855605850954685912644303354019058716916735522533065323057755479803668782530250381988211075034655760123250249441440684338450953823290346909689822527652698723502872312570305261196768477498898020793071808758903381796873868682378850925211629392760628685222745073544116615635557910805357623590218023715832716372532519372862093828545797325567803691998051785156065861566888871461130133522039321843439017964382030080752476709398731341173062430275003111954907627837208488348686666904765710656917706470924318432160155450726007668035494571779793129212242101293274853237850848806152774463689243426683295884648680790240363097015218347966399166380090370628591288712305133171869639679922854066493076773166970190482988828017031016891561971986279675371963020932469337264061317786330566839383989384760935590299287963546863848119999451739548405124001514033096695605580766121611440638549988895970262425133218159848061727217163487131806481686766843789971465247903534853837951413845786667122427182648989156599529647439419553785158561613114023267303869927565170507781782366447011340851258178534101585950081423437703778492347448230473897643505773957385504112182446690585033823747175966929091293693201061858670141209129091452861292276276012910624071241165402089161606944423826245461608594935732481900198240862293409442308800690019550831630479883000579884614601906961723011354449804576794339826056986957680090916046848673419723529694384653809400377218545075269148766129194637039408225515678013332188074997217667835494940043014917877438354902673107453164275280010251040360040937308738925689475725131639032011979009642713542292894219059352972933151112376197383814925363288670995556269447804994925086791728136906693249507115097807060365872110998210768336078389508724184863597285987736912073071980137162590779664675033429119327855307827174673749257462983054221631797527009987595732460222197367608440973488211898471439302051388806818521659685873672383828021329848153410204926607710971678268541677584421695238011784351386047869158787156634630693872428067864980320063293435887574745859067024988485742353278548704467544298793511583587659713711677065792371199329419372392720321981862269890024832348999865449339856339220386853162641984444934998176248821703154774794026863423846665361147912580310179333239849314145158103813724371277156031826070213656189218428551171492579367736652650240510840524479280661922149370381404863668038229922105064658335083314946842545978050497021795217124947959575065471749872278802756371390871441004232633252611825748658593540667831098874027223327541523742857750954119615708541514145110863925049204517574000824797900817585376961462754521495100198829675100958066639531958106704159717265035205597161047879510849900587565746603225763129877434317949842105742386965886137117798642168190733367414126797929434627532307855448841035433795229031275545885872876848846666666475465866905332293095381494096702328649920740506658930503053162777944821433383407283155178707970906458023827141681140372968356084617001053870499079884384019820875585843129082894687740533946763756846924952825251383026364635539377880784234770789463152435704464616uwb;
> +constexpr unsigned _BitInt(16319) c = a + b;
> +constexpr unsigned _BitInt(16319) d = 20129744567093027275741005070628998262449166046517026903695683755854448756834360166513132405078796314602781998330705368407367482030156637206994877425582250124595106718397028199112773892105727478029626122540718672466812244172521968825004812596684190534400169291245019886664334632347203172906471830047918779870667296830826108769036384267604969509336398421516482677170697323144807237345130767733861415665037591249948490085867356183319101541167176586195051721766552194667530417142250556133895688441663400613014781276825394358975458967475147806589013506569415945496841131100738180426238464950629268379774013285627049621529192047736803089092751891513992605419086502588233332057296638567290306093910878742093500873864277174719410183640765821580587831967716708363976225535905317908137780497267444416760176647705834046996010820212494244083222254037700699529789991033448979912128507710343500466786839351071045788239200231971288879352062329627654083430317549832483148696514166354870702716570783257707960927427529476249626444239951812293100465038963807939297639901456086408459677292249078230581624034160083198437374539728677906306289960873601083706201882999243554025429957091619812945018432503309674349427513057767160754691227365332241845175797106713295593063635202655344273695438810685712451003351469460085582752740414723264094665962205140763820691773090780866423727990711323748512766522537850976590598658397979845215595029782750537140603588592215363608992433922289542233458102634259275757690440754308009593855238137227351798446486981151672766513716998027602215751256719370429397129549459120277202327118788743080998483470436192625398340057850391478909668185290635380423955404607217710958636050373730838469336370845039431945543326700579270919052885975364141422331087288874462285858637176621255141698264412903522678033317989170115880081516284097559300133507799471895326457336815172421155995525168781635131143991136416642016744949082321204689839861376266795485532171923826942486502913400286963940309484507484129423576156798044985198780159055788525538310878089397895175129162099671894337526801235280427428321205321530735108239848594278720839317921782831352363541199919557577597546876704462612904924694431903072332864341465745291866718067601041404212430941956177407763481845568339170224196193106463030409080073136605433869775860974939991008596874978506245689726966715206639438259724689301019692258116991317695012205036157177039536905494005833948384397446492918129185274359806145454148241131925838562069991934872329314452016900728948186477387223161994145551216156032211038319475270853818660079065895119923373317496777184177315345923787700803986965175033224375435249224949151191006574511519055220741174631165879299688118138728380219550143006894817522270338472413899079751917314505754802052988622174392135207139715960212346858882422543222621408433817817181595201086403368301839080592455115463829425708132345811270911456928961301265223101989524481521721969838980208647528038509328501705428950749820080720418776718084142086501267418284241370398868561282277848391673847937247873117719906103441015578245152673184719538896073697272475250261227685660058944107087333786104761624391816175414338999215260190162551489343436332492645887029551964578826432156700872459216605843463884228343167159924792752429816064841479438134662749621639560203443871326810129872763539114284811330805213188716333471069710270583945841626338361700846410927750916663908367683188084193258384935122236639934335284160522042065088923421928660724095726039642836343542211473282392554371973074108770797447448654428325845253304889062021031599531436606775029315849674756213988932349651640552571880780461452187094400408403309806507698230071584809861634596000425300485805174853406774961321055086995665513868382285048348264250174388793184093524675621762558537763747237314473883173686633576273836946507237880619627632543093619281096675643877749217588495383292078713230253993525326209732859301842016440189010027733234997657748351253359664018894197346327201303258090754079801393874104215986193719394144148559622409051961205332355846077533183278890738832391535561074612724819789952480872328880408266970201766239451001690274739141595541572957753788951050043026811943691163688663710637928472363177936029259448725818579129920714382357882142208643606823754520733994646572586821541644398149238544337745998203264678454665487925173493921777764033537269522992103115842823750405588538846833724101543165897489915300004787110814394934465518176677482202804123781727309993329004830726928892557850582806559007396866888620985629055058474721708813614135721948922060211334334572381348586196886746758900465692833094336637178459072850215866106799456460266354416689624866015411034238864944123721969568161372557215009049887790769403406590484422511214573790761107726077762451440539965975955360773797196902546431341823788555069435728043202455375041817472821677779625286961992491729576392881089462100341878uwb;
> +constexpr unsigned _BitInt(16319) e = d / 42uwb;
> +constexpr unsigned _BitInt(16319) f = 26277232382028447345935282100364413976442241120491848683780108318345774920397366452596924421335605374686659278612312801604887370376076386444511450318895545695570784577285598906650901929444302296033412199632594998376064124714220414913923213779444306833277388995703552219430575080927111195417046911177019070713847128826447830096432003962403463656558600431115273248877177875063381111477888059798858016050213420475851620413016793445517539227019973682699447952322388748860981947593432985730684746088183583225184347825110697327973294826205227564425769950503423435597165969299975681406974619941538502827193742760455245269483134360940023933986344217577102114800134253879530890064362520368475535738854741806292542624386473461274620987891355541987873664157022522167908591164654787501854546457737341526763516705032705254046172926268968997302379261582933264475402063191548343982201230445504659038868786347667710658240088825869575188227013335559298579845948690316856611693386990691782821847535492639223427223360712994033576990398197160051785889033125034223732954451076425681456628201904077784454089380196178912326887148822779198657689238010492393879170486604804437202791286852035982584159978541711417080787022338893101116171974852272032081114570327098305927880933671644227124990161298341841320653588271798586647749346370617067175316167393884414111921877638201303618067479025167446526964230732790261566590993315887290551248612349150417516918700813876388862131622594037955509016393068514645257179527317715173019090736514553638608004576856188118523434383702648256819068546345047653068719910165573154521302405552789235554333112380164692074092017083602440917300094238211450798274305773890594242881597233221582216100516212402569681571888843321851284369613879319709906369098535804168065394213774970627125064665536078444150533436796088491087726051879648804306086489894004214709726215682689504951069889191755818331155532574370572928592103344141366890552816031266922028893616252999452323417869066941579667306347161357254079241809644500681547267163742601555111699376923690500014172294337681007418735910341792131377741308586228268385825579773985382339854821729670313925456724869607910114957040810377671394779834675225181536565444830551924417794139736686594557660483813045525089850285373756403594900392226296617656189774567019900237644329891280192776067340109751100025818473155267503490628146429306493520953677660612094758307190480072039980575323428994009982415676875786338343681850769724258724712947129844865182522700509869810541147515988955709784790248266593581532414091983670376426534289079098742549505127694160521110700035496658932724007621759500091227595477831200325335242614162624218010753586306794482732500765136299548052958345872488446969032973871418565484570096440609125401439516349061951073344772753817168731533186740449206533184858409824331269879276752302819075938894191764603880669059804914705202932220114574769307945938446355744093058483466098741029671133305308451601510124097336668044362140994842230895354232007936193610666215236351383330719496758577095102466235782700820575938453736277546445932135116947993404356975890051717304128693125699951445791328843668647245439797933691355015781238038148597339831348341049751957204680813855138272253234219030458164179195368888878989362640509486440530112337687890165646824152338885218611665567933423652236621168833497594762922586523151554244316284075364923316223457798336995440229801638249044555841786652868778333857626201712694823945146208412572567947403078655159448178467488335673853886982143607843369103504905837049147006413324087204923968347162406372146304110247436210704329838033967549296094708909042352807942165389054391217609084676765464997803900415653278041220586434133698802658726748950122980183615091029049242919298428066745937148593879994539254240070220900694662200741796632687373414952817000938093930497338259168439649970963774406833411431113922194082765390241161715106142638681072839764035976877223152727829248475639970029777900589595383604989099084081251802305001465530685587689066710306032849298712531664047230963409638484129598076118133347670029704549206295184751171783054889490211218045322681317529569999778899567668829982207035948032411418382057247326141072264502161892285323531743728756335449414720326329614400327415751813608405440522389476951223717685562226240221655814783640319063683104993438443847695342093582440489676230855515734722099028773790309518629302472390856918840009781940193713784596688294176313226823907143925396584175086934911386332502448539920116580493698106175151294846382915609543814748269873022997601962804377576934064368480060369871027634248583037300264157126892396407333810094970488786868749240778818119777818968060847669660858189435863648299750130319878885182309492320093569553086644726783916663680961005542160003603514646606310756647257217877792590840884087816175376150368236330721380807047180835128240716072193739218623529235235449408073833764uwb;
> +constexpr unsigned _BitInt(16319) g = f >> 171;
> +static_assert (c == 10403542085759133691203342137159028259461894955438331210801665800234672962180907518788681055608925051917190662144445433835595489501570265148539013616306519011285861864113638610998587283343748668959870044400340187367869274012726759732348878437230149364081610941398977036594823591463255731808309715219781556045092524781748798096243155527048746090614751043610821560662864236720952557147844731917800712343725546175449104075627616077829385396994452199410766816558008090921987787438967590914249326913953731957899714113110918563882837045448642562338486517475793442626878243475178869958697311252767202125088496235928130685145568023992654921893286093433280015789621699281948053130963767216950901322064090115301029360256916486236324346980555378227825665231041206505932451054100655891377307183657244188881780309602697733965633806548575793711470844175477213922050584861112947113328821094578714380110663964395764964375008963336325761662071121014767368961020824065775639039724097407257977371623360602667242992626829630277589757195892131842788347638167481783472539736593840645020141666099662762763659119482517961624374850646183224354529879255694192077493038699570091875155722960929748259201284457182471153956119946261637096783796538046622701136421992223281799392319105563566498086105138357131671079600937329401554014025354725298453142629483842874038291307431207948198280389112036878226218928165845324560374437065373122000792930554833265840423016148390974876479752688661617125284208020330726704780298561478529279775092768807953202013307072084373090254748865483609183726295735240865516817482898554990450888147008484162850924835809973020042760450232447237837196378388135483084055028396408249214425019231777824054821326738728924661602608905318664721047678808734917923923121217803736039325080641571812479260200189082647677675380297657174607422686495562781202604884582727406463545308236800937463493199421020490845203940782000643133713413924683795888948837880891750307666957538835987772265423203470320354145742841869795472799186154631385288573730129094228733379855432514817031425884584962254283999586850250406406681047191820544352342046667950146374296364655891915135310082529994904874562441551527081311638121766367661807914647092917287784017613115795691373814041086838720316968010349263776702775009771662737124600992709418630470128579612748138807983617697487500079502839532266478317788699680283395230308668613168191852557234122469290277763000256531531071762280960597416576452124575885006363492171314551026369237325119844147154972582617127637240421323781252125819313268498872048683068789228870983086306586111793007178693570562554975762384431236664489360478109692520183356042112794589756922036102025380888246082763911915622037570736969677850621708281909652070776450422110772285659921383413532725137107621514770958361581240471968542997294446402584844918179956881219978405772785713402046471903103404871352324277109089891640558983922159359479964068994923538490500501798825116238188381267330618026093160290205596669795981834842352271011063939632623926629960113926326029952143452354640614061049438932665467928443113232214498101774523178129020155017228802221901469548072234073334681052461327832268955923701109732874360984002493130025470753861967432493102395766279717815113135763810886216491770265724160887688887515282293447287121039545323777928286876711267049135547760773655845950622676327972280622345486253084626121247885891757458308974259466441284967765824561478351421051923081842594791616249682768594796413184742007504540382141773556098929461233842797978566466734240436032269122908057438314319410489575244845739320693764798687398942275314333361838560358278583766983210126081046020231469705836544611252075187733112560778125560225565803349953151880800601890382648216375737077015744684142132303864494083237680306898134033570758401131735819237730280209424231954121970154195575070728876653187928423918894211617093567094857926079694003950142962763480728907322409338954277493711834363423032309296862081371923061150409402403668284066920335645815769603890931600189625120845560771835017710222988445713995722670892970377791415975424998772977793133120924108755323766471601770964843725827421304729349535336212587039242582503381150992918495310760366078232133800372960134691178665615437284018675587037783965019497398984583781291648236566997741116811234934754542646608973862932050896956712947890625239848619289180051302224085308716715734850608995498117691600907423641124622236235949675965926735290984369155077055324647942699875972019355174794849379024365265476001505043957802797349447782453767742359446787304217770032967959809288342189111153359045680464231699344620995535326063943372491385550455978845273436611631962336651743357242055102619760848116407351488643448217122169718350824452317641509534606434395208225350712889271762643740106849245478364448395994915755050465135468245061369394410933866013068008514339549345174558881983866497072827311379042433413uwb);
> +static_assert (e == 479279632549833982755738215967357101486884905869453021516563898948915446591294289678884104882828483681018619007873937343032559095956110409690354224418625002966550159961834004740780330764422082810229193393826635058733624861250523067262019347540099774628575459315357616349150824579695313640630281667807589996920649924543478780215152006371546893079438057655154349456445174360590648508217399231758605134881847410713059287758746575793311941456361347290358374327775052253988819455767870384140373534325319062214637649448223675213701403987503519204500321584986093940400979311922337629196153927395934961423190792514929752893552191612781025930779806940809347748073488156862698382316586632554531097474068541478416687472958980350462147229542043370966376951612302580094672036569174235908042392792082009922861348754900810642762162386011767716267196524707159512614047405558309045526869231198654773018734270263596328291409529332649735222668150705420335319769465472201979730869384913211207207537399601373999069700655463720229201053332186006978582500927709712840419997653716343058563745053549481680514857956192457105651774755444712054911665735085740088242901976172465572034046597419519355833772202459754151176845548994456208445029222984100996313709454921745133168181790539412958897510447873469344071508368320478228160779533683887240349189576312875329064089835494782533898285493126755916970631488996451823585682342809043933704643566255965170014371156957508657356962712435465291272811967482363708516439065578762133187029479457794090439202070979801732536040880905419100375029921889772128503084510931435171483979018779597166630558819909348223770001377390273307373052030729413819617985823981374070443715485088829487365151686786653141560555397632839783786973475603908129103121125925582435377586599443363217659482486021512444715078999742145616192417054383275221431750185701711793487079447980295741809417265923372265027237884200396238493927359102885825948568128006352273465051712472070059202450319054451522388321059702003081513718019001071076161432358471155369959782811652330837503075288087426055655400029411438748293362031465017502577139252244731448555188613876936961036695236179942323751116112011014592974397486473882674592008130136792663493287323834319147915022427528033518178139180198551672004671264439595962120954122300129377851806213689047404966592261393005849755403969409681891387136302126214754577574214078992738385834194218500941354892714424617818676129678402812599649389519193939384481931712519965763571236544579269391714688112594004439937791027666527275028956096005024721892268353662349049501568931426746983749923266289936079664852088114380642027976981532748458314879741695023966059798072743350980348361092364278288527112580481417860547783209941006436630295569025708378983678708447667928300527961717504931897999052674925211486251029110033534138519456704647644914365911948549537915597987234033945431722519315974082307832411934886264333083916226707665948547147824941143774031630992986403589281430493343304207573431954440506367102005746914258775268625663056944615427077330312326664431034309894720122682694874274735620802316011315482410182991906165335883031756812018133914090861319389023790839528337203606889129436487920140167370284870924438860873830296648014424844378195912932551426780779819757525353368558050825303562419989528653425507781193568399131883673447888828695552112293654073088339775808234324436627659543962164946450396759723040075906766506152022264815158093674649622869572430121164843379253826764183953324829436751005035078152203675523168431161209463034491772102996315554878311000500752369796109685119745615468446576523546008325039060775520970963367909216533343057221662059707100715990114520515109428581554773471551782223970832412406073499896797949247197263055911053575580685552002226777990994346631851517791364630330551754443656577948498726362806681419705536740324268597539896282803552799726080554573302695958428417269671660306173853381343814024048279362738039470198839365706286164147555864933364363287875097138128425573909904433183795098670203800533548856219174579901097084123411402160448390274656216062207733804522678116007830485911118338137291415500040244636646228465275546613185451215477214924093897408659253897872331630294361379429268082112519489979283826532913282908147824847781517964779380824918394924322420104717839012960422523766744397106063463998218416521947089619846125464833145312281971994057275917591591279145274837283273569411904875883590818927011083766111368623876288661469697856984023924541117354584710728162060928747544449729071086406072820826707352705098469570212430005031769870770984490147544922541878582516496026055634218534739829767044431114272772863484628968800592047985977005687260574374332608765746965647976405949709304033414442630581488362251756922883517287565772653346189666094175256518980878632057889091042584644510374477219106080358138511257658994752983022904583136418485544787844335722425uwb);
> +static_assert (g == 8779107423697189837569390605084121179785924908521985744210325591223667924519652625818373720019509245903707006132632572173386255064201355735198759440688262514780984111791042739566301784897316373994922192050963272288434060342288511971569697680026523760811225516430052699754044682818892679819131995600216280966062736732384732411361657444399695883865096103428759622813867735547259978529319436889864013687219390567604283318011100799953451520968441264866031813954488628058475114348729275414143158917874709599556247183695853838552321088973445876088042556810479910661449374661999675082811103814453353294194886612961492737263277271551889038610730760478459569256149321998350414023066363814989311109728311712989022996247280182587921449185353922885937877604500400738774240008709945289791605011177739657720181601453512259882004564462415828652714904289727235210537277721389816687643366145200001177712112197515695578887483792988755435401388456145854488880537088360397994643216014828495662460205686448548113229841097955613958440901375416256532864511852298696327611517233241324799070919491286426159788792631723833717451538043437364017185237743182402835670087683125602640318887451596650323528720128188198547270462971612157603487958526705005955580409441670771849388016438035850194585870327013409236236730914217722025655319472231141666790287955685713636274653565577454275838590350806168639165264676470440930351612992518904664647715805865941038423768376846697817543122409517591717292238745940345900530458551468519245767864531742102178628854376524513367983209186974575765707273973775386840081238803880335095740836386527208267311808973522450391189055739828936937359693167240524660624945856907042041257347192086984009640984509322622503890256046324768341632643546455779035376002061691113121234273164937984171774242327769915688742564049454163158318121818582764775268091292470889088445575108022688069271697198283151469645400870507006663799330661702702747443254220478311056407220749648103123435473381583520873055218734115120978678440455896458852497569989966723235965608706826593607128847630137618509151255834742636438796285569873869967729341871213521030011427372987388572674228441333458857512226049283243347521457804912008781036966786374760325341492033297848368160903260470019067535330611645909560888797451907088389764190403007998305168673029446934012245138838180596098559442570696150011296218144186387024615885302290744905340666905921743970013779813332493771192048043297281423248489056841417013807670308191095732464221451376997270745468459702152796818222745730565721202663103043121160101459833683249558684459108862536961994308535039970814557821268170388745941980378838969910592895670554291811739768771829941043857819603751246957962236091154755893962038363120690483862423001038948620681611253867149296463690417828034303547922792249098522404751428960713875050463906134150846089705714470303918299012691600285355859412924847760497076978432722446602521825089097454542343354847347396045079587757210635356999268706465425788833311190517623061860675230010994127196459030322166751571656642321690787471906609473496034789643710478162255664092991251446787887635351852933826820719781733754578161073401362668109819113924252291125741395271474342305574536974918273938513597418963787308994593434191890687730302495910686072338836413159162281072263542758257699588089838677469397467899348065293581751035844389848387161847435160327276066603683131703246410409122832793376751512688745195564021646069245992363396468100513536211651450610523315211697125774638845313243973083536417692075962486918844667432144353019722959653638632948294049984266861870151255315023346724671430499257993958049088066160870545025276597975154855537620265690354041028742742755074396597631965320380782500944568424053420038357524917125099241334990032189526465838192972110970861380060986802081948044345526414857158569939005895236672306344348212805851269920711043891306875873016330601673973249327072503571873518366750575070091051288590764788630190966776854031578939382690709022667421734442841784680826494146620589862829612704279521637740421694195051400095278084716974624615208392585573200182664157066813849346058321763156523965698465901396025152159642193562900743812715885811057212579017860488539960334406702752688595217360219470968738009774067915037157027492209108801337707562571266897723911401203374308490793226200974353356835311756384895692909802720948968131504604855466961987314701846460342135201914356152591684810924688350929140120187693089324255924634578576427004426339299493833434502951593902551451002292839635000904253250021884625417628756439862964325562720709528784964868687330847894476999577326582332350213148861205413652337499383416531545707272907994755638339630221576707954964236210962693804639714754668679841134928393081284209158098202683744650513918920168330598432362389777471870631039488408769354863001967531729415686631571754649uwb);
> +
> +__attribute__((noipa)) unsigned _BitInt(16319)
> +foo (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
> +{
> + return a + b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(16319)
> +bar (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
> +{
> + return a / b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(16319)
> +baz (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
> +{
> + return a >> b;
> +}
> +#endif
> +
> +int
> +main ()
> +{
> +#if __BITINT_MAXWIDTH__ >= 16319
> + if (foo (a, b) != c || bar (d, 42uwb) != e || baz (f, 171uwb) != g)
> + __builtin_abort ();
> #endif
> +}
> --- gcc/testsuite/gcc.dg/bitint-39.c.jj 2023-10-12 18:33:58.783645899 +0200
> +++ gcc/testsuite/gcc.dg/bitint-39.c 2023-10-12 18:43:27.619964215 +0200
> @@ -0,0 +1,43 @@
> +/* PR c/102989 */
> +/* { dg-do run { target { bitint } } } */
> +/* { dg-options "-std=c2x" } */
> +
> +#if __BITINT_MAXWIDTH__ >= 65472
> +constexpr unsigned _BitInt(65472) a = 65874028414853418769511496113653036945710467528674240836188871502976748745763974525826911024024988631776491096261751992694895296214498585327384601121850230477827515082843619768846499801840836477230687590770231681718268338714887172330888785411211246357940293072535006266916583089772232445667160886208448607927748489013059344141951625673199213945267073377588652374198634016718719257659199541018970117033192039851653491638992986532515557336069337719046396088060414869427270972708809318734227046883806081011951941853679439848321781173016681200685359617693806920032604807641414656615976627881030905633504995608500926313100449123752592887306455273713086084720226711163858729450345307982160835189085198339193053545528326363004277216519521996803653047233696840937893926439475024000274633924716672022043462512673682343650888234611610847904449303938980580750614829479521364941526248038103556791184166137132891705498670203747450648138794675915927809475689266431674447401721770257807894864574772637777546833262526951307916013054159424871918674386303422478917660124313218179561460069927914109853781325554791226906771269776791232118969314470480394982481391738558649576936680153086613697764141243587961259345656781466911451311347049773832249980208428530724233103217369963103642890811580190014250767734527431460062555356767163656837728658921843437422091225040343040245536763579475902218857185893576553568913202523567943581185934074140454243365677691321402599868371075480132367548064644179457549106582668003278353839811901755098775042915492192962256439240717885562228560807300368546591938513564249673935563354224669505426548315283725161174366021701375396395313621732692448055488113835736519133847733806933661608336123237017767589792413707136130610229516496362268872996002408911802982404007464241164929849341909484070765678046190680486057484835560562448063002010171248868062856794398851279347048705720960974749673146662296765976038110218870942100630056574273343812309347877934257043013803766940137680754965100302990989281818211387137383832600675317434920893732120105407723736041635958085676519190305809361514850656066374765384629954359307080862256105691419898168955679806156443004466405913142123628524231555115399711321193475052976374230374739915275763990520499641653144284448959338924397090731568126860006699218100212808418951593973346259258754997140003401228249592046733643429633842927437674005630309466335475488976044970815680337796705251785679176317921969250255914644143927301143156940750728409691193837462118411451140103456466642917621794037963804154558563563784540744625286045320380647149505894465602074709712052403213672513944120580472196908870481008605753502378254869195510822476848807886998210212224568817665331382282682183443019436910934518254905570403017861343476981516822213043567878416094061997484366094926060989684786188719853361377592613245034788253106057223977996442867392634883776229675223227731721808083021736947720678172726157569358655251453763272147556197009586238264046136725977202440532459363521159216893005875943650891355683793285122481839809223042446177899018320884858378858428482004887350002248475654126695437381791039346060525159596388199191045220810622260461623488951548300045143031946225548627356322494072635246741690369797703750001744527651635248045159165227990904076792563599086736013143689002450121560791866918627656264249547156379687514841821979600884946973379386059970849524777822542279884834069088756993835503335163308439818940407550289076454404410002526269749323403673331561005855976564163112359624884449722076806747002050900060486557888988389190561491837653913417576996782073392887675547243908721620711696799096385497090726000898536841269644251102949559919330359725680095583471880505317680844666709274840966390417748140336028128180466837002340200275922083519953988906089254843320339560405442077901688830870404393361047302469466448124739846498711286663890861622125303854725244017935265801954966781478807230955537079573035800508809193696776558659380041474673947719614891591483335826961674762867599639802412473648680441069062029676465317014339608126488486239504818779896608289143566814074344128163474927248996300958043211993182818053822887583188270715520756855009877038634425539657265881288715061989818229395878573316718153726750826355803265260984266618144751818838129431927560052524725127582765549442372461635957790507428542296212660482883830778100032262628335685268361076110653003933720753658626342498598108207113591628523223931344937962257434088745568685381473222813754713557301137685188707577771735719907385875925945361215971464704808214927499603711487344132091326731184707081884630565832911532419130163514966778562434847861021362218993469451376667702490745897248165073801412613710459059823342004801266188992270518474584690584110796775040192964553128155321278735400418222301274509554699483242906248842528643927491916050334115601214082061834286251573797771471610462890207070038990113517384314874988389218929593573595769992957934439472313648608872221417538591099909547681713055197851963217806394271932283786418963737083378263837851866770792294581430370179812803807766812134735008944094254924133000181138341444754146592554240244926530488085797161607440296312032375671384766799546314294952639429116053444305204179954961737670754928180951211327209631174491438566704748775957423647631106931872353072411758039523701355399245986495256131899939578128637906193987861515696267624022768855677386145040750676905386076271594075012645017847456843861067907361603785482067517607711397078496893391404908466039763474426356995787412728936302077788321037622089836944185920214948667492076372211507958383725993147568828022520584628113743069072098077681737646616832744282683301027940111008949487559489400280166812162349769417565580841259074013682180200573711186777726659689975490119163357473183919117291539140678034476458394800768806683673132266242343880852243749183854335527770813216391997262974885810843114429314160237463276656664218915730925460828760711378046669902410716387688714853282313680765227107400697209645981183025449661912571103890490913039864188897637949556486744952841792160388971558166205393610932705442433631027753841798811000777130265365602851965515681643984169325435610742993940251263241305792519709217930230875279761194839959584662947191743403356700820347334268850390650844637405501531301921096571026263943432066459294971843089035394861220552532758517810050362565876624718715634556912646641949968260622504116224630219284301623921188277675205384056375364778072061649987278221213051902862594711798265704318920329526303415071651490215159169436665502967051371583199355417397040849618260976239182865708899876580220885148819958098892407447384776849540577596373076572931387032303318606938946805395609756474317173037851890190086080334220234266081872276699590277311605725492019621206245108261399321173649438883031907502103004618343981447073270063780499728342099870986514585907891949892308658040261024667776373424978390909682927910796351757483974443865702371792838882771005747543496062821233816175876149479890010870200215632229210706418785910292789638550348725797240661293132307251159131784402794068309831964186085953199517245335059417823074979114015927625438852575505515547130205018453380351113945679912359116614886302675918646948307265762938004110601513658895196700081824586705020282825093739598881081540708217418131914073953341509242444578622435984145983493347604029272854899321609106849286714028483886414825128479818859724734438344906945298606455406699287820316660695989544913612976004949026573679384907850688667479190435572179237006408685754560762141977321367339517301097820953022755318954649838568359278646708109095740043295665248217530811189495831329465924529060656867586984790794628582957651073768585090489278140555182834690421510195303839613545873092108913694594537183285417682903243454311391369375810654906662974651031976593576633213427096627363649424527674138186816206523669842323707281027980506733634096495865602720885328039147475167492532627097604997707385503393991456792672459352936820122822469556596945676396903590546739682393729575454493944807057345819069181271569904644175551803259147445317231361820692382321822423289376965920517760072762131028848540838123733912106843655308311750496550815033703056692798798011918005011348199727933997069164542544843124651534694478753855625309629960678863623815672915274926726965714364858257611221106385074050699918280948177141442387115797213194242870596023564029577989498938485534058029690537190534744252272824857327493965876618976643677984346169877601719298683399281042997338804443874233186946808040598508364557521255575013579815682146068863549337248303001248078807047378108920762143811221461759354620875369589065024312588898065507971561029929345527858159313129820327669633132293160565999400466976147547125003253164886640290777125287017292361727094985547014756417512102317970262384641051079277427351725574074131116107146600399234403647819323600759586671280733725982209124764267999221147483008839140602670257205078780970624480127071396543158542953522136110465710368242064084840890205082187266645629140357952494765688460918507878486426042065278647584015295279651155982623258616377485606104157632043716067693156340573589748375359059722913343059515310846221532353844339794755668848402309080774422293295651170084782844354070621520168937868316086040235069146058345289688192907685918900389066798118530800450286088002427616043549842138481236713776013883531628590595300042847329197168381891936968101967776014081901912034332263670677828204428422384434715718704595120461430375574175765702011953092786008531618841562463621545904938593447520015052398913473747165675739128227729860522837856493359404981275620405156088407724873896814306917527150300142982470028171920769744429179320431741610875850043999674743188496908160129431272106464679454201996897333414256543788368259896759637862338268498926658644196226425393282232669383401043410041622131834269331249053253163263805617292232014554953766603366944449281936436163348007550264881313734403499866885910422096847245868983837395381509905362814510495294417227071475516750438538914922504534834593033205080900795488912148742019119549014001554366911119067584994744299018308039208210417466906415185076706749205801012799329399986289204986294786437588639612782571971507723771937929701163710244163043404564826267800950589676152533594989418618014288641614520385570184240884586130870870741886347468641829857183453740491569842565622064996027914799445938815414612045489948609894048719358464589599498624644809962127765563981065415756251258118421436949142446606626464150436046745354962830933231617087191036634528282763930864590672989015325808346540917086018285482216294776630407604444017209836386813546251369184558393180862727824133618231105407565377726874201016716874747193298110226548713113055804386335542276584785327642141420979789128607575389126059449056231221655504322975168824547921598754212580284860341317067232171503075318659142194545497016145803181512026343421286297638468103352223053704896868265116206256544679438575897966426762874745106558292347134875728572127325337754733765251105470177415270966206899861267252369448068927266102835975020557437913164840102135985178231875990189340734544654744647827441286010902235438982564998068477390121580268067852517302500958493927727155669887335454802232441766876959727296032213883872141451322900261005024406412638925534447309297109774680653396839068981982303959449585919601951784676269338509798444492284027198527534729264816863223855205480827392176674198533541998652285208950844368772121015938775827868718348053651466660945842822857135950701469458166244446036560410696408598768008796242326788817178564489668276079897020785729862548025216683403145162467545641729518620497596028019199039246447845134132855463133735174323788649842018758419435906318743206053356800088370917852318294527105533345230477001222310383402828126358397712503413591645611054601866497386469412638491773728614643382590286186308330017723253240683781406419919818813502414034869402770627046602136910556735340620577006649826384200614066464173557086745764379665102794298748986565199421337796563169859800331533497258203854653725133871631985474523134061290217790871839012014060652170431386706390526266713354909666532894989712338707426377288105959729380930582675275553400044698473843175010204608057871421993855679325795511343440323540375249581001966431109313820512103729737415876492397855350709356620428053728631513279657137136751691815273101807269203767363250781488995922177169506473238033222632470640191052132325977988500916888797348877819383961059260577892204584222324373872871821748974613401628203875338762555211387910748411152327539619567997694542831475663395895555090404922654858513105597129946139446385944075046977527087443129745077809595756576233514427417022666744060487857898390789948480719931806881956529624868523931326204018924742455510988728560620886881508902552006781252685182126521983698023601752690226917489683075686040459944761124984353820735928331227975669811495025536004835557357866887952405925158206358648460053744971810759800516971341251283976744691594110219822376535068050425606180275339861939768053672977590839860433707369056754028768873245370748243872093908425321452790676005744239063004090812287994171654371534280527461204785965744686899037505526748205474829861508775633341610106216825084287086663714002411976655574453853711919148720158805545980786494280975922278491841813051023374114075744194873828536865132926198728339588170375472796201352742410432853435729363112226201941628255002535490275056766586373821459331811284350772302429368659539685224295962240105465692745743117250558134122530552966969305908586250082284865580325406190790343864287037227316258520732020059190355270848306662653818702002897039308630618431243314449931945150585878901504845973215101937953823928461721757938572553687288827606914187939448631587847341567152264836920949873736396479054462466993545281884314888041635210657865924492733477634678092762053049423724420978749565535935202527272735525538857856532535829727403758248515676377734964271319895603733369499282090619370644390912703118190967699735839422150118676090812589197956828432883454591775506142072991995255477162685456179917844477810916117758366522467183885517800565518850836567463260579936570404378905085631880126835957647088321534365595303983957495652572590640830763831479030713794949481583992861854626122255507636651728698938040296394529620734556222565311409570754214795520535003346400553934254868951469742466063081282009587365288248731116040001268793498485153779630516908276030764263795595829834765298430173859886036974114210469592900822522496578393807022364135855868617791972115817676751055814736691157277719078078363722995682352787453931398544225888615155245513172842244076107970477685087347438625378887619302413866466619117008334792748656074141300284702324314107158575021092021045201219104849568044014318163216648167167102545567590192051572811882759399171815091482243321889561619871953313830812925825376241612376634587322435846044799053536631550927269169032948586514626083989734654942487786073128339707925635994571914892483303685762083840487806131930731387849170685349079864020207179382689618594010162070659159447889344283707204286255036729730123415253795453381392363525730409662963512930464146567702953413882972452890687402324823676434623668607417451713252684608112007770743378032124178068076627655591705783142289469636449645674093183854831679943102480054334422336004642534472137802293959591564047787165742281711262045913463889166614975785367285123231848489964947168259259859651331806294100233514606935240876224388286907295795623525145565485264076203685696921301244157049222399694261123517677386771518164905737344603978252996052580868902923124475552914011730528812300179021230309867253769880851013594703320917123515967493597713163002806913617288734951731859626757112576606989339415205916570757259477367425003980820415407690284037569443414621271531087857711540292395118940327930085917648961413854880713533683379365683118321440194053278494655321531901445796224168264056771141704976004602347371222102339725674327295424584923438972729801604160881606371129484752571956550759895866459266634599318934331132992268419492312051515244634605489726581981774372625890847390663222639677778599130509229036502941438146903740421129745765409463741046041724109743995541832910890810043237637250838512421266274159269838087162966877339415320918445838084607926482487326890808603331454937071756872582541587950869617374867497291942434166388340736188426522646778126260187474459305273317048369223194305392592429269796065446394224285706245837186991386807972768134945406804843677986121363618283994623075786820519030677924524631232773053566327068836914008068880508593892814413599933512127846256450189605965007722408749599327105633360191669226811125705464166865932685139499043188417058408145619475137407704309057096253453970943431010208805958880441668536636630984528024738383726952579394912266155766194059496573034122939179354744906886317447299846294675145801761429867331920860320689436106861896387056042301081513818264319294187170363122704106526138368915635603316494940799629455580847884255301629707874127819875328740309245368068925386845081146527751898281929519183808884694732922929381859998068561552287796638630153557107517603976885737408961385726894117817772124305384275773752681561772589162896726543848118292224854735017911552771598879672195419903142467189758288893617797981332645308463000380199968291172662286342433407530992399311582382371037051384107721693674935016059465473282177680148455402959465472212928981753238596329614601855483413398833842270568295296640743598590779752989551301629995771523000231911679050279485698305095423321484021804360883790254659446161386801194534079288499545690468910577746611299797864563154863490832639144410652702292169488612519356587316152787229543906355470677554502438539602268426767473565515536424169935736875415273620834081490730213150398951736650842108450857240742774594217852879173672688751229305531115825014850231000546945150122964624749643195594303796058701805941210884086651903723484629069594503110445498020891082678423358251793036052092074949457345902128190663782180041297332240668738760754685732067836519097118357790131727679935781054122263807112935237022613351668926147398489883137771515688789600851256388568716495659230435230035583859074576720408679091908831650422755099588394054135377265310497551564802196750405263555192208913371509621178676044203357752939238134233705209988483613418357068790410292407284985250078216801955681819735640889915286539424767699291558260497936451862444377162411777198512727507682930531190062304184267580007068243872442587201835784461931300341180739516168341521559240873860541511979663086972805839349071094889623734952370289999461430319855751397225742175395567834824532612348799185498233668108399584932908791423527338415192594890797161640870428514483903241405192766090688820461474694129483396941450655378070502596902012960005925071407505634409039374591587356995126256441595045666991786542475413106212634440243252914105680546441834800933952893940680530366893360583164583102871341878638954296317852245050855362654227742890577697939811035528084823005072060163844309859018655879693761266441850506107247499887845837529072734963012358189223535309540488630641402694119285809766132525455640455074277103890569921925511571780900429074779519535887352143224202076526307608773803900609314478528807884041223459718478713147780482731067298371645459172074879456665672144659257063151846218815521853521538039105580092129093604550652176702149722267464711925176295825259195451897982973468788292910834248649486634164719847512355589622486356044931885992391641340252366296529307289311708336501951699737694422661506981734291820308445302217945166uwb;
> +constexpr unsigned _BitInt(65472) b = 100114717733501279047723776182956757115347721138729600912473525092734313193742682589293676348980090646698499578185617585517470684073352391831549464003765330477102561187757762352331821624084183379691781020398833769817312236580255374406710448238653215266366011299735448468233210044198074360279493272538045406557958991166999429636554253642483353287723736626614076173774389030939047034368309416169925794676390609697640839419284172923106398747822703250993067360914782537098910254695325663386815684191492860666091783967519578790679002244952830877932146242740101430274624860813733813737621518346385654857238660113122429104843905171306980734661172930679373474815865977649539832219611124478579695954630737663119194766666017364148266829323683991092607661278489224151059990583807281880150958519699211512206729907482237561220086387258275529362147029865909521016312742478755489179294243171430093282806931016966661559517454422004572379224590073716192247703943965356759520307382733944577073741111865259059837853430666432946454201096800841338436696525366648645617275032528104274255720436655975433320265726343790016529230948964521731256685630816133432097823288170038731302362863259092166866670795290976986882930506509405859592561888953891642540736219655036807263131586242300902324923629589408158902044606269590852501824083407977953169790880420387424165701539966258248590181838302042657242716350701981682380948097800014578392460910606462228574932950529247423845880444246962732820595796167829328780390088984547261952625922193139901916610229492861661092747721202750340704955733954501284774742095963348761398081653664038221128605707314601000137489677301442099842048911700061503791803955912831122268287304609148464318114946033067997411760446328269899089629818950408698728257794167574666280106889646797554422339012444675121187904191185708967722514510225266384207784173261118827990431209523939503888139578140495778237116859508769743682297748273388288638161363038211171042178345297734400961512771146499751650577019484918426210881233862902133150779088536308917675675720023126726569989263142413036511588884004219336934144457874722017065088307033502514199354766651530451205664583289757274081662413150880987330091133750067230834920533743728975055389263344730948669540035822680101190222573346417237717427750191394457814210342687726766498000013848036213470001824806523810390917676635462226134191850956214698938594038260119823563852944477412377714414327252439758780753934063615870937408624486637799147159598040393215327215307442605340117246025800399858556963142978679611972248396221700503403804080352829695144629372961722182429873697110904758384111265071905568036182549343701666549957834011325475822990799454716096746337639631671775884490360422243011601189186004955027306894976823561765501914858039133459964203906905395236286543557370732592582545923702706082388298981292440554326523141412191768888786774985354560225477275159056876962270986375173181799087865790243219120768156514753058075378804237121387244965229365089782719136044346354639742868457547718684681095030552362332018190999849681495887592146220633962494400153448731724916345133363187176014861754666835819786079622711131515095142110819477599733946526083895839602442738520215405610661155875963333902646752869321042183314833848600425342924029514402024057940515954560414087254132638206655542732916298810645354416986968872665347028969439469342892109369274868458350967335118125301472432660404078835720635929784538443336511239984968501806047941832562031327607795893386746691225953383835234381573194967235635474643094918398517417264166921806441528288088045443402355878723816094922844956240649972407815453434139893648396173056349465887442386211214383750279215239460582299014299785457774615881718062010290696199591746236715232317901166371136396637267613309688712874953346067259350936395868267524609507790518269395096951214637354016666487972149783655980128430859771990004203501929484787778444457578683004883770156322092059077341536722349032536972114257275616406902699749709996773603933319820907854024772479536315883844669093925821283494708645822008101810820783195140641716134000243606844133608185824332332112983249839927840564670970228432433825221961975915060990749635049584212248419151095056965424787975733630152111814352148292787134970830277961594621197535656320334231667471538323175715856706330175623720414446772642564136630153700983082843271476124222334675026760575553850016767126350165338075849886189816039085512959708505905638997418660622260834740918236636522752771425143415253634469316035769539924429279861161253628051885191242039194300643294989477525263496369270524045342208132906359550473104053196559789720930488483001375834491004104923938881376193746134243314219738399375604805971031464688704734674695095464521297128496245034914707312779753888535864711266092705548466197291426535574121014893754119787123401584971937623911931812654824764450770311232342468580959470259239272655961272418899162587910421611618524261985997750542021074779455005156374688740346435734305248614024687700564612552105741190172364625951503127677278930753915708544368773914098299676590937380612660233945555661226552469943730447311202454996701689733595767235544191018887562427221716057081123244243028862206939620020318416338019272030222673535761415091243824899344220213821826909682871717155546406870595084403092112870623574388474066476479073028727456441291272134518133325916707830017953156301354073289349821072945405562455412800081903376134990084929058222810213923609047100884815489976321023259522929519598262743943702392819103090239344152227378627363985053187604499448761547106356313981994575416149460255944497986615098021157845050284356535450362706248417187285042024526055312009264065881371591682354632169802604427262083598208582250627831915427796250182367158626300599669694399212026109416298724633822409185174039235022054762927142269080686246280318930901190980203350485911624668496546994063270528145522420719526397809989544695566596843503482731492596788167816454610363907131928062248472260573041500893166062965788856187295498704098181866189125137557826948675639600493354685969266855297623794567974488898523037472688252341617982295015392873790962088664497225378086193671544310879669838785972260142903223019927245095777580844549010638884104639769209200307665477604099091055300078270362519111246477993239904430731996922462686314752826464505758784039999666723171757625919453065906122811537251305497217011514737417177213763214593764067148752664422948146012328519731290903790308244098558969854469190904931282697255521655384538710810480303644586476374058540600441774912294572534545156636426733874536036390499586116578633893608943483320624970331502526937331033083364637213706286447812835438610194090360193847259865214797296133832566181311155776439894102392354820221013003611344028693316135266795276622685748215557346584596407856198349627245526002613343566627596047387566650205245868910425334754220122268774663499153322547243446655200236971477227286808325849832329977668989025155615690655734958700121049678314259880433274516941313740368448978067012564933495679614199825637910516781569579160199155830560560663296421354578510594442512499287195379579324268336277361316360091572843798014638962194213012716269698822468758597878300311133823629949061897664125640932351032054366829396551968251203900849671044358851282172072240838258098943272016433083629163897124597784224520933090413533316056993226180858350563044320086941399011552412354674055795214366172709489622353743902709646842353766918728049574079852658490598896856958726564654660876677816188904983204056956942298316286809628666323111074302026916737650913945951936978318198610882687109809391228261776993442552568856842086299985121528354577358120371573210058546210995628721410485136914205561775507634402830126625053092970550420925253966720424893740053664461273292615578752444089726419732641032393726962665264685116944689079236432992916339791133475201077494716024783727266793965971604306316367909477592552189739623599529386835978606414089208119364638444853003163517130387228434899052185263668016274079598175225418161791242022435714069120445212082926181940570850484426182339526458978818065903060378711467088311585645898741729961699239471682144702568103870842720702216669402680860278635845362230434066427869144231859159759262986955826439936615791274907168968855242256254901343070736749858025412302901760189775358581743472761836453826171858917032848455752485761908759016583296522483675389396824066404514507722330609652952992678075474567391657410046141256707906965286740038798179153617510590571459571689682189325317814200862825413367798753685167097440125704909594308609543703230902994867544547366610907020718715679465856749627217752722956021023792719375618949257949318029551471406463237279097386053256458106165784402814718586954320968953015232944232114555091481218513505878811187031325189438715890314846003392759822391815907593357151854176896718800458712776231550840392562528165573689669173641314877886854023490372744509901335180787696294817330796161905970053394112525443907867607433668652883386258677820962996685886115562854075574339741971216719661373828156559780529282458735911459494401559489864284887812419236439545341876135885651429400013372301583238860904028454489524708142722596306803949054854566597158217957039081871297261584604777835589339080130753277065539224637472918767946085816057384570763125621400591796712807858659361014495937425718482510759878432518805178469184911397470582102792186717135199970992054685542479985782231415083443247072002183081558412170430706150181461932786174632200040060486620130556082725775550597153503886491716273765811783242898035508062776289388360315897493848644783580401671326513023177609545661175067468865231253962607714995209579233510463800213895037006685022727111530678946960647569492041994611577889289214604187003067493607014843594375259767009393325507098249374731201260534197847535675315091627936145725445474417647007077970651601013669120244089638820059008184479526915272546451238701529388378073107543820882471482601307693781755204293593645053848731941506801855573871644105106448156348632476694394590996668647499759732769324337813750839939368228482585677866822996075808897285141101045024299327172559063303643204635678891840174765990600105457475619319212057398172536274173734952573235629349657388284834808930989298181672653013231489218326906675692420865138508313678035493530650052541000425980302390672463045262535367221549932356256061179214984213805565772817169806741774108671645134326581312200396561492691232279136954082549326553800132522590765092700931199260885443006495417472683709218836347889341416556713960955521447189825173045189970496783139865264307350984445082592658446239587119944913051760181394482956533054827091401320864009373362414310884501656463755878688896941858827644902208323530519392191134363209222093605875804363615582532971999495724877910275024940970123598634267867983449057004158327626031855161673492950985924797420926140300957443148635248305948119123302159711096542342778234754508269492333008731157030461874784024110145169185011713946906205781125735443682935337828885687738693695435870270328989801090441996815657595446621053110705087986014161869591796501434716102994924894262460919853691777292604060667837892304215870967163298790188945493292708730676014635415208899184754264208175638073501979475201586463232950692133256168040865636663291310390611433019671304871706407766956219378791473587162260146941132518775127141191761778833574287972156449744699932079204525128341757126237578255202780294168272384946263960753848846747580898152471820579481210461228692617403001743334010595558586720070582170906860414819065030941686631580882169249479850751852749787576392806501914519459448284809198919325234555597962666877036528108982758949155823331707970649668751754759983077311413542378611369389126365438077851402102549924054446450867994447577497552929123805136418269089766743806652808714281299047085598636180446664259081645302803118870447938332134726962881831933268902895367605961305654742682557681942595468692376585710407167969955445144928854325958455185640902877281897527515272503957173916752368702422657830194930248690788806072926150700257030088973552028794286919001287564467565169267168276360307868896645323350741447653902093097675109639470686554558522889261292506848863285598285129339004052668107076800113176815163961345570041567054146209333141463996135121987937345779668356356471788538881904369947412786816384317275919332015924666412228298730977060742887197419749312437642373180122106860788033207555416255486970093794393249658029678141106618618752418344530675496475112902295282960974467835305345646815993451293962483421933603619298443409212189067242142672046810985939654246095575583636106034886704865149056128346328530869795152065794354344104033444822747517762489977160553533001635374459413235293846801145574868600827903435057462223232011527715971681357193578475384189501097323708718043676013057635619753633401699987433242030567257829524648984042297522741836915148469698960760620579836938105975423987551338694880562104981961592402605868387046713636135146255490090587713657063013206834342169765207057771395817575151173639060049201698656201765881257687504060150982128733838563049796034023876840614011963572189314715848275504480094908212911727151682350972478265191507531831250489123983022266437313653926683050158462511188241809958130049339770427565160413835574135986323510291513545862418063205074338951079462206513685443145029864073921345021844849145745506162062728038266780249818625325662039340090237496340119475614453071232421297080815361765917150654498069903376867748062701336517275461202624748253020697726500031864664945001245111844270693804633948293660956787843373851845741902131555575197437478354614572541194422782602417058105318480168246799662377801538412314782958545171511894127231938686814207967909824118678903423512091452330938797960128910415335081862651960856032734835329855407218637980418358390956784239363890984656439527356282433324733832160603920004248721726338683836656033047419137225415292066170285984893661640083871544720413189611564145203928377134969949548474888762163068000397757655287195739651812759315723556948579434454669396632037129299024150872401801117369941615583644974876856502199207175387556416641512503041635774749314746591155833739783123080261110094782076209478201554818723446968836641113221564050283245191877862533711084428640130864488454624802680743072975620306310112619729211333069104357243325018778925520339061944098628465362651206617075002416048055795473391492434363052025347266378809851694299889317222370569013832244994643866409070049045118774933868368384603258635939615603091148804570884962661244438865936067471893668250308842566762788319411539561490781503763155653479460134043895532426945156128934612696025828504252151283375134510928459903096734715153778109403130197131248019316651759693973872674955733275103421982376252787312385797658220770598275965146003356181856999908947864770076708535586349492850757899232423143844396084844040078005090221296054651028866997635940904155999427038747919225619740701123163061243671120415487124489411500715828191499601409291460757889380695691474308683189522903077241070380367089132643611650523307834742745303310487887966951497117510647349374273456397897912211757807464869034382068316034160043853449543591014954136582441662095506858285864781585065293658602509060854597649067616795737812231598010734067941421565684420201992773835623036204418104877305471742752109397920380834966996710722028819710035428614600730086831596971100231590883989944752546536016172546412684040033559521236967246214853735645413254299253410727690575867954214416140558081346451163964108762439427323970051606289776165858416424357891422467181650062684992877166286740589476752703701626528952288163423007889277331352674140021142845910516076662232216674718029398638715878974237152069137050755428155130793640662166117584202466608262987553732524714724388803300488229233044845668887800816824438968080839216969181219448044547443941051929925417699822554422881421994087240655174880773473548911756902998184900735695948490729748321004382279340016278094703572364133125564281642719607796887756471802835333379278409552784648073731419635698518935992786120804917676305536605060009182587611523462994989304451899943175196266152948994385451605471158595872957687826054582153472712542715255302609621888638651371697502021672915772676513343000790978308183287967785349465835917873022653042349856876549193764678016698233332898698798473764345254002662653507564038184374035002721176644511741088639865091304530245168267837700955655779122874902659518767696535040199203301461538774050612808685039502336859677745894076135500061581363176842799625473551806048893186087740946866607450388261315547482318656946969696550662834005919348568293728751372059746250342038728413637702999453641030986923514088735238246185727389302501769068311178111654423584088243660081820882572402391549407625437880913790459621072887481182872099914351803243142744092107764205010581529784581053259035664288135974399803998383643582622960285003661540002883844783064606262959936669169329402394659415036846067768525715376351716220490464406707920642698245918808294529084826031771071469485012891059110411484906779808870511481508634839218367918630524749909869651924155084608745088196942032592596539527999961140782450000510003527503750358791029922462482173677027356392350857214893824774827323978108285364541487637924703438313854030156086904163066939454891376856614795154679714792914673806642019152560027271392215087552179465448818060415061519146801092421368810715449187690775243640394007336532567401444394739650896078150242023594790877415956923548671954483306470894638272194818356709172236128340332770207851698971571587319010792604461565714677618438475569161104417573197556864349189146849724838083993133408251465883761728542325249315486515628013094801050375617956346751016492408161056634016092819014841853897267006965481937343839268114290444523549214856748090163208413527478840072549345380110648262081120319520850811775071545119935961470512637911989177087460006474693931889487742359706755672077087166572689858419021851837802780193208434024282299532942483000144195002022520619980583220590077215711664509153314666589125687826629822516884195708377252997538578332258307932873989956586374981442291372854468403699025042572235856717915388770530168587331179797655658071103524008115236353756549679170748759469516067942438616716357831153014255228670162534958193004943600542870528708805213389429304896418304635289448124302710129897769356418770523480407389315328572306634238009504382082021165613590522029840102543328930669970500692456407511650187852937349195602608014357736751059571489603216826077415809980979995711283335891962795940179019435439507734122753192445481086439094633796179207995025246597613838245829524552778303821902522279173224245471199657550553825642492239342948135017794983743597654410313919346933663867165680179522453998439173845369808176275332816850180170341213378782496307778975588398912577730974746618617131469815557973549303574003815147711173642475398410677966310429335960283636647175743582296638000833820970775030964223374636373803454955444189296936840037446363760362609968685074787335071844649451957697708868264272628943789964979104588674822545864503338181273898348523408711384734508949115868795361526655558615590780941372174574518038087185667131948876078387967198148041613418973289441521934658231375183374956575695869332017751718627982355393837019680653556985919193671847767127134568298291883035015093292336382067308787956277908453081687665703784475018000718697708635284076006695671158759597412687872005027545848711100708185954993889142620615392711359879239101030375288401894286247542619281771596083146956639572008458511055345530112400412859347687uwb;
> +constexpr unsigned _BitInt(65472) c = a + b;
> +constexpr unsigned _BitInt(65472) d = 65733310712974309367288359480609626206791873887406120614733566482989916799556257112216000049296191860946928376952770914306941899605485940771755684540650442628048273063270873248514555210034196075561139066045840499492361498226073231697006377971536721223952154393046315830776038940449691541319740696961883087824017261681376524927620653768554379673373641639381277483868891587662001863419124871001009079537921523665768337716200951896815969924745929795329212934170312485558464946777503351275156853431957611568920789844552631853447610968920496077738692498000533852760507563967103841050666987732076030100597343456816635403239960433806006856418152716540091693637161283246177641292173543574512366902095853676443736576147420571058987232518265841796862433718664274349920633906531393769642675525093914711153973922447983137836456165193697235052551805400298086748645418276187545002106540916940395119175073042452237626925202060310568697433598981090347253584305512444157902701459227814962188102586948892109610299149051502729974628908609809839821822668130317727334441794910982323288113687167417312366330251518202778678924819655933549572677766276304430538124570465930158881124158535793551498860046868088427643048679300639925301593466769812387105615012578877880942705932034097020799850477256554157187520410799244192086355131496764490623151239802453953907987512129264476529989486245112709372298713617598130001106466276409258479134275433778100370825627338116103346660142744281838852332284703873115994712754322103199482327643844821444620969063070231305099748945990177354116563708994207860979807869487982086908579214553457839339156863236498493901872308526293149758602972887939740766581996707422324863902544850256976660695255552868047320215405536704136182963653688512530881389442673688153779168928135272667235282714117619186610756449017782957105316404901015149425682458716235839749012551636965653227602758151742238268928989092641393035117605197064846256509919642113594994851398265224351584646864671276272287170206350834967382210977603114637135024583665957926257686586058765810879630550155133497957679518697701224201347673784813556755516652278639222049628628287667613121004050120363396228919211550751644909908584892325419054798571690630781528920127106892476546223788400087450236632648353332805463973464740030783584597992338831046583674519869603805425373352565430767940512477204822377530625570185248046102607943687326859064835877026768109497540886942682684799854161862922119146249366591746206428593130174782303743654861025754940013540275960320712831588609903301287960684961185629000492377328684361400422413202934931928128205758977693042413470979440630546227978341467432196713936659890524636113664916651345905532522446273701858583186487486581241346946982996651940112810669464052280768863401797902429886586329492435603149059738096812614308552041610545962554732460517382302778704900314853378833994526492859340082586070061874180401035531072947356120533223330596236951819458671353284610290902367114339230130038474653060194134173441865231113369348953652356888429945225573297968120204809079466443965769374017835395355023768612500042930682981458036210757904433118080252226763196336174038015538916025253047465327780663745316284042180589950637410910243796722176452997422452032869849474155801562587406994494338806397698857919192253297500493784346639226164158567706153672447576854501508656642416319546327503355101617552858712404139385302095053298974831170533510055418735231163952891673278446632404352251926633418293917756851159977649745652219261347400777288096237796987996178292518234769055437767785281299929461975823205145570766477071025158470557503539318620163226935642230750325519351407338671881791777421947266477128840544205744167421398368196045974760281477844909410435155086523641006217202968340148903733166861610745128566882125063104438505676019473865622707492473021438332405640370508995585435065934252616730287190014082490179349579155878175673090202058578789470739947139150638934038138854860659580737294427346084473515761085656374694303240034849377638603819627901691746584454737075987696732357864160392684097734196506903951030340568566210073938545020734774672539136441431596494399821760599541801790002315717000790501618766726270055259571145436819102070077096893640498510170082736898801319866580232219628192859326134644962295862962394503244378790497751333374799637180562971292630390152275444702790253729069919721990668632055229811455885739489565076520257982326323875516272981848548514646158679361508148923561357778035888502051861007880479204011110486245574869858472137738300810270139435935840928373836784477996558084637636599118320399137586018170765778543561772852108460779850111484532178560301608530586242255218170413391235975404124813248921038023968124539591162200254492538477883460799401251722230389152830685780062770735001129218658225402145869689445329832076158865544012546385379952350848071363447689084299437128393129712854269186158884623440785080127828567674142955139977142314173327744101769578385949887626225232567431292464838177881053175933182795610276528165039456432713744227820265347923797672998924525666844096977943611539498280790283718695987111890972309916548512146602693673585809451569438925252460399015606252694572451638647723983860176322391824411594587395886929378769888525765272903804387296530026060315134144616825034150473979181473433350930826379704943481916964116513350250938678585295189807690963814876673299057200601671473184784764308134823451386765389454409346892892074774191075512646614701216770972610868772288229260369238970314495042811553164842978580655316213597939013907486910566989281674324160240738064996765996237332550300274306784336662255839815949109702299743980927123146425097820892903672153196408370662800689888188019379058741285331097301245972926112276153227947559985943546686506638810613424903193542704460404171589584398190245989640779754495625561723849214983737287782842000135718896989752537689864067398378213687459242441194971923220481541558570562442595085851041944799808904544506901571173692831540551165995774595397470400090562683562794797697451285136828058143410591944789180427904555456236941912215085454981071205525291216441004333912838320426472156279271774015558431587150544806781108944739721492705508709807242677552414468497054010543374648176577420059610855075742038369243252137693046107454287811873987736356821716492639864472332281808643883488191858800704652514964663233933121073957190441066389920544329130284858672534099201695727803342839514123378350647709393690280907650354940575107480283474589624431744112216519223017797921728614302139082329594274840140955169096182323453926257960018135659648490966464611127419651150020298022851672795958613733226054374082818376066733051312368282035038368221284863628439006578385553557427882694598740435172636552554976931016786384269073745219783967315992539194327913100155235209949808181873346418916844796192276741603170233235579826937741291735884125962583664120694650682226451066086977052680862907173073986350090415076972216568662204777477676181236054073998491942400434664408501191792680685898213614962161129478516160664228754814099785893942104387816797251376921851749252728130118789568732271069448494645703579466004131124122290810249141494796253053995420122535297581983215063363025637799574748502335575866748531406891315967131854482010827928515900145183933802038759837780856621841566650201051974277965566300742851625735938106960447092085629446949143070976802036257426890656404430664365438022478767335206522837018867309001375559793404871129404322039002227149686606800054203400638173907211138919574969418122927785423106047254614638512456220433124655851487811812724404028021271603490636522676990657913071077769637444715725031465662119446538311847732751542465191912628172838715204335863864671263320123569607180813744039784794557850275817793745624539689727591059618207995917822692190607371341378619667008166326946823971150816170122919732927420005317989039847266860660838953010552852504872862201752813773661634566079866536422711701242406591907899014311859857561282458525992977344795421368705765423491900494672782609071622856881671225075228441073660291043270090532848717852955586557701097116656191206054810390050048974711729417972730695253698922905903402839461448947122909788437632918839109833855362870382021199337984636024211238445100119626506381001969142602820463906490830595091014587141363784712274529031186275532698542639030690737659655600732970978851629312632137955400109789124977675620891004796030561742309942982748726372788787844021365802206904154115828668469270647299065970892497506111177532779559235107495836644954860706519473738135333950676031184011334131153827391679043933870226065555817120578169594750859481964131203848536656321857915857019373230113604751095011430181838849196745919952458747873798651717228532368461626109205523225639696330985887543329702480065069798021969676105832222945278141918785180882254250181098714406914257413016773369311869929152473125037538836513147242640209270244621659867009280097881063095471227753857143377601538041908750720006209690876181941021293642811986890202282804923829454634304181075900728613236664383586413616441697962542689578964065923089817733799825401573631814041866188341822243904759333927889104250345822671803414434105208744186155926365676023108882730907733416174548842904738098597990054889857381759390405485985518292115964818019271139283111127144800517769797473685025967075941449741615153698181505476810210967212803156816435231005673110423674513460636903668571824788159266787950485643661101097519027767227755811167539723858541445903613867046027425790261586364576421346937949718637662093121876664211260659292665449453080467223969221541179031478839642011093187558574762424999953052269680026408388999894170108416916532370159310822306602527242241530469492050287644560390277163182566803384323647099694707514050241865025172990171732605422101252357761063125476145746508991853078042922923153532784863325897244500645080149943359682263761150491526758875442985583552806808448629787995518297967314995455444994379911835022316562927851501506714648033621987766605002273618805427820725655255977374251338915726717301436930699540753512270795587456559247324929358179682063943525930291478512399288175042909536775369829505534083212059067254922352369906115992953239868481254701706434450589968175259925224821181704186062671131863272203667288350609487644222219885266990254704667818169376769155049017443906498172414816916890099409769355698701114433211583133920680556670543334803812761075853503926979327958677028267011586824680244161797749063673065254240231260361482750693784287853381848065660924686459034669880024581940263665796227271840581998890059322321592914679410594646741924022734402967264922935666215241807910570827221059060464009439431848275172279807341660871539626899936734487126312793753112535721604037917984956372984344255463503171438382469687784808103212516696656465863764872965099254615613949298313368151770793885032085655010703699302801830837233905991992846971231980083357412443374790849451715248332001200446408954911292590345506980059689220419521622573695142800778196641963819347779781464898335945168142382288667603631444785921490519524557942964428371858887048557762883101800114636975374788847139768098532708794734963700051171553605854224738749839228186541203233478952754225649056732496723537224770787140204485344097694581527085745724073853845931749145068705119355469706666814377304194353069473678901721251998125134277321554040010085443433214437095962138168614846132092960249532502790475660773357322473456633740763590177329302651667558515902026192312270713340464664559379349881654479834848594990705911609377850540465814247981868919471088482610181053279395956541668167109033136996544482455304496236470853311516882696402592860776402528524418974654229171819383398946865904742803905698663793581648361428196179753345853333461596621837135825352632730141555838702201751706912055431454254203634774237836923223909207131773115474932364730163918580203711140938921645842472562399715122364324743113226904203354131670331853202038093577891624766074225030436696861691740417975054973861487048797975263899852389518576215977484746081088024774051070273517721500772048423662760209959853087623187023361223489991661522345358861206297468468414945784260252914834291908620955283686325996635431556840870693679743205870610728458779027093769106719141828673885454104445364754600645382978058882615962053396551668687164543905638237796969580255230943486680489869121332795004537548997958551443130441850722739586205099809291944934718981644248935989484265304140216346392928217091155186286727301198704575313127693210570021741771212340344380118361755793120626113896692172192970189671397465989966599783019340692909894111707602644029868632108619976201596557347762747397731091893518315505744672739581394668327454739383784324388450118021530254822019582999210141345431573532702238498543425906437633146511039286213901077094205025792484777193934176232100087114080513255075225408076979438243093213287700754638428973401727568608105385331184818413415120264785903581965112782059251324887970218309029080956611905522342577055153160171391832815735671709202835679972770969092038116768344576380562579680049697638639253099672180524573592630287801479783485556178767876566817915901890128280355298145494997577366648043196995306380682131376412607852915782853539523955091939553876816718814425681881438067157998112338527064687494784079462240951494355318688764824947876348896064548609507089718328708924674408381256787459001120621378520391261981333895190200338539428045048703611100501650848998205563213020524635315289615363581537690207298649864096548701931841128460211285121616079194250546369128047149913251323864985018928671318833677490034910282824468791738951513347250937598596971700525262274478694023742540145205474422785034665365205356639213190996217496924563848079577314325157667502656165232690283638427361378701996292077524391724943161508199500251567352164469451944314191201830196953638296355281391315214165221286987409934439741065567042555182155219977334605117051211162008552050535337492427253161086619689944865514767300074434538675912676999280216534587905627238194494953260482940568293400188546300502051046396999957249695964663901363407706222747131851011821193811243337366829604875455415851595817936629351826829550581136476539437795010218682911765844577711253228470671618789932794676490380865767038712588269058013669058792562996005423843803791484387085411898630625696125013546418161882721396452684841294493269501195578664340234891466164269467677385637878034293455809942446434225495352332378954730697473949178984606491568133276987301905841355297400053577386173285186611377447749125561813289416475082718496432897380687562954485268216052656604982175166636595368316816184037417869395475854625707060812970045553255755682765008637058611255039007981700581445526495567716561151398679279392913224930984914722746088712741496204641145240343337267832439894946010794902149269327815030140928095537137424419469957191747582125977373974416010362400064662058205735068506653620358020091594077058093709563305635394365888951703713886687815595672975687836297163978303414380398340196256886843057145148086253019606251959176012736523050890982883167224531493046576153166202984754911330805302122877672209304137806534926332672030280601402371820660980715756316306971938426266364136014397755163537944436183306688557521149071947401065246665374314986299514968125105349134395472939146400860609598580135850530756353052531369089611571602009716057411639240365265231216993694267378520425490736310164525367262982354745486129744345588532922894054353037220470375493150439381833056944970888892616077309777316341795883468143310146239393066796540157579427902905105575396180637339329822962351442704693893990585295012177749307785629674984186894084722849823467988780664750679693559534625774528522993488647132027746755993238476030751014405149653809180905004415744676550311221411267308377184686844986249007487478788508392782538891486397947112704910062977888061362065836091013302863155856965856096726458793923914795360061925584765206205171434756224518649718609198278686690570114973663391681083900561300317422032763346383056548744255119690201692499045660273674439968025877769274188305281955507982278844512623391355402464120401117148098511029898954726889232385151020303726506197952516637537419684727644750222404041929736512483497879491116484463259316053640341152264383400828860691401749104231010185274773199703770494291362248430735093171883754998640079602962659079040079351016071711191111680144191437902886226218542004288118985273592852073561277359495283785012899821803960056421709438351766076034988885713762994657577069723317148951070302272223238754526260227628439170238797495573897162559693676180431590127915391824013774025745344743489766655187683613196825687939071892559395878482535957800662063722765871480796050452363686958159805963927717718040700130441332294899530200297519615070767447460875457173269654053182266680123894729972709573570698706627270034433323209929097134664823788484666779312590125436798445066410155762650942485034997893787224028460212608271409888891101832339701067151190376431210470677697853810239905340357318543088596033437087441047744357222850669065868528446046740410109557825052671697608704008115043754427611790290802442242197178818583202461150101668283595827485977845284539626583718745260600144453281308210442940609691638369829825393954583995698366266720158971927855718008153570289419638691055692609193578393304832631971933511941336873679108394602640602562097556694144199408702985966498710717489164632640898761368752687108705140589757820237281212812473653136623398287806799099262908394484009109400779936356676886679972945728534689830084292420337733083763707387359460107302890472955054186957291401602261166979427665022210699225524810990904147722777293253830299043537994818526494128605925817350925088323444808096338513145738279696564731850349272008307820505114672631691086424540539543915924116257585875165597466373117844714254711574026661223440392924078451616713051920432311403871515113100518727577685639388320691776988175874708086550198109171131010071911106276959402931457385608422763988528718814476397814403552115457745096413840806325350585181288716521662012116913089656556297188715085982902221449994681630218437964936442320787391478216687908217903058261221128100585640757158282791292148088017396304829182083856116576696914842166432097920147620232111356401551165153489559661815514199982279638812679376483348319464548905923211042034064419484777348455290858798391526838102301379345168508032358556333110301315859339863690258679059572710256382248585394483092186058190443279674645328249674038450532729040355220463492502022446815663125456493901673386199636489640049010666677368429631921384546418957523730405383304428565397535515818187652093874534484245027771357268667721098366735200537472441216821380420620954504368236682393275855126238039776198621321282477911713680118719544465367875016153686707320695964258722040822975809759593976906308805244188511548948755947543912746457738061565530716519713167241081134918501973826739021484172593069513499777141328929736443889220619862691489015649243210929597568564547430948813132671040781638452369284835944133923240780767953175287558722117901106695398470566569210207177272401106331295413031614114233240842652452039520120577789477112213113151681038394702186301416182218247167584374421196913821288796001954550153326787772982152472873940191552643973037381956032576392763553240937704068420072583921057053471467372933417647188614551861876072347018962154219975121743480241605411751024300986478918975618499472073146934217998545512642937199165055642656035521248653183517787719217771774678113026792233128320134509150459329079579221641634322619683342322639111798635465124959513826815422uwb;
> +constexpr unsigned _BitInt(65472) e = d / 71uwb;
> +constexpr unsigned _BitInt(65472) f = 81119048438667678167087681061547454956381140139384237245583550530711468333938645409844208679849133854327057611553489468128164328035984847463655845071788960362320831883540865379868695908177633856753875928042242813143759736902234615262784603349439052388136548958388122154196710982058319581972751161275633244818776656878408368619251890145307362029151951656665307449952950058545413678359706906934219861128762057927752878526888300707475052550567207218048464686590414329826011899493877618251612171176743649929542208704371790742051581061564924686728630317826783167436874223826889941491613321988011685915234856911937130079954611950479372405086492241563823732858570387693419963851277511423963831485548548300094183848777598065592477874361374791093134495858258772895350156173763904460587088304626080634782396169079853496729981933220728341579433292565018270340924969893176586137517212163566854668149084854194514540512972367539162773979546948405367825368816551439864599197623727447961973313852940189734097264773581223296564673086780437949527333234617991653039436427470089995629538677536322616344087013847245825889785129307101277587565790413807740056128153459347496379119475908790478674607311021353394024326546901226384866292029804856762549998378275395607862546028767887582384886893835304122473034112598555482961034975502226294476263955953414070184072692312251960704831523959513116199602910182193757720818611785611751424872435670755617225210397949250736289480496031229147785822280915073807228690260594124922546495633080711556467302590257107613805828154894362406553065122318032375945758669501668531919640242996141135537856152350704071206074158995802163298941744429285664265346600664813581320330085506182810969682362910556467384482527355881041049958578983724682270051978097497573988595202306543328228899366535303141001836130010179223955484310671691315675157890298161246314699906091629686102037118090687227643323983661402317966793329148608990208151816103891551217336257589721797279511678677607962987465599398444346206660607675612669385133994339334001047202637207070158304634164621649018083846364972854840542085445503273185398635963127539412104744443236732256410064386842938897180293501132242767965433327446407714979432067107304996848947553965459312857290102292633778071925103855561961642689712171066326296310751014912350815838229102059282801001807007546862384852431170548875729913417313449317847846268130604437245222947026237046389351718642033347919557634869689872939487994497721319996121053479869301217891602001377463819348096214595761560042060467757505786280651084681880163047905225772849072707850057452565822401181498495553368995371572225391463960379328369998850781937151047607536666997565456244697610971794918121724255472143489722289853957819365396078455701339705550882833666248654901691646941516172619659758623700966761264487839045597711090111609043113466081404797094428834184000722494962361259142927215260652320646674302376291741333046218753795318533934134259021690347497655704386411615592650870422342229618987816769323769256274950493247725841212690242938711616060178642536645581037848024744067722023890268818663850692404866682718757177280591339061114974200127926081733733018102141027506053391371425739609259095336710641686739798192412331252101710193050506100630574040807566296147790678793092821503626466188997393185623444459684752040722703184565952637890300357344078236773703041612119688753710951737983088821404522393324152283715757727599156198283521860165529341197148175466397391445044487934307253572874211454446413378321526991472029674563296210659444945015438578433530023303317646179730757486551333547484168809553116275681543554769794852111447172464324820230195235570574101222038053231415531130403535642101014250043829312952635775623171615396151190160824468938979021996635823946530092873435448371338356467494980520678919103994679971871190574979116176861082978687034118804828671405005458967552089962593761753485765192586963197333042944108056083507875173377303275821279528360690420915103903277555517739176118062387662726531924427886263223467472756464895276108685877011617074604870503329783376466294167561256118789414043290844890467721215980924736118802611717469061553985464403283105120058553402002832205225756564480590464041062170054205408435207673717764462878667484094585324010615984002752965285598325142296404754671892624212410092915444222450922807502434260509517936530681719400385179332102078962960989053304307903630987068328941572686913884437211771806107290781422240094404517925939208619021498644747595753667530534854396116308693966724901034910333882380323105599336039992289396717523357770305965180968018091683038560418513989593671315494952005575641589066096424514272893213280807203580425404888117237642205257712307303520976480585990631493558802249597215990680727235727680464741106200457940514707243632479374697310949259806293595605426504156875265643852486131696413469651497770625614055561695520874734132569280184155330884303541927274099444596075460312500140627414316921245782551508392694567926458725922156525134131912620565629563745424477601001002834577003764301757275006572898941827383642087739961341233316802079286247050240864190436485241852367599925843222354834508189424267520537148646435669679609916702080455050518247564333696291426460728311097975896311205794873263365251428440180820526976514251965060111780918811290932324514544775320372515644899646445386297030021170451457124095843775923323648641302287349569472380872468981315675312934595215917185742254550785729284384994468474362021071156740095507340126577833882996928879297117957134110697823557811746768297256901301469847365366540872176266513666224312797304645117801470774161300769414206440106647681505178861726195178070504474193201547152440879140147395354291118092097766087707629160801177150569212616669050339675277783278561419070471509958120627858186869286180400810179621757437463950373570215026972271523776904898375864872682957691253734286904820890912266621421134519912609409321158405153278383121089931663076724394859447175761223776998781734439316313779725605736797116945518910959312627147450807693644698768186421543176062568269126135364923107771703835943600424121438954027487338321722570442329551738760412623469610835330959822855143237859319003755140931892768237651598726557124619934447707062427209188221064149521440640066748619847807496914428090027290892686426829384522012606207518375267107272024760472127103492224665241988704409301564171603029155477114602819662906864324804894233432183235006361334660519980228744254510540041914250111138836989771057454654361547808598933184456396356506645221284696351504236067684263932447980859845924807299229049024046473245673203436521710994303419754660467297271707120629690385943875053778343184455773738237881501082462953248165955808898084784475632662320255655065971913920219022035914633324174732177874088438600417796719490628693272667960011196066396582965342176994548255439142090512459388501942746352045185426148002634943204379246479992639232921830427033287155498919776545033968687621234093949952909800026995695079322733909577094852037690747955182561930828130036202145179371869408388913075896545961481134374398000320119002595527049537405648113593028246809564199535473284898041084967534286644400118310477565602342339149979928025711422687497006581756870241948832788965327620211873440249958591482493647480343674661352705657341579860982847393587969445835000305914486839931462621936881997112355704793534251184118769836474684593365406384472677451238145980115233631239247091702886622282776765570550640577164254082902084481046445184457510053388880609565532493436064593184865796251942514270217511141402543672756335480006142305884648244473831525460829363634009149069107713792592957352156655644528612153857814065482670082433717647773255802209129658062502706566850593441730666442893080895203992967625531811586694873773329205655322405359033341706687324384018317037001782168879764687102213649107684017881114046056973626288368923831980412157547214430507911000409494544506938619432275414478439064152462285377461223295418752397837436482567742872764397512131024342672507526733360260619700643186477463782694275609954903143256542952944244778121152941289179788480630575079737246115747738710731162393425436847859590748398447899233172200885163210339069282573128507741201746652410914892598843232556714867016096598036327204404859186977944018852154292950479601707726551489067324830725948985200010822771865994042549528143137537234897029439040042099258593057347700830782468002060943008703943539233162564161925283351163593564000534389587666012967529689803053042601268511160410637186606459825374862793733909559137035783365120986108633756185235286103911854615676281592264788454915332644527001118582184317205780738425507296610451103953245609660526224451952038193836909795487838919754293279246980412412277469667514578815693400872697826159671033387900060491350863625690886949607407803017489536456543547449575452205017872347883973885053031375178228655676446542688676430489905336895163589876370964053761552234596313318661762645436334322498036180731113807766213352920419109181566662246988745170550346369695736277066595184206278927540272175689860604339875001317571632108033143340510285476759986347610209603646730491066476518327502915964009738773437390713106897658049079921025910397086352600630140473861970059325940882198708598301803793063240941226649048055739602475710328647679371343726914399933927294112748415016048578310432314612655800678443667961781718967749656812897847657802967169299415131554072494120795622870359923856891605071616981039858332959855369188625993550681663399570012356032290795384164356201731128172530583544055446571588461496057995980051362265047609949782134422377992955289114641410000667908324797515059271430856942076440404106883511530427157381337099588682150941240363697805807280391816158778238762289070818367605192052103908830159642096297615269980255859671250200610730249344137390151207031035250558274035825002195793610549381991958431852387163377257799558681814523416557997072060034383107573558276040572471843576830621389193860813697602418293653386506782212076337399903209307214470100317235761412805710850988359248318598165462604247385873981751694346718728457417932324818612380916204158539792578806888256805126676518435457076849655151856936357948664784020095496222964185430323976361450038602411831033143981782139688999603806697895951064824131960093159480868343924057343826438855010476119767439348362410237725083120920471869889013959103517616051537640818148924738754354089158457115165537078046425536848814772861455928301259776462563365625720593811805541433460027991668477245734380834490979189946819375364265114193907530843496079499570606407645546816451989380123450283611889376947411971083006967171854331483582409116300864741032958931152422255907229272782370063366185455785561463140714434020616892321571308397688561765568218590094663388920474697495754115827676909301461896579867695100028699940482746731097861581511867012590301918904848423473482044669126212681353219369262557674792141559042307781925390412160830618045086937241164165649447650723634354457142234648420469253813076126735987958558693703224345904768090230475931054961533525465895971268945384947233816059121648653851353453912800961632935932861729834819069634919635535224730153324057833673435077653698129140436860433080504229548612604634726787499023145026639040302604734451197951750210597736330455651622023033797538538538388047038717462186292552700783681032951322029660431854988718647042310141247996594683975241674287271866496256088758252070549970212193934302912289510530303203831345332617060689084866476564117717848075568001674095145292184997435515321066836286842449524618961120843546331558247350173766825349931296560241611815167064564222077109455628613665751622910083205972562374990491989440135610674632037756035201220531489214743233527679896283445539353795937582940464566820043656823348330117257561617021315014049449950739422399371130289848322210348793026445266609167020369472192152933194603981711148733468582622132685224707344961686050084595182669371775863549703595858015823029362059923704401908771829719157180336503430116716548633754689680081817505016700333755593763797689012292844579379020029127375863019884877689032184615650546270273754978419500607831225684508776090376013315145720095774198145351621403429352951733285655442381483133062462448870877207237218277952979379182757247788452029508696570488503322564296655547291293159396498587812247048810855422075907102519074830482119974646632454684466511785100872254577824923892646219715283408023229043837722903387825185619904121450017633423962806734053983934885694936245030629211896809296229178870359102587984788832764476132123860284993319553254333377839285141565016492722252221500663685398500037288543684486768039325272434073801963463430942131045379202104691431436998216258579637703636865411008126921082151389068001167345018683753020006635937917955530346905162334685025167618679504177188090790942946213285536894146220921886876894907949473675184610288598142017504617242654104935121705029703374353045210887017164061794037910162870959118258745823059265397125649060836584712804805218669996212063992598515582310270762188378921310553219011284838436786157288363931529250206667998181297158027685071735143864929936838618916161453511377304799441674298890606473463305374663350676450748359348725937885062403443723509124094601154953488320671752278073393621467650971847117076922250477511784298673658861500721612064575807608998895607851644295453391456454531215271085280924936192363348006487557798534384978443971017420514310413011341257910074101557496425650045546328569522751909127274474723854148277045201115758974699352866898705983402808577306498669325143473424401614778819080047903246862154326670516656908138050620886701703196982970872862366004885871348263125410814963357269942863134475202775601444469305395643930624301668737708355311375180156253322096137444456043933566859036382939967257430039603258368723799047389083839037860709580897208871869627268202249353732838171824296209296294548516742651643397676384749036910080620422686703669742292285224805146963851250167147621958192005244523117780154638357434245675935026566469741372627933840058563022743977770039792941923366831648672050001010333404021614070168174891577961210547481087335204029860430074623406526352168871545292621654379079768226371019632197882405089965244441091504957041079111109676293226058631082853605089096750145815866278653725337363601678627338076852854131594110446067843045748196020864098897960603689048909134722146224159214858620044517227409018605296559371894118327828546734398364921268494096918767605212134173850356612880499233235875192216561439048754061975401146302507573162756351518836491904543648427377290672401377607941743202014178133247052968916763308898658059366804112593142747772802872872304011241156942330917342016664825114824131243881038959568825225716955297062560791044525662833617673328465929407476131817005115131011425346567647872751463087723497711057993035067620531694484063799218004595637121150717217183299896785562805015987083726131098938541665352678729793826691542886712254454230735695807236938891382873474309821108791807902851724497787728694301469491290361539735735734028169861741514343551497126831500670910708155930812131910887385589358355422555285375252543773821415062238769615036107116916346130894926104313380154323093641810144994084088334595459474978569275200850715028129823788422826182776550189888994189028571671614227763000320597970917330215486637825461852950012215677075728416669389817388070042483328475316537616864892173128781529114231771457379262706718258234462542374022749406522482693318623915313361505582138590475914803913584557901835727566996101504851269428252388749069741603720981968903953766184268334938276196004132962491389692548154641063031127046389922901411660834127939363774203120739133359618778189671081189918613578143635540354473049602793742448779303364071952500394469313756206252912480887419992330960013802381990210410631484072902902375998459735022573434286550488854404225499410437440899765548675353956027131753647660244719190071121180046235065381258093864329255300391061722518798465720681617948506132785891614696323904168697255418185414840320826942738182211049148991865561460552475257728514376004626739858958112783218822581938659995258008366390674024417559692051128119019755248518826335616004433962828701583475168064968287188646214245436116135742700974241192952705901357173335366072427382953649798775310169545613750921035354107237850806773170429868305977421534705142239789399817358489398528489621671100995785476142590361642167601419294639340535073524003189021567892064529154719611780384794965102877185634190417678554972476697592417945100762958234795145634183841198575605036693361890914066638688933804783122003206140851517845351284437901254259517963992132047440899338576461272921447117371152745656464026628310288885368960098096395483758646172667160452702652763728544415019742833971425823350297849878891081549376274324754320377470927375294403461571445568047178227228649780287407629716070804833784829531827100866306285704108381700908714688679792170091907185890482755056663783653285850369390801734159537296613413088952244635065103645191579854038158054805810126516527000246940559539553778892449771733156126807409645105473768008808972072008217506082220527464421397385482291529628610427697726036406268830099560882593282337035370709287350673933627663463610202838804830135576202990273111350225601975962441083015431105048646343759044877770708388334099167417362280821803262543471360466340830978889317353377750218329560019091914123445543397162385202752767669258874323919091915867230744011350323401943498133873125741935300069150865471338673218318699682037848842960704204726712036770403135645242073535305594100787208225387595470760974598941367205963787787451921872637551209837515546984033501137650105919525019782774083428947486562538308599107816386191438690298067432065274285152619455640208329873154326556265218124953422102104061164759739406020007771447449633506691053566567554794290137213551502841022803374066829191255804461926337382291971071657619740152638187836068987044078311655693090136890581847972811444227785568598697490213744389532539849062085793434364140569384991142262252002341633787983042085815862009284930092119956533000012942039931918424874436052309809612076045438352507919301315931370884026985545405614314711742990866407383288963891689191987720090661237584147466664348258734606093419545193907923873057096186600080087829790813417721075180297238453473507102656390704903022463507389818244022806666755905180037866359102638089631182462270862768787387368570734224286771986934557843667679671999977789368503351679562337657410015516370171000888537444667506161377038374275576286219252222288250058986308656559322111651560979152776988991823243693590987572629615903838137358071995845670867227876752335931359417336032690435719777074026099760429651423260611168595239702289345958194686977765546787012516833388024556329306161090878811254191812807181148398358492263376089635636576122404761772834195976106082533669359788834602183992961701195820952116398799174622232396129037427479764558336883762314935238157985291895843414254671829878324339001987738619891291427323314592666630164935825946743743891716827463547008617450634928010342360487247773526521316117380620849244670899334798193689224088577441539145108966591940250014425667966508636518668132105272814102989073304527222247595005692471942155566669672508265839552263578063972763273633393197633385588002045734487191760501135491526337629695993173298383444778411111350828500653946760200905423307420627645624295420909895627482832393225261330169329637488004609091139880602114081817083587800642684902092333638498363749375561841720781868464322821196677454133629871922182954402660834327698585486213839832288uwb;
> +constexpr unsigned _BitInt(65472) g = f >> 131;
> +static_assert (c == 57377170989012975523235298775628163096786299329052925173791514226739126998299132487187540275332383345633202443026572283244195003730186546233931040576254981863691366198241646738582443836938118929157834265839050149448112591983102709209299379515040179869431043477239668452738506539490676389953277690877463630052873929146723173084770756201506988565759265503385683595422822915381435833997954584133804797693715376511393546428928468053144514693805025551921210093099095632179601519025351007239644806371537347664790877994232302065208364877919439667571152385500660502806582630919320611305765872100746931444315248184766234359238222381740447636693461661322019586656052268540800014118990950583495903380068020786002928240326898431693869995996718398424733979832452475783024656559268509404424289861986444627782117438848327446464800529729964729718097296194135885144761895936794304601810062573606092269764133696154408339619752939837601410428702087613619070704348681194015486008116310922595347812974165062342557117212169975803171297939841250867923983149268543209999522465395376129489798925020742018329341237926186874665814453600170581435306674792594350254610887598332942194741495882331538862369813458167400580253173723189529350263994469744239652974208595409783715833572820797712603002019716179307138276060181701674177428736049429149797664004611079956017295196252957890844127128867677075049650430396318798397551429060988758309683253767978753911099615434970166708870436638501594171804068269923661969833755536739123593776058456130540504821096837471150421391045389049925726624976620799424653072940119200833302562438007537447404734386131521034628578787348919469268813671092767748222787598717204014902891198311288659886453038762669021123791782745284995695243470021516088024702004980924874633482158825760584623238586376051678961742550579964436226750544260417107242109791556517723299596710714148703737310949180738966617948021698482116874864385210419740339388941376554729711906521354048083406958192358775355325345507072554884236740160471200259192566137094372853322221762223094632248220548185456945141125865077645827772322028652990486811164897145703431533429290615187818334391383828077139094311820133411825864375296948673419508392908735309533794376305482404486262153845151304245674729526505850830277816734660459648523460411806223632018060140822898787537826638236736751423736216559819748923681398783598859809563130523214652005683927088749355217131149051663499588885886330919134346890307879961324344245434284594400898921111984879378661668306107937578725335792263176557153878942501439033799035563039116379919159618164339126594670691646729276045965557011176383422843664479955728477223045422048303147106364799579008832203805312334786141336502003121104130271974959332146376010884841925918029468341023983319772851851664342534284512591451020982074054897782588530597448807380584790251174403400238997787446351083672030851327022087535958506159285135629734186095662860675037323703747160879949801105821048487074621182257059586398135308126409584794558377256124386237830467323837343503362473680381578999707526775921093389038187490484497312179534439889042136882192310807394542570423503986970240038791539314459588021661648933510351172260677915795875497850781049984891592813453981194596114978480372421470118652515114050411513114649187392927390975279222243409044636396912608303417495052035400225075553781946329045094985071941326489996016916823325216289045354447354144050536509083841785710890721046478853309021167099375188018164239801696329633079133423287468617852015848403194383956288270065563643315866420598807502505331357730461671330715263435034824503558539475524688019896805444836262818564073355993322734575900524731273000040150425301379127511007660411996040079442458594302495932467555744591017938218516995885228130963020666374760378908193803561331317453562691363361354611668053607744081182902070039627101880107640659696080949502658725031197348371475602578643801127706709134367012875195131639234938755799617691766597157349009302256648315876942533494115962323538649459020329598000862487044395337155431131013558695846554105884176417471347065293777152594575396433576821110661608157633901890580575884751567213983771538554347215449337912902861615102040695523346094241892668483532972691946732806677315979384350301454967139053089328843395710175363423404688529792958672602871625669473512483023574456170726531260260946103622337174958678711850229459265537116921432491080935701898552913255223911135180728069171872891062429303783287026009016315716944633919378928825723883165682544428615042779534922925502649177799213581158521568158502446397574489100084879041497110913323291680911234810644190354794668172165378953505813116318874451935588145078632980031353728507979825565665920315276501835618753883496574252386528550555752843027495441205710405304638611159558259785718071260837463137913842597005776779733557923959753782007797529213511124469320394528648397077071453476382189330456814947262443238283693818278138742130574846019552822985604546612483744887207912067845279067463815407828656789627494881030985107694337930545926547433509012296426510716888770579076820149279306121299381655054952027022977335524127091352403292373008785990716311488261080490309254583535811987673294043461070581913091893080936636115904845041902191703523201071787259612447592676792505759677966780452587431984189514319347175891229710097096365686473870394668607558038051588936187179612143798475705278075384349930191177322696048657400014763260912331412279202722110386136894083215493922629076606190648325566402723954664692455059976157716620580788754045939267603789964810044706415968757569230510841226863188335626223259706356490036456648924181052223770415859279916782365738594735517943035253936284458160249089252540393577186711907727259164271416839138540376190055656600064257272234066886224049144273431330413829645578960245276381213558329997342418781219387097787222357594015898718426781092557058092859739532385394368000749767108956540818781858459815407818695572901424772118023522678371353095421976241418691028000204265310601381761839280887252069818979764758504220831106501028185521829701363754196239360882890594202775941577975089261586955359977289873278823433293541610042350356067122216096386616651954495143585357708932399484513598457803800808749826728824363615001756504010336555895332804363920476806591766278431679053668388627603963885414289439458464070206722458205258166950802964072814303267777876740132506958968087233409171300526778517733904003289371434899975981736840997906816115741902851430181786713326181575271955416680098293696540574046267437039512151785873275668761543850231612184977894694935246302815353707626637679887407654905090274043363509917967971055508277358228255261720032037021724784380712823284038643112418764060083535874850655753002234160156923784288459307336864286469807863209068655601511818538160113777808067018484890368284742927677047799037476345520137540192632669168740608456730741177178877910421413550084270220952817191104038929625042700621101042348018035592395814083980607333923224063214017706195565269113470819118710389614439662265116267024838305932242153012585666128852756106428935734739343899090102371508357315778430818082281612497811051081914600448559972827189212366348562276521096863748564522601522836467489096204107031943168847093756146432733254310510877058981575484478312475789678500465693680957571230599200379811794899000408522453208943194637533274877838620032444084054666122791538228798508122274105344560918421660909431966213065663391903510420571528276287513936427590149123153659453247668880384252580860685522708929772391190878613569747105616267557722657970871999598423567174785065483690942999650200577908282136131388209014355457877079862945319452307119868290433386447955204453003966215305376845062457862559139718646506841289184761081170379608471444998100858013325063048414873814363324034007806940715284690366133104298538705401413557371978650782670338051340279530280798691039878257086541595412171258015869453114209998969123972862084269553172667362635960143002024592703543374501375512557282260274028696504420109848710726436876464883065705050998810792120677293673583998993466899168700267969980764897320695075843573224646757856180890382606532742035206458623542872260827143221389848642948556565071800150434517846872802324425127417431258428308071963629234948095760674934589629845719662968285652513693448668835853248319759608740716614581476514221999640547376483602031471307813774135163763491173434014650976791905327267186992022483428738586855935367723720074384474949712341321238520301025597375659385656017148986957121657129834110025621044271357895265671534892080199098542882169009910595958948436713380345352476106696395360258169682211637750121156349580825248660061244110679902128745055300138269575958449002147545083559956031766052888223796335450194196798699171795633203904189952604630734021921921228481130132654726544095150977821187685183379064045353585395430267018036660734909163408245192359244775200076206192083612085469831577941861884660458350283992377091411231055397542746374259732042017861222505314111940400302860724642754576538241456722757020830634425778112251617404993084088417047747816095415008603440403265658423226973486739184425896621068136329186080532906608514234166760300199309364742888015621211710361049700580845783432435649614154609150154965516457170474710283842159665498124060704063464243394363748028511484181185566021930604608442079098582803126446325655440082382071178455425117073958830180290107139791665869128616263354737273232374401449257208137848313191868404686893285498673666589118399129431182916868718295567608644291712503538673835365569403960548071551112712374724024300579550788961323252957755907322602925352173223841819786388258724508632493133180526462059408659358184446424675320379981399962127170881709631055197700603450530872723073754389614635916391243226051141922253223341435262139566512605879149585490301218536218492434309804115534183183083018503589744799382318105456137181247133285922864966127225285258412932181055251103552380083065848295160524666765105954037938560153512546040572004655023981253731267348632892140022133211533705564104883758467874449979015739375589192513424564175325796577444797880730748118924718286215363953834247825883843595483956382840139139748245812677166028154786715048909442194090210735729291510042560816853038961042824725280565150515529600968887764274505282171965666414745578032247009048757175106815836725918393302152718345619569171907146362247470520055968725760858733223307639098163709096769398640712618527242053179932441956104932054081703891298390107140207409724042106312114969977085487037664792203603195092086448281709223400676668283610504698608636440396606026189697499708152165350439589551766455030801757402906237697245959849840715231668791768500635301313036422757667738281442199630221346041492905125863155557817573114446056286870330618283061980463563119055671927898971865795744097683907079998069888535818762062268092744398622042175454225957004435212814532543616097338938440636633760068444824154299043305340019556109318202522362701812949888780299273388613136975822732556342715808161476596121870401470789675277766242452731042279597726209189388638578732487045756906229414074535488399358987687950637914538413579269681144908454883498414796024816282527308557576791227134605302838338307096182103410790870363530944179054254517330982268764929562387176562572373243832876072729602677151703023053348694653148509610201047071522702697862029532402007702587104968360278736656675538015138000711226530185640098499149143684089184943616800337677747604790252218278882721763582376598723368183425562453278578339141336589135811587376152040402853615753844089939155790961519831882099532989537993927199933822033592774496226679696190989726222733191782650231166839942077425437951502569511184735236266191787748436290237035160351734983084840658965538422978102631057875165913971869963222524448095761054981357243107880300789567816565621063245987538673626476198682322043087378393011275471833331032176041783645796122679515181384124221256382917493817352948297883200879490361107375062945755165012792984991897216784334286583032930127727950977500557539764397169634593736811624033437165187826915800733863530025110164137835837143858119026253128528131272606689212604891831174209747753264967100079332465041072368950204986256700096244652876683043311570982466386738966312407703227763474714531165388711277536518197832749220599331961515896900293431422369835847287434772881229984625732732809789579395508115983718421682952414035889213306134089078201488106234745234057614038446948235855188876995041443055843357934050591293112753129809270691464471312231024917067466182223492930537547372916340919082770793302716953086664515281644394476430575935749121783120312862884889459242098791265183906337098873988028596572796137063072081620722095516813043638849671182629461743606866372989070069852346205995688805220455004116397068106330678416424211165171518259229056915374927045569723919448383668491014996574632602574252467664205521471365613967081427059374476089018459404037302368871028085916061759010423892746796285211966092710008134819655582457138439023666444944891530723560011557085541565411827972609059229111127397226427629116698421983897391398596219832987156368738782594437893023941042701424644414086708556238888746645033835725629988268773048943265547341371481032993137143805554814496307470405895876302058560230883482430776645465119255648809144708948636412538342277335275751572751372446894792228421604657166669773903269993295507978493647505792280997499789246419864086990167630347037708777224613731254119345052268389188171507033953296428212293624965778790948350360016421973394044452412399224266824898024158536148457434213366242733957796079723623977022985608286548054129644313785693790557934374287353233328449826608313051205376014241926948821299136734323901589644428629483929404221881510853170540833957501329075981265870145384780426696760450336298399024944684123954304186694350139242512575214055573533219078625595654506575681699072565203146347216173447335173123370755736026192689837437929370388699416297158649912413517250011432242968265199820201285954144825232821959165666107896169208671492458377776249215787552509646575344647307422465423326429392152423004052360721153457253592949492403097525629910898420163145166185911562561752960199555784048725709249291792810374859562786645742272989972525467622834487038796465828018426717594897076745074463811550754089804843219188185754124341879969296851829036079963082578199796004955232539652960074116179854894856313316073228971848360244723519616575592369250758341622753179190894764703211325914576710306847315159357359272977607375726641672685040994533986221234325996425307431022601884076697597718771994081708400850415985438885670427617951757236278628683577635266112681530724520278096375923533828352912752994717601742038214560209829690103601941545691441836366234036458040814909716174697885680044935700868734581083573849480267460985666775249982111539085280548230383912709829269012073430170276198172259222549613119555244144065338721893308260499561691437254744496258463236888265188277309379773682417603587655081001984192025696041397088330848089185614182955063699741218308992395171698220373016511483143443914157690063091927155804132750052568219978901565229763640612932719991842163069636528263642824212850805526813779797173134680215392114908738221620931275033761918515875292410917242397116753349825223691084466303739780785210585338299769894691620987832106771404824371801492797870391049671303749323050453506947491626485419737816893010971182412473409207000775812638914070632597471994209863137354879852769642828700378752373576530481451944237495211162201121550860395431579585096479778553146063747014637733526197508493057244777265762428056676020077593579406537909531604652622404267828393975246026762495524363575072904577510760049700232052110480162986516841327268823920154784702112675674033049099998907077096907316402674865699806609843961758901371850487980998849092210439390597163549631211768888555269215452620335390255249686615829707293839768465425303788650792317601584256854750057531792193110334592502237605428527575110755634543303600574528336859910106207401638044386816863382484241806254105892047999649236826581747985698151170965639418120843859468883710909579864781169659795385062888835113059997374070933051254432835144651452730460690446338409880966109457039072896467197514603531894666236916522063339884216607674422820547061878801890644407405005297229913302907905989142668962399330477905791788840993859339189448842702091821435290161943846990838809465557802272245361684376804705730998196227422255998497531063186046339388885080315344924548852522156309817495246382182091170182813397207177648238750003281454020706305986631844082852382152907869276567945287377011407831248292719314836933657948720370725576463397477910330786210186110542846909059570837716357334196889992580491934386403646177787114125991076575215594071754844512255300672017006398520493763296391312546178465934317694364203456231175279118241601817994306053825851788275404207507029742940394885299706629314787178170012288301675221361088585540013652866459345122648052430544454738922623717360205960207988353514027996049637943629561010850822232857411334356832633050261519929532029564320421258733019611313914563382448992228140724182383681244953648342664319660717610251899615717264870779936476907176205505283987266119295438992422272879445907906015678883364811903413095647831590128094339976754886945541457700620475959336707369611589241476492461640768459267381852344960429303161699202710553466641045206393484743062461243195396164578651399435046500761075777202760982601136433411690243839582809040626594691027600401165936716934892278404446694606493857993204606232018944224554798158200523410564443488141766793172758844260998734710961833531918359661619396461926332529677237590199176808231815967876906077143858813392535013059603823260109176996696506116178766611761855554961376636946668660167448652954408060562070235178943688385179029326434626293955990817953919486951544258997832284911755812248749136493939837707432235935529117788085255396132634824496109162108080060580390541248229902771512721078221592123055930108004427138094286568360330563318218084308662991481109628386467855831215477865163776871997519328151709013415780618918771478918919854914154296194468152273666077423743061544950596310904448403007425548897109037277480972163670835672539538449998689312373758669315774264509883124626980967035655029131398613792305479561124035819117691203742369119465589782234509863125831055563606828714918892781085447122203918667819446414276380855205213717119761037741867296869124268320452748990107714427341442676361925378642418301349722555482023301243849003842222838445281521322057605487804319041746447698920151954556062116305184313170709790188674724727302997759172800711920699360802063886569174240829804299999523206760958141293877384569405015559203473994467621937829863215769860655262603133191365334364626095943232408992590739192182246079010986217319903015010301534889217980664788324403254938505200168831699124840149090307724792109135193581334978980453959144421948517385726523748989575197758434898688542906068559717985212861609354436320557470737689343713752675030695577044546143840004678208388540426881739449913507701753208395772678143431446763872789610598910353393327933983049729956012931601687494173098494285210682640867822541915736893597305275198025701325854826155860156845842261912029699309965219373327871140745396567573273856307816111226977214979759176835322753978160811867041793816448967839795503872543666156544717824660368965764738108535644744259013242678154849116803726409914591785248541248970129110386875628233500985207949423219262838418057121695256044990188524077420479497943082095944724774879374625875467782415157uwb);
> +static_assert (e == 925821277647525484046314922262107411363265829400086205841317837788590377458538832566422535905580167055590540520461562173337209853598393531996558937192259755324623564271420749979078242394847832050156888254166767598483964763747510305591639126359672129914819075958398814517972379442953401990418883055801170251042496643399669365177755686881047601033431572385651795547449177291014110752382040436633930697717204558672793488960576787279098167954168025286326942734793133599414999250387371144720519062421938191111560420345811716245740999562260508137164683070430054264232500900945124521840380108902479297191511879673473738073802259631070519104481024176621009769537482862622220299889768219359329111297124699668221641917569303817732214542510786504181161038291046117604515970514526672811868669367519925509210900316168776589245861481601369507782419794370395588009090398256162605663472407280850635481339056935947008829932423384655897146952098325216158501187401583720533840865622926971298423980097871719853666185197908489154572238149433941405941164339863629962456926688887074975888925171372074822060989458002856037731335488111740134826447412342315923072177048815917730720058570926669739420564040395611656944347595783660919740753053095949114163591726463068745671914535691507335209161651500762777289019870411890029385283542207950572157059715527520477577288903229077134225204031621305765807024135459128591564879806709989556044144724419409864377825737156564835868452714708194913413130770477086140770602173550749288483487941476358374943226240425793029573928816763061325585404352031096633518420697013832209979988937372645624495167087838006956364398711637931686740886942083658320656084460667920068505669645778267276911200782434761229862188810376114594126248643500176491287175248925185264495337015989755876553277663628439248038823225602576860638259223957959851065950122763885066887500727281206383487362790869608989703225198487906944156585988691054172626900276649487253448611243172173965980941755933468623762960652828661512425506726804431508944008220647294736023754733222053674360993664156809830389852376023960904244333433588923334584741581389284817600403215319262156633859860850188679280552275362699224083219505525710127532374249163813824350987705730879951355264625353344369530037300751166274140471334366630754712647779420155585685556617881743738385540176977898140007217988800315176487684087116169663417013291370800831899096859531945204190716717502573025350058617787635480933089670306284597585818734856088785121899451066970986106201069863672011712515632440863210713872692755338035103906037807907048203002858238477860960644492643563977654520837191979524337723119259608404421643097049642762164294600723181768063696426390167022298401232205369596435872999952844226940995344564116630547371856308484927980089147780783142944503353476234004345803402965436092320175500244821165897252117110610969492880654829004789895578451575692681704725789759821917190608779304172351434076882695116684651984540381892101832817443304972678790622161153031424131962661319047280118731622895398562931270490268724879492475624986166695709225686881866197787756098330394876207857808917156059890517791497692592084725900225707789400920109586813314313859749022393670949449440053474960231732358062704688307739072616923416724042175976602907009843069284397933767612588511924496143157162925438784118979955697204347276653750979525739483874670669758573414142808243691479623929222974232866338808714580720619054812299696431442314820449670893215407292350016337713376699327031849963391229409806166154760509553415749785479654053067398328168020591208777537261560091226352467020712077514638290424834182192144095075007314808554065801151996865097848823621532965411348509400301385467549943306482837716125484654016268824276633890383140399157026813143195233954156740378621479762034345150366471462896094471724972132934259234371415619656132888252595107277891368873437781551821825058533495432015354958571532246066759818861276604704762519082544501137144991934451893993179733600794009778918873730272924487377741238051996430766968127830812630033209354371727945038509809956393676483669979805775689275281982179924965339949879318260484504531839430166222394398812915504091572095306003803595205227400518578902395452068924514063523522292068997201688261693411544059054356706121760032336098061894411892659021095089202461966720852999595670850565525006263419581038437604503126629135662749715654308249851965705303102225103187660218539056082373922741495192667063495055261427574338533640873969873350429284563536767411909505209274255461102828313663935717406210258786433584197134620910389247874905921114613887579869940542867067223269133250420424105415946176905656458177271017679129160751989239090198941031674944197520677810416776932397950599133491316349287341573552540692293389940564264376549311679136031343692195347738666617353185336134422711920920844399307719314978136465976048410259058164969778439241674431316067395494758148840480886692112354117101032785128193937723745773065158101867146919612180819406775396844129335149440514481197738822995968228560848807717236586943646824305166818267294980444218285644933573502760381857619328308683781861219756248923743795092527308806372681676276144404148907769558418647660002483413969357909782921068829991250280120081201026814146299951127127610072311896011620199302450411006668075365222906756407654674886818542441552830122233595706898699872729786995398578270431009457368799785412790631316216715005485273371082998479926397057401586572038045306633417054489750538440286890689722739366800162720631591247614863608642224493153626576205168863122173579721700536126715014031511726060567243757525868482476617126043798623940056069396100653874617195674699607791498709445954939294199831258859982271624381652130224970790313748637013345915294979530795868152262160914129486516964231044670275836594228816755503940204163740305969707253292074475814676058249561929433134333660057287301101601231820316073168618636908190726177050175247818110578055560560688796401505655932023842697754241774588374583062963381557220895250630953485229368124338847090290027391396907435275428961083688904437823309592552190497059386493018787504765076429185299708053155148710304044373870518043787954080584404302939574749896866935415049254281838639079551782780564219871198249887864355538762502718959259919546646112503328969319950600561471441299743783716668847772659164854260774150186393424240478270287902343520007666607468800826373719707066137011314687880480610962685179005544933533910568379444719823665964430839780728790312908721450954900306036821156888483515412321692126129142199751034562341661408706136051387196710769170808727480986201380603544687267022728636986681325110117972770888046653074394859695327060350191949845163075852867006026516825334372326375162712041928605870230764353151341123717849521021678793350888734580777604926875801033048153758377411158827346523524411768729956869595658251889098064558649587248601158119029099816578206772717002437661779578738240520735444629045137710953185651212029211246365385921614991669030870319446280256529788199452527866424798087728941043658956252705695603053482413759462700693700396198856191108905226330260487967656048816959593297497053665480866123890888084442536937116867351876268498070783630979926035244163040376739878970300224889181049042406027162195776692731462000545913208181079180867135918324675694055853046489335938390647015590992212564586330238720324943335239947287702685301470854427682225668715032890232716014350243788751768447794434804639497493507073621826571926761326808459692590242410407317957315748210250498916986581050910401583890428635558533119546645249639493352412276105501922854605502224127761658727287953742606076981156611923074814756799317499509745248284124488946539941744572834694649627740946208644282250490064195074307292869656683657601797057177721239379124263270290244666779980558690255863759814422128884734790463658210245352187577310420384040290997731732542997922603843129602152306671290627691265725865108615510456430871942239638195209261426513500366098272461907343221207963711153528093982853648896096575798186268665189310896623817510846345533080533140219528981705593192340721212039582958451394010024357999615925285263365111350752152668471111931308588569544125617452251181061448878620016892084290648228327302043663656711357478900973839476344562063251135142126966016075546263553162380720933458207021727310291418840276839446943253223262384684959689512677602663732079938322408518253951573835351309616179244687166025972131912707139495128391953077031980947874168604119683184664472292669848381795716009083871277556612306170920196488394805408610339875406019601113294843242620641631227050396754855645908196677904279556854314392365012070695397607233869733732555354673786608404872112006461237659135939679275103781149663509936946839995722971632218920136654648803799972140417973321580604863072421391340575806397889874629780379074048070658779849462956748626382042782237133987989332960693947107347322070553240815226240781284897941649906726782225942376770704312812547551858324243572433971646340877222604560978234285974381350714487510375554698400191780868985387925205337522055254786165264786273261600448085096706878053834421193793435604071890849941164391597386395848010481495153892474310184632151139545541072880969618376592937999859928026160306470287401211063637917126265042524945623705790523166204475630950333591915029238611968191762728143401485588876210805814128969245566633882719865122176245924463431951715842086750236450006840051564804190408841791940222692500559490965372477515688268253907405496642061472907342914619010121657212579181361467764234637924865485254654467943228472410972274349854112832298416317954400352112014820699718681808295773157325470660796230565624096088825387707637204654499888032220345920989819199754462019497516156333728274845778054436974267467207501484818327497996634691908114728824070307789831590463706387785702300364749922544296903520329009609348748598472207871485112473007786011386600419549232652084046690076837253441970589225666430463772556359249502084980591376994436651741109935603108812045858836257061111489108694386435643655503570595363318133190975314435624763094113576669379299879979047877298240040979391202391964866677228338860102182004962956424168914834364344806404249386400712534763031829932743960305692761446072279764397234750540149429403439749575848830848657812222791117982664155619963998683072850912914322395766334779657728184710326923706111558881079866807532448067057406387379253229971248972229112839251051834424814052803713705144425918750145936376770334989969765941522051562319527592037603944008196341741771777848899163126744930412990444970629287473164038618648207526802355843985009383313264900148884890437451555831118865237299650313800103403674247036998590658232213046659066945246981994423069267393751732173862753007086921667358727996969128214260798544457265686829196691538797403013370398779833123532308239888530352263432384546504659679350788619617562975098311033202992160208321823263595046929594372484633167764684371063478592389989019993262289770354123954622487914983371095489879787300506269973836370262923994809081491851979148233210464287723547308268289545956100025353727281343306885170982649275108574573731883099312275402899355278010561115889951284552584210602172192240235668967937144010856156904288525973206965937001207686254561321773686607677024015765569995868546681370481610606612305336643961295748241327849599352676198386527228372353464255467163589382142154369711725391415150151737427077090938503391036481370835248615036035435239805525524939624513586824779990843403584223026036549164871994498279585076983299267350266471423781445213817651822478261150255874775114605585133555708514031499589483260801164738064688179949331387667872882453931997456104210519238094969069094347377374389413541242199714835857089203684459462494870779614545494951490685946503545167775428612031749346968651237139763717031086363001626407498094791041106763432551280829882335809472709855142568511616100186294425399353967187772580310395684195656686846115845499108406502700569267254295406499817588703876956335949148148960788415278113818141194000719299627010161982704907375531833943096522360889958075510189999882556652751533256426724908005844306820566942462454815614379651882905999952611712068181277375771031068600151105053225733715057841114673643294161325414723447247896413844761392712900873991500727727988233012755468137985487045848323147699725209424244123873303345760534627485114513265503137177270494363511154154010126502031675154781468525410425582343562369254805002623756722552094430638213066101557324249884101582258371550962841630889022903012629467213985495629174612197041783095535483671731125269178980318929998149748008732059177416300672714752080719604134060781771051728726498516455316263934982877808288029831289158518619994126749438610499036246939468147866808815583628635866352666003012691226678944025246264467520199665240846297381415679648946836733478583637226664975883109220259563005658134769128244863819504484695987609363181740591057926507876779223774228426887733534600167683413275733171171270019603279094868615622575150422151703790028705869976684174374120840564080248431538776051720852458782994792785936334978669805334758824884759378899860961695145044302746444751642930185873173329305382132062149406379095533148443999367492106392631221391752474392696310805042226934345451615316827944781158323260483877728010772182364455618254430262105733658004629703164428287059954752943677755230683385792422272308382960568148442648521812726916908473955619693036101591838375145285769230472979404087426741547381641531013124522936059313874952339143580993610832789396477651427096689929844065793223009542113167750462316461855478190328834520247867562981697538905274347803151303382326837667926549784019228244459707228042200246435557237296895455131340248838065579792009722304766582554629605581578556681573590748753636612679599540171330555661187523819744087281037159103595512553735410777764605456477949855507965732993734959932675737107114324664945943782423246976584400383847339248164647110781898130986963866741914263056327890373726590220101946401337369865956909412583101247130992986634456295774045770365699491568498700087644325800718476354842411877991082107110921907265515434055445483828546895078607556007597715422679136379038955557432552862372826360828027222460232258885433338573416736183915685479701303704169090476673292837808268808618290572192903169204879129040601709809192744243584412246495712375554087815372762877034756019516026451187231771971020372313035145807498295137052077097875760346570303776525027990167687906412639437374329382722326571991231658438388194553372063029334063330040808178698069781482650930319107112425002346994300962208678648414336188668674008812775504408028810609235995531901530099417059930126872981698330218683036165021988047868722244970608801844857953841494207221711214149875285075258271377921688661211419646509144638419930001984902754044189076330562777348557494732075689780507188202817812141664869508007135966483915775937944747297094500891628667526280126080333998404053740784126418138539396675750752315216878030933195589338833030254735958022623267030648066711592266070181453059500443564036283847411309644435370856412705956023552243720250796266568065803243388752146081981140573461356567703830118679807945577667574016387858372340609953359965086606647146493876713596821337835204436170776131677949232013227414096628304205354026063813469761303258719571993966225488958555093510427679791988971742172779979160922404736762880638975534962742894170841469656176520040761328916017189723598495076611011733196408040688628395455067286145659096950255539579524498493898542819120837012716973317963326487849849715816371147080347801323811060493129264074757544079929354744987108772532724901250431897896897092387811630627162295682938692000390799380186457408883817104297882448016632464850925981359863538329736159272918094180915299281795598292795892856092097063188703480460632536098280113540310786423817088772720505027688114038400828083435419652958618670207960650777062461355274910559417030961671643529156548924836502550477472694370667915954413329338824630200776333664812570409093806671470985465153208017946314158900781802567307669191878751484541748174663621804204380702802179251961019509169300052486002788063614613203094151093588031301465379292063556105603936494598372721962197938596354257244836631392404104249987383535354722179904221179866116779749977897677368618081056318874360605107874352677173957972841002691713804847766731026566566458338088565056130613983832021989821964722306831167603123999437414390273779602339099084350503010746403627846052441086604944652144679200545838398031375048439017447852050336579754361882763104670283491766082028363014447117531598447417678699769199955291379423547782526702513838534616910733291869941851842197893695263196593800083998981939690714086344244116829570847891514360775644611936068668410891121888072989671551040770844686050331981671924327746963849622675057706122039771668798123652290001766715471057273382475530294964577957716813904563781129755046076195618184532849854944607763244738467753108136589490285069089300807303423783042724466020296447103622857051676984063780930235780424078279226093967571953577579085123301797349159025386510453481391811031020579578896736388673626563068243444220092728433031839438654271567721273844233939318850279293315407811042192934736150988154534195150957861317891400276601282474543791458850609927220168618781858328688361677583022572402852987289530903439428291591351640826911513931896234378855793926094184629649867461377749820862152288361311783428144898687311257224061894140973371841970934601082910985534446880770279296961865075179339207939540667034649398632260182465551928975935233834664323653910774960714073598940999871889404546159059913102803430112603077837945473322898835928522370752743776004767790785046192909362420427454535328279162043868628615367414430148444280505973468416702467121091075677716122735981853155305087654090041184203543897366928456793118364387536804232658134896980836455221010943495434855043472538001537621563522139593046154357787767005431104545971669418574851780250907092283316306268963575222624300712467342094598896648057984691403613468974488944872998622837323868755355189267111780877757568894059389970538280324764242551100008248461368426518187213353352357694434213832166987557418266406227696226731269684792001568400021847396528021967067824143661722248433981399668779553795275336703143817493437527034996864062750575476033683476592990160272467162084962796568071976074871258307939299418014923559299385665473033725113974451523809060277107680679572873780993418718878242541739331014400659375536978260477488357552107556192113366347417991104642703118092203083908784935287088794768526725852335467431719632035696961197574244468572784804202348383106161583679110160287614379640906594882850609519086285042813749276356637781379038220846742528795286871479100756150807333745975474958321450363517740760238117025425974486078154207830247097362626165324810782122767883284045649030069274675687700549598368628071401598588410441252531499209707332674122415338248580890294783064345979541280969199051704799741386653088518816114562299165926309199651937446790392973333738006627698157890241933414100089173174831431184707510434403555662528452402504077142425536804953254061897213891569242003073903768794005932350898891391492985275354272208278492706372857379439317642872859681436000458822433289482266728226315775670196071226105231934830048135875895979603688395385169281157101689790447091271008526926070764802626463647543922527775678125834056317542431590664776972614685296274947164129345320953791799602460255113053411734201692035340147314494078580586501891867882863976375198757727260072182528363757963uwb);
> +static_assert (g == 29798432244916674188267874565994511129465120803978788344316864814816788118116211967064993859202651457241150653527937300318139441398137480739498016605169958074338468812974247940643983119687412709712298707708639065721844633834030392754622467082167575384256636124970912416863467750122830431140200433047618208655095004510815432687783237399333966883566662284249473184266466494555781284661942394134007606974555197496847111970137021016999418540004497135190180698605565746245843253924478007019667216316038918311843149665996622104492911573546889531777540730482311189993304911007037408068009066215218430070848129328418292313395373962245129226209492855153844385373084110919586111468993602111024707027363861811899881912842982859068396068358713057563354536496215662738647102018858667173959375414318871177496133849959199312926882218088364664113311108693640122976260449711327351932322233788110835455072118555373145049291154743494115590060507317111856539735032533192218230483260244334704193889469794662184966199537993963999078475259216878312482974707442036256492782509772373455272769273833882315645298854863311795542608650304882161420040697211181665252342080035197173802534749769469724703268158024710819175669522770851475093176446672238329528502908755349515870984599273679350446826002857904638165429577187227047143578608071452633518342471271063866280346111762071869789364903979901717205061699969843702610929231630805060328615287467659369370840319159313397133502893318829441500860040361733782863054788093908897708674331583672603407220706479492676072388733266691156305962918416232324775256248110177992057207141301567069682256206366821456168676509466261858856409938472156321638861395757026663407211258205424076803550614986657484594005574319169124484702443999652049989150938063489591743426294245993866451260505250593013109374230205818553705481323814467997764434232825216265839479482674731987963761808633293308337512265283871364612091159988201854370660145184476139485901491033635913812044790756144158913525552429641012849929727963443403717727376487350639360231917245906451656664043825445552575910730367456550208688513910014028364857635115620260661725890378663220166170586315294293674161240986703299566970473620561528908884250063780883792514734224688857563036631219375697604761545663806029135955446308329698729187633118726312957682328458165865329528612815778259975236473921843981997298878825807911669198854508239886525812277435714684005819874906489012032318711200528590760750570526041852880637356865931470793479763913927643202410399111751142093604070407422948063457225322500044586890851162487991894225174721754156861359977725394051668830407469004793273274348712069653223607355162389110859799061463530280124845281291280807143650682769463073672563974069400047110643228833827027461693537080439809461719940027498281816925274592533558602395110549455677542858499427662912175880073255153392214064243908048250185909069590209744180868907760635944391850223298315749825841911357067093249040115124993758536243030293225525076353059013123513325111698367182126915150684907599519814623893088542203783385592662269309532984292040400010214779495601358956413902867199644918537464229778619633233694940922502004380517602109211347567613595105955983216430889725956410713259203298246729608748959880055703627186556401864111638018470966012670735995089481515926436830314775679719160087497370044975445626269931153113082589491706095558709469653105913401990243443281006865761497472274166770933023600380168828263796270922831789199991709935715817691152337421394560278747618690783171271473596641043754971933307758834432348553804094808181840424862922045449137050403287348645901740502665714464996238931464404295154095892302597483360400390905349894368195585539402232530091453204340306958822061151948990309527918884648436508768149153317544823591124206975349609256020546849488655736876372252212050830544466937747670764315669293329627518514102617563387649516771990491187310435931289985445526697182123815532501667217766095415711672214803130745000817763746855941300298444804381373550323960417069156844824460603544879660738559186868618886343869739140893603306795963472244965044168057032658483269336150393386192137971198307076283753910047081813222124156957062790985290105121454908913661951981590760015402914802952617772813249648632973163740452843731296254362782304147355033972630909824073748449028173804547717470842714205464845684491356562908731509116142387254835486442424180641204069624898443940690204887266127211533609905992195650506424940434101991806132943921221483671634998075419443031716104319954336198869316200695048883609675602643204732662053401940340217947023472547371529407763503959015869316454468851368326655813945200855080128542483589047640225121515223460096921289082506572330085372802157429561149070936426948551401948745143933947153735393521070866175780404741792183629118310346303334779175995003188671138779985580661774608808636114429379106468715113991360500153251219339447352994135563797492655340081747655877102423272282522093490036439208508486641371157289888819319721741072021088988838185575526314420629404039273157137765410457726146724738238380912109958473128084231429395806333577982707754174511689519819992445390193198198658674126964252857209724109156960517790623894027903793027127063672501493610074211338320954814508470755576473435095989167775767189027449015518474082166619942092480362630295618282318120120784478999847987626484022481457667372563874126148626833365925380661168036280884209429692348940543937907700655045159826358187660828871244692799325658776545285122623630935724707862474702154310309904951694032327191814827022575329978008964102267856794554960532273796606163812328655447447843939879079636519295465998645050724045891371587372278645762052618094041441489071969833201075688391288870817741047957072975950738340906036013816125144698235601966779945176857432857633399909230472912455927908602203373016718198614604928264423172202682557163587717390960517005049436804372462076787514085114196168532579703170731400431879295626043387670808835418558634677506586435199004217308917933633779528930967546154533842346719884096382881942924876345720600214180390787910645851233124478908442387878397330067576987181883304718450176054652199888389760748145336637283014805674257940619738290930262825301386786230510361804626489472048185472733925891779724267067453733096077343064447478426009793051940246437960227278263493197855944995062383797697382558922940929936070026427171402887628703859868935135079107329440442422076757924715656314319859155753548658149259529376550001720812563487422205664760779332226992828623190778104898486092380042779700488516917660657023822452904116096237918857457696381824722898116427936892835447067468468407009042078067084750876549952565020965668757590614127881877935221459340616752511248121731457595547980112335065757832005891665164905391633974616167324708883637006961506520792896036912627971590991704412331257521924823476631105169897878844060506322822415206964793339314218595856304487986963824904423128022971556161524749970501482913358319084506890437142764406147344587629536637264158168077923943554162127130293481141343347153505733367154880523871795677462334071936126263595187983894733622188425947744097102772800798384967456398866974517228076050160896508568699658252932716504698114217833892857487015573927286387074461795988559112405605411753418237862771339843397427624643310193743445651017055548894766307353802701817908959634882329583556939122162691594208513303270959445875971764738074360361727430013357247044648803607516281791963055729724246812412172071844637854708873681127474627331405181146695377571274674214437806915445217802775052815841975718045601990734416426330360993618773038694004120497336677710478038046243055705865865831174795450314028741068624141624553472680654469753078301535955043264283271909904456068340262636622279301829323206627968239913393816282945184963299662978583596244380198766900193280359211101193120639037252806190653613853649777477220096431415312315755563965267544743737395010806760019102516763403978882159819651640938970139344764659441590225162332671407148444880969613631409727647114892093790763899889575251819843426046454701461164266075412453030724977752871861083191084321517298250628434552232026386426397723496147104928347285904099698459531024308948589396794992195467602362080739396575252883580280220821638109567806035125118547858876658113425227036790662985374378852325482982045005999509082737712016309072932342749447188645797866863307956692202254274096257229720450056213784002994618833012774061411527155971154557389097691677678141035861132494437203379707367812549575427083312703505887015979470139355962755397252795113687602766495784089469668341232834905294201079498970320080406741451950210575593932460159381736742522819101649364144856706686103595233078202056255672800217818041865057688977839959137871100908550020967057057308917735988786388788052699769578854534978855415079111598231460966054321228995734190020325078812000201079027820474779442492631325689095753878633085497650204857079872554559473483419911768746015789710993375966794219776549253853530178476551311105974056423547355469529552560908854325369362455545410091798379902621331029483887682674948217956629284752930908329829674733920276770747094185746685996596412427679993681949974698419348014764002932434551929981624067136243863902078558471041489279445807895278052301932856585893565779292891317207843407744400767779620517520921670322338050728890045747983451373362797910535929269393753273012362217889561673925968389459965833685401690081841397162574712924132550520731464727484969352370896692414821612827317102299387105946365095615792215974376569671600616769751488289768809074955947363365918741991629059219089014597460766672961554404710097273003543733333910427577142506563709675650599245232505907077002621633894112388073720526721850175317282680734663880459465941229617558887214041112292723017506170621073751431142027041833994224029341012822137562826287139233418519120675175406976662350512581191346450770177349622645505283880898193006660945594325793831420602547212104618649469606666572347914704432825980672979848824836597174174529614001858589547531559654977293193127270065702000158500698214539788268688147372675991092422533558858644439593588202639477050504734296650046079656640647901548822757043473731619522399230164121224825466361924137251715058758866933494917083923326776719732155409909144925938224463264494658702152466050633205281304505215885375512199078501207471257652024000665306520470131745219079586546105311830140096132293692468094511925886272781358563926829224095578683651984200983372583665803571377476027144913648184978730933878979567253043069660012737872687050609798840108790845129395707870572912374332279382983724848624322539586761650029883161495235724577859552041602579347180037188647513083952602337794121166597431167370527762154337549776106370376153562655881935505078278498650286552410329632274646493785454991181144854679186335497390946483818038542665684787252305039589768256820169455262274070935643105621078189499806863932972473187397166808047422437248169273260555301215824183715525067199124002511185216150503341306108923690508295521642787129456634906823886074539205650887996137900313156803955685097335647168198343050412274573595260250608802876865485888024072019917345123849434033283566478908088265035768478211683223376432512441588787190764012153315909872510218339126604004796078990801028669133777338710317564240776134511810524463606368771117942931124804883649428527160017692567898683240236409226430799434265084307696860149739966884956352228793342336285107735457499085215192833410476346646383701031126925208288541002096440132320482015655980943794434204072206620053672585659226466354793301901487364350146519867630971691770986995057080225660905837503456552838203132631041791897154141335541677639190964910215683663487060604980846305614894646240323789368500369758091291245113498841329427792734330734803282924511704131080318489668163617828033603395900451487922230312909796925948381102991146822054674696487426070753396832430221618428295425257499796994420607860538645419531491757733336034021601535426583758567627555629938946859886544158530489820642241655856617038305077492032552858077568946392077123407218809443346686209401271493763555342851545003074944605265496573303231886857449155910337142767732100225936378105170371201084980241510325910452626303515593633156139236733088905862745695882083854190859810581160362070408267948533624449628244247119196173683262185913191513113413120834890358166551589156139594720535747080730112294593994121763531168883911031894535910487069095707175045214441413883884802410923699659922887455483992198926058974807403496764446301358667199255684428863794804385174349638463155672979632002172038865554637417660688132773049255710905333067787632676418064804368544180709337584779332643844014281294499087468987637559541868883972735107421654055148815317881757858498940165307145686763353409263467427598935862681561349845673024564278210709413696260619038530970875676404593624213991446834528296807904314996877361889127548706876660509342389067428760334202348176873902188764996715901220157107218395994779944228232025706880680537017422662829436163962024049183896623152251324568553859222919956280866164457373227617378984673998954294513406712936355130470484047172888327701828569122540112559029443105549133380108876317878934885708779481197872203584407950893040390662267527949738213177889303432525604671841689257389744714864585578792783077907001007366247010458342027047984410042602813807810527541755925124978790060094078974677759122005471591830027215095163800538956004584188386335594985153414639789590893161032065216627865562478243477492718987712336028170936986667727941311558639344162780955383819989272289059208271904167118532762576939936016139229330085472000664229184978349081804033101689310845610467686180433739112997151156369536100005937892508417519342890274027944999566791868441643171088511636287506843607494353281634216084927195204425318616160380027060137805983808724233258618373597362604084772620575548007554735347777391638935368867781173138943420137303127382395494860537617670160035924495601832037708702973800426654932341543282278261613196243383667905292201034018092087846236419463180081908614772996072182181475631925657135805746736769755149885159738078245236118655290281971965234305542674569161473901630756445921641134653221918773817366488270251547556553445951856258504157060074846199618221127220780775488108206614587779803010482980949599988435901666000892139982997311053704503820813573985517680412958243220188442951830553187600252244113193599181872435497016639064999726818396372997120756358317896887004368831719573185714636352388773401931148269187200760456815204645989551987623393621306594072130172374142854695647745385134266260394221479246638034464958250019727875388606182872986888783267877119329425439261928807662708446658489716263804660134040984758765172767392018690172608055362199607909977706235198762015694206501563061184219994813537596598965037650742184551655336428129821678412946250805280869978630642803771544192674966142704717514858737919262672330422178767701996082172980161058350281694837604804891891418253868499644666889737170146162672595758195633807151023528153597542333384168701376272552982942009280710503747128071261631293054233342278356057312085260259985144621746482929521601039472256832633668389692876355260796154739710758469371523134766822097661489603351981504829985756614646692050908671043534745910896810946153108823010813565715434364129438007586079825725640829938578522201512997903614656518629709210847565220655518550297524205877327265360786386320740093104940037625667310836335061646216571983748430953724716089948056286461750916867222003853823582795551925662024207653956362942482171653115616941583528041583602451893714531451905480724366854760556927442747966826238761875413903795420865790594905494790702579294909238521515589515005826505930386072130386589217894716686827488993215487103272779544227027134111697663748622188055096883894725483722705851459928566869284590930382532770843933468366093036527695687945993230017813346212329222255566336095319164589209582367615830662860581648744271399297073178983306225384265231838249991556901952431468352513388991468708608092739067474189472822100362609976498026022632560035118317611302900901331038619406127804916063924831183297494256578717253424234035974824920125286381993339752593386233733538479594764169282697196119372287911111519020020827824461438993089860086727372125993892847397206287561303860397419198856048912526671932730189638075028289339687312428642008826667579692987271950503032135653656758304596897823894611869615940642910929670674439798335840164484798390625939163760520381693557697796137496879028346725344730517178323841793297642804722421921020973660881331152475521171925828969058909085954920667354484636498136495463081604922293303480762098328616310257972292652271806090362595994022460593778967329967630217444017525741638045229870029346988014958084572771398978984372096138531989499905656918554786826489755330939796198694531597704511088156379062341123293295518802525687692186882544300669083021869264815460641932403430710625466965805696101573184162037649331430509823557536730381559741312755561207022942288392997545062374284743535347995055673645037635267101631718560797941766939979345842257105659818759024388745163435943430548152822772246258077883370773252929015899844104006131190134245627499981302192117817503265438901221817741389115833357581935745779927204521552590187770875390757765548238495852940181105538496855904068066688668026690107729150021075489752456818910460907620831637809136111720910366919838287991763482928791748202589855715467117114637839467261942141745735707911425500856498654501970611071951782463930001708380526113138372274175339335662509216976645164154703071438074490395763946786352790222348893491203713832049967892693792723281438844117355316466098637070993105543662349514411036242212001644754859251446687255243764019263618483003145105226068454039223391184981227114376461103289114282734069735129878443870014635503532648866626566667914901166162930587104576749414261153794064753802158961802642927355719918310663028215143569818970905632433269645320004900303957055632175311138456746844602835628904740418607000085429943093034316700698981140571877816887916474759854753997859271105386693600207306132365473887105340142508006162852906118538596732969987126166211990351704986503780155363871413699663954792800610809029455955600309822991543330042253679891766932624144939060428160579453101461433044143996234873674506037735662596771123861963729201895854603129610305096448743155140934507704061445592546699556299418746596517566849045890451544180847737277330001790442633829205995645608625832773369516360989588132005808556078368148568861893086235628443747784399629728471253481086345451020854279429082627369196342148203023724090997870940983926087765285728354735131880373997886328690240207916061276214402047198215843063673535384956668795832090551190886193140702678521430258815311225104047901738300533548529803349897158550493609982225769194034849807698159537877895555193536203558830022247566834435050885516469224684770384749924654266966662000902430627265289641143382738252234277626796684149644206035576614604674203041322937356663227140931005992313613604607015407976103540881585077144015739356504208743192058109416473577195313011234604304724364984149920580678685505306262473132159795312126331269718770461048329028893386454886617883785246418127743847205019651073400232203851162419350487342072044133458470845299106673918135646890264041635815461909682536651955578794886488715663089155422196473858390320269399281721069474509476566112352026843925757498701587450846186392850664266843050309911138045544674927859244458425621557512679785762866254871670uwb);
> +
> +__attribute__((noipa)) unsigned _BitInt(65472)
> +foo (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
> +{
> + return a + b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(65472)
> +bar (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
> +{
> + return a / b;
> +}
> +
> +__attribute__((noipa)) unsigned _BitInt(65472)
> +baz (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
> +{
> + return a >> b;
> +}
> +#endif
> +
> +int
> +main ()
> +{
> +#if __BITINT_MAXWIDTH__ >= 65472
> + if (foo (a, b) != c || bar (d, 71uwb) != e || baz (f, 131uwb) != g)
> + __builtin_abort ();
> +#endif
> +}
>
> Jakub
@@ -1091,17 +1091,11 @@ struct GTY(()) tree_base {
struct {
/* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
its native precision. */
- unsigned char unextended;
+ unsigned short unextended;
/* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to
wider precisions based on its TYPE_SIGN. */
- unsigned char extended;
-
- /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
- offset_int precision, with smaller integers being extended
- according to their TYPE_SIGN. This is equal to one of the two
- fields above but is cached for speed. */
- unsigned char offset;
+ unsigned short extended;
} int_length;
/* VEC length. This field is only used with TREE_VEC. */
@@ -1139,8 +1139,6 @@ extern void omp_clause_range_check_faile
(INTEGER_CST_CHECK (NODE)->base.u.int_length.unextended)
#define TREE_INT_CST_EXT_NUNITS(NODE) \
(INTEGER_CST_CHECK (NODE)->base.u.int_length.extended)
-#define TREE_INT_CST_OFFSET_NUNITS(NODE) \
- (INTEGER_CST_CHECK (NODE)->base.u.int_length.offset)
#define TREE_INT_CST_ELT(NODE, I) TREE_INT_CST_ELT_CHECK (NODE, I)
#define TREE_INT_CST_LOW(NODE) \
((unsigned HOST_WIDE_INT) TREE_INT_CST_ELT (NODE, 0))
@@ -6453,7 +6451,15 @@ inline unsigned int
wi::extended_tree <N>::get_len () const
{
if (N == ADDR_MAX_PRECISION)
- return TREE_INT_CST_OFFSET_NUNITS (m_t);
+ {
+ /* to_offset can only be applied to trees that are offset_int-sized
+ or smaller. EXT_LEN is correct if it fits, otherwise the constant
+ must be exactly the precision of offset_int and so LEN is correct. */
+ unsigned int ext_len = TREE_INT_CST_EXT_NUNITS (m_t);
+ if (ext_len <= OFFSET_INT_ELTS)
+ return ext_len;
+ return TREE_INT_CST_NUNITS (m_t);
+ }
else if (N >= WIDEST_INT_MAX_PRECISION)
return TREE_INT_CST_EXT_NUNITS (m_t);
else
@@ -1763,7 +1763,6 @@ wide_int_to_tree_1 (tree type, const wid
/* Make sure no one is clobbering the shared constant. */
gcc_checking_assert (TREE_TYPE (t) == type
&& TREE_INT_CST_NUNITS (t) == 1
- && TREE_INT_CST_OFFSET_NUNITS (t) == 1
&& TREE_INT_CST_EXT_NUNITS (t) == 1
&& TREE_INT_CST_ELT (t, 0) == hwi);
return t;
@@ -2789,14 +2788,6 @@ make_int_cst (int len, int ext_len MEM_S
TREE_SET_CODE (t, INTEGER_CST);
TREE_INT_CST_NUNITS (t) = len;
TREE_INT_CST_EXT_NUNITS (t) = ext_len;
- /* to_offset can only be applied to trees that are offset_int-sized
- or smaller. EXT_LEN is correct if it fits, otherwise the constant
- must be exactly the precision of offset_int and so LEN is correct. */
- if (ext_len <= OFFSET_INT_ELTS)
- TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
- else
- TREE_INT_CST_OFFSET_NUNITS (t) = len;
-
TREE_CONSTANT (t) = 1;
return t;
@@ -247,14 +247,13 @@ along with GCC; see the file COPYING3.
#define WIDE_INT_MAX_INL_PRECISION \
(WIDE_INT_MAX_INL_ELTS * HOST_BITS_PER_WIDE_INT)
/* Precision of wide_int and largest _BitInt precision + 1 we can
support. */
-#define WIDE_INT_MAX_ELTS 255
+#define WIDE_INT_MAX_ELTS 1024
#define WIDE_INT_MAX_PRECISION (WIDE_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT)
-/* Precision of widest_int and largest _BitInt precision + 1 we can
- support. */
-#define WIDEST_INT_MAX_ELTS 510
+/* Precision of widest_int. */
+#define WIDEST_INT_MAX_ELTS 2048
#define WIDEST_INT_MAX_PRECISION (WIDEST_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT)
STATIC_ASSERT (WIDE_INT_MAX_INL_ELTS < WIDE_INT_MAX_ELTS);
@@ -1709,6 +1708,7 @@ get_binary_precision (const T1 &, const
}
/* A reference to one element of a trailing_wide_ints structure. */
+template <typename TL>
class trailing_wide_int_storage
{
private:
@@ -1717,14 +1717,14 @@ private:
unsigned int m_precision;
/* A pointer to the length field. */
- unsigned char *m_len;
+ TL *m_len;
/* A pointer to the HWI array. There are enough elements to hold all
values of precision M_PRECISION. */
HOST_WIDE_INT *m_val;
public:
- trailing_wide_int_storage (unsigned int, unsigned char *, HOST_WIDE_INT *);
+ trailing_wide_int_storage (unsigned int, TL *, HOST_WIDE_INT *);
/* The standard generic_wide_int storage methods. */
unsigned int get_len () const;
@@ -1737,52 +1737,60 @@ public:
trailing_wide_int_storage &operator = (const T &);
};
-typedef generic_wide_int <trailing_wide_int_storage> trailing_wide_int;
+template <typename TL>
+using trailing_wide_int = generic_wide_int <trailing_wide_int_storage <TL> >;
/* trailing_wide_int behaves like a wide_int. */
namespace wi
{
template <>
- struct int_traits <trailing_wide_int_storage>
+ struct int_traits <trailing_wide_int_storage <unsigned char> >
+ : public int_traits <wide_int_storage> {};
+
+ template <>
+ struct int_traits <trailing_wide_int_storage <unsigned short> >
: public int_traits <wide_int_storage> {};
}
/* A variable-length array of wide_int-like objects that can be put
at the end of a variable-sized structure. The number of objects is
at most N and can be set at runtime by using set_precision().
+ TL is the type for lengths, should be either unsigned char (to be
+ used only after _BitInt lowering for code which shouldn't encounter
+ really large wide ints) or unsigned short.
Use extra_size to calculate how many bytes beyond the
sizeof need to be allocated. Use set_precision to initialize the
structure. */
-template <int N>
+template <int N, typename TL>
struct GTY((user)) trailing_wide_ints
{
private:
/* The shared precision of each number. */
unsigned short m_precision;
- /* The shared maximum length of each number. */
- unsigned char m_max_len;
-
/* The number of elements. */
unsigned char m_num_elements;
+ /* The shared maximum length of each number. */
+ TL m_max_len;
+
/* The current length of each number.
Avoid char array so the whole structure is not a typeless storage
that will, in turn, turn off TBAA on gimple, trees and RTL. */
- struct {unsigned char len;} m_len[N];
+ struct { TL len; } m_len[N];
/* The variable-length part of the structure, which always contains
at least one HWI. Element I starts at index I * M_MAX_LEN. */
HOST_WIDE_INT m_val[1];
public:
- typedef WIDE_INT_REF_FOR (trailing_wide_int_storage) const_reference;
+ typedef WIDE_INT_REF_FOR (trailing_wide_int_storage <TL>) const_reference;
void set_precision (unsigned int precision, unsigned int num_elements = N);
unsigned int get_precision () const { return m_precision; }
unsigned int num_elements () const { return m_num_elements; }
- trailing_wide_int operator [] (unsigned int);
+ trailing_wide_int <TL> operator [] (unsigned int);
const_reference operator [] (unsigned int) const;
static size_t extra_size (unsigned int precision,
unsigned int num_elements = N);
@@ -1790,39 +1798,46 @@ public:
m_num_elements); }
};
-inline trailing_wide_int_storage::
-trailing_wide_int_storage (unsigned int precision, unsigned char *len,
+template <typename TL>
+inline trailing_wide_int_storage<TL>::
+trailing_wide_int_storage (unsigned int precision, TL *len,
HOST_WIDE_INT *val)
: m_precision (precision), m_len (len), m_val (val)
{
}
+template <typename TL>
inline unsigned int
-trailing_wide_int_storage::get_len () const
+trailing_wide_int_storage<TL>::get_len () const
{
return *m_len;
}
+template <typename TL>
inline unsigned int
-trailing_wide_int_storage::get_precision () const
+trailing_wide_int_storage<TL>::get_precision () const
{
return m_precision;
}
+template <typename TL>
inline const HOST_WIDE_INT *
-trailing_wide_int_storage::get_val () const
+trailing_wide_int_storage<TL>::get_val () const
{
return m_val;
}
+template <typename TL>
inline HOST_WIDE_INT *
-trailing_wide_int_storage::write_val (unsigned int)
+trailing_wide_int_storage<TL>::write_val (unsigned int)
{
return m_val;
}
+template <typename TL>
inline void
-trailing_wide_int_storage::set_len (unsigned int len, bool is_sign_extended)
+trailing_wide_int_storage<TL>::set_len (unsigned int len,
+ bool is_sign_extended)
{
*m_len = len;
if (!is_sign_extended && len * HOST_BITS_PER_WIDE_INT > m_precision)
@@ -1830,9 +1845,10 @@ trailing_wide_int_storage::set_len (unsi
m_precision % HOST_BITS_PER_WIDE_INT);
}
+template <typename TL>
template <typename T>
-inline trailing_wide_int_storage &
-trailing_wide_int_storage::operator = (const T &x)
+inline trailing_wide_int_storage<TL> &
+trailing_wide_int_storage<TL>::operator = (const T &x)
{
WIDE_INT_REF_FOR (T) xi (x, m_precision);
wi::copy (*this, xi);
@@ -1841,10 +1857,10 @@ trailing_wide_int_storage::operator = (c
/* Initialize the structure and record that all elements have precision
PRECISION. NUM_ELEMENTS can be no more than N. */
-template <int N>
+template <int N, typename TL>
inline void
-trailing_wide_ints <N>::set_precision (unsigned int precision,
- unsigned int num_elements)
+trailing_wide_ints <N, TL>::set_precision (unsigned int precision,
+ unsigned int num_elements)
{
gcc_checking_assert (num_elements <= N);
m_num_elements = num_elements;
@@ -1853,17 +1869,17 @@ trailing_wide_ints <N>::set_precision (u
}
/* Return a reference to element INDEX. */
-template <int N>
-inline trailing_wide_int
-trailing_wide_ints <N>::operator [] (unsigned int index)
+template <int N, typename TL>
+inline trailing_wide_int <TL>
+trailing_wide_ints <N, TL>::operator [] (unsigned int index)
{
- return trailing_wide_int_storage (m_precision, &m_len[index].len,
- &m_val[index * m_max_len]);
+ return trailing_wide_int_storage<TL> (m_precision, &m_len[index].len,
+ &m_val[index * m_max_len]);
}
-template <int N>
-inline typename trailing_wide_ints <N>::const_reference
-trailing_wide_ints <N>::operator [] (unsigned int index) const
+template <int N, typename TL>
+inline typename trailing_wide_ints <N, TL>::const_reference
+trailing_wide_ints <N, TL>::operator [] (unsigned int index) const
{
return wi::storage_ref (&m_val[index * m_max_len],
m_len[index].len, m_precision);
@@ -1873,10 +1889,10 @@ trailing_wide_ints <N>::operator [] (uns
structure in order to handle NUM_ELEMENTS wide_ints of precision
PRECISION. NUM_ELEMENTS is the number of elements, and defaults
to N. */
-template <int N>
+template <int N, typename TL>
inline size_t
-trailing_wide_ints <N>::extra_size (unsigned int precision,
- unsigned int num_elements)
+trailing_wide_ints <N, TL>::extra_size (unsigned int precision,
+ unsigned int num_elements)
{
unsigned int max_len = WIDE_INT_MAX_HWIS (precision);
gcc_checking_assert (num_elements <= N);
@@ -1886,8 +1902,8 @@ trailing_wide_ints <N>::extra_size (unsi
/* This macro is used in structures that end with a trailing_wide_ints field
called FIELD. It declares get_NAME() and set_NAME() methods to access
element I of FIELD. */
-#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I) \
- trailing_wide_int get_##NAME () { return FIELD[I]; } \
+#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I, TL) \
+ trailing_wide_int <TL> get_##NAME () { return FIELD[I]; } \
template <typename T> void set_##NAME (const T &x) { FIELD[I] = x; }
namespace wi
@@ -3922,21 +3938,21 @@ template<int N>
void gt_pch_nx (generic_wide_int <widest_int_storage <N> > *,
gt_pointer_operator, void *) = delete;
-template<int N>
+template<int N, typename TL>
void
-gt_ggc_mx (trailing_wide_ints <N> *)
+gt_ggc_mx (trailing_wide_ints <N, TL> *)
{
}
-template<int N>
+template<int N, typename TL>
void
-gt_pch_nx (trailing_wide_ints <N> *)
+gt_pch_nx (trailing_wide_ints <N, TL> *)
{
}
-template<int N>
+template<int N, typename TL>
void
-gt_pch_nx (trailing_wide_ints <N> *, gt_pointer_operator, void *)
+gt_pch_nx (trailing_wide_ints <N, TL> *, gt_pointer_operator, void *)
{
}
@@ -290,7 +290,7 @@ struct GTY((variable_size)) hwivec_def {
(RTL_FLAG_CHECK1("CWI_PUT_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem = (NUM))
struct GTY((variable_size)) const_poly_int_def {
- trailing_wide_ints<NUM_POLY_INT_COEFFS> coeffs;
+ trailing_wide_ints<NUM_POLY_INT_COEFFS, unsigned char> coeffs;
};
/* RTL expression ("rtx"). */
@@ -772,7 +772,7 @@ immed_wide_int_const (const poly_wide_in
enough that we get no benefit from using VOIDmode, and various places
assume that VOIDmode implies CONST_INT. Using the real mode seems like
the right long-term direction anyway. */
- typedef trailing_wide_ints<NUM_POLY_INT_COEFFS> twi;
+ typedef trailing_wide_ints<NUM_POLY_INT_COEFFS, unsigned char> twi;
size_t extra_size = twi::extra_size (prec);
x = rtx_alloc_v (CONST_POLY_INT,
sizeof (struct const_poly_int_def) + extra_size);
@@ -73,8 +73,8 @@ public:
private:
DISABLE_COPY_AND_ASSIGN (irange_storage);
static size_t size (const irange &r);
- const unsigned char *lengths_address () const;
- unsigned char *write_lengths_address ();
+ const unsigned short *lengths_address () const;
+ unsigned short *write_lengths_address ();
friend void gt_ggc_mx_irange_storage (void *);
friend void gt_pch_p_14irange_storage (void *, void *,
gt_pointer_operator, void *);
@@ -97,7 +97,7 @@ private:
// Another variable-length part of the structure following the HWIs.
// This is the length of each wide_int in m_val.
//
- // unsigned char m_len[];
+ // unsigned short m_len[];
irange_storage (const irange &r);
};
@@ -229,14 +229,14 @@ vrange_storage::equal_p (const vrange &r
// irange_storage implementation
//============================================================================
-unsigned char *
+unsigned short *
irange_storage::write_lengths_address ()
{
- return (unsigned char *)&m_val[(m_num_ranges * 2 + 2)
- * WIDE_INT_MAX_HWIS (m_precision)];
+ return (unsigned short *)&m_val[(m_num_ranges * 2 + 2)
+ * WIDE_INT_MAX_HWIS (m_precision)];
}
-const unsigned char *
+const unsigned short *
irange_storage::lengths_address () const
{
return const_cast <irange_storage *> (this)->write_lengths_address ();
@@ -263,7 +263,7 @@ irange_storage::irange_storage (const ir
}
static inline void
-write_wide_int (HOST_WIDE_INT *&val, unsigned char *&len, const wide_int &w)
+write_wide_int (HOST_WIDE_INT *&val, unsigned short *&len, const wide_int &w)
{
*len = w.get_len ();
for (unsigned i = 0; i < *len; ++i)
@@ -294,7 +294,7 @@ irange_storage::set_irange (const irange
m_kind = VR_RANGE;
HOST_WIDE_INT *val = &m_val[0];
- unsigned char *len = write_lengths_address ();
+ unsigned short *len = write_lengths_address ();
for (unsigned i = 0; i < r.num_pairs (); ++i)
{
@@ -317,11 +317,11 @@ irange_storage::set_irange (const irange
static inline void
read_wide_int (wide_int &w,
- const HOST_WIDE_INT *val, unsigned char len, unsigned prec)
+ const HOST_WIDE_INT *val, unsigned short len, unsigned prec)
{
- trailing_wide_int_storage stow (prec, &len,
- const_cast <HOST_WIDE_INT *> (val));
- w = trailing_wide_int (stow);
+ HOST_WIDE_INT *valn = const_cast <HOST_WIDE_INT *> (val);
+ trailing_wide_int_storage <unsigned short> stow (prec, &len, valn);
+ w = trailing_wide_int <unsigned short> (stow);
}
// Restore a range of TYPE from storage into R.
@@ -342,7 +342,7 @@ irange_storage::get_irange (irange &r, t
gcc_checking_assert (TYPE_PRECISION (type) == m_precision);
const HOST_WIDE_INT *val = &m_val[0];
- const unsigned char *len = lengths_address ();
+ const unsigned short *len = lengths_address ();
// Handle the common case where R can fit the new range.
if (r.m_max_ranges >= m_num_ranges)
@@ -411,7 +411,7 @@ irange_storage::size (const irange &r)
unsigned n = r.num_pairs () * 2 + 2;
unsigned hwi_size = ((n * WIDE_INT_MAX_HWIS (prec) - 1)
* sizeof (HOST_WIDE_INT));
- unsigned len_size = n;
+ unsigned len_size = n * sizeof (unsigned short);
return sizeof (irange_storage) + hwi_size + len_size;
}
@@ -433,7 +433,7 @@ irange_storage::dump () const
return;
const HOST_WIDE_INT *val = &m_val[0];
- const unsigned char *len = lengths_address ();
+ const unsigned short *len = lengths_address ();
int i, j;
fprintf (stderr, " lengths = [ ");
@@ -5158,7 +5158,6 @@ trees_out::start (tree t, bool code_stre
case INTEGER_CST:
u (TREE_INT_CST_NUNITS (t));
u (TREE_INT_CST_EXT_NUNITS (t));
- u (TREE_INT_CST_OFFSET_NUNITS (t));
break;
case OMP_CLAUSE:
@@ -5231,7 +5230,6 @@ trees_in::start (unsigned code)
unsigned n = u ();
unsigned e = u ();
t = make_int_cst (n, e);
- TREE_INT_CST_OFFSET_NUNITS(t) = u ();
}
break;
@@ -1,18 +1,43 @@
/* PR c/102989 */
-/* { dg-do compile { target { bitint } } } */
+/* { dg-do run { target { bitint } } } */
/* { dg-options "-std=c2x" } */
#if __BITINT_MAXWIDTH__ >= 16319
-constexpr unsigned _BitInt(16319) a
- = 468098567701677261276215481936770442254383643766995378241600227179396283432916865881332215867106489159251577495372085663487092317743244770597287633199005374998455333587280357490149993101811392051483761495987108264964738337118155155862715438910721661230332533185335581757600511846854115932637261969633134365868695363914570578110064471868475841348589366933645410987699979080140212849909081188170910464967486231358935212897096260626033055536141835599284498474737858487658470115144771923114826312283863035503700600141440724426364699636330240414271275626021294939422483250619629005959992243418661230122132667769781183790338759345884903821695590991577228520523725302048215447841573113840811593638413425054938213262961448317898574140533090004992732688525115004782973893244091427000396890427152225308661078954671066069234453757593181753900865203439035402480306413572239610467142591920809187367438071170100969567440044691427487959785637338381651309916782063670286046547585240837892307170928849485877186793280707600840866783471799148179250818387716183127323346199533387463363442356218803779697005759324410376476855222420876262425985571982818180353870410149824214544313013285199544193496624223219986402944849622489422007678564946174797892795089330899535624727777525330789492703574564112252955147770942929761545604350869404246558274752353510370157229485004402131043153454290397929387276374054938578976878606467217359398684275050519104413914286024106808116340712273059427362293703151355498336213170698894448405369398757188523160460292714875857879968173578328191358215972493513271297875634400793301929250052822258636015650857683023900709845410838487936778533250407886180954576046340697908584020951295048844938047865657029072850797442976146895294184993736999505485665742811313795405530674199848055802759901786376822069529342971261963119332476504064285869362049662083405789828433132154933242817432809415810548180658750393692272729586232842065658490971201927780014258815333115459695117942273551876646844821076723664040282772834511419891351278169017103987094803829594286352340468346618726088781492626816188657331359104171819822673805856317828499039088088223137258297373929043307673570090396947789598799922928643843532617012164811074618881774622628943539037974883812689130801860915090035870244061005819418130068390986470314677853605080103313411837904358287837401546257413240466939893527508931541065241929872307203876443882106193262544652290132364691671910332006127864146991404015366683569317248057949596070354929361158326955551600236075268435044105880162798380799161607987365282458662031599096921825176202707890730023698706855762932691688259365358964076595824577775275991183149118372047206055118463112864604063853894820407249837871368934941438119680605528546887256934334246075596746410297954458632358171428714141820918183384435681332379317541048252391710712196623406338702061195213724569303285402242853671386113148211535691685461836458295037538034378318055108240082414441205300401526732399959228346926528586852743389490978734787926721999855388794711837164423007719626109179005466113706450765269687580819822772189301084503627297389675134228222337286867641110511061980231247884533492442898936743429641958314135329073406495776369208158032115883850691010569048983941126771477990976092252391972812691669847446798507244106121667885423025613769258102773855537509733295805013313937402282804897213847221072647111605172349464564089914906493508133855389627177663426057763252086286325343811254757681803068276278048757997425284334713190226818463023074461900176958010055572434983135171145365242339273326984465181064287264645470832091115100640584104375577304056951969456200138485313560009272338228103637763863289261673258726736753407044143664079479496972580560534494806170810469304773005873590626280072387999668522546747985701599613975101188543857852141559251634058676718308000324869809628199442681565615662912626022796064414496106344236431285697688357707992989966561557171729972093533007476947862215922583204811189015550505642082475400647639520782187776825395598257421714106473869797642678266380755873356747812273977691604147842741151722919464734890326772594979022403228191075586910464204870254674290437668861177639713112762996390246102030994917186957826982084194156870398312336059100521566034092740694642613192909850644003933745129291062576341213874815510099835708723355432970090139671120232910747665906191360160259512198160849784197597300106223945960886603127136037120000864968668651452411048372895607382907494278810971475663944948791458618662250238375166523484847507342040066801856222328988662049579299600545682490412754483621051190231623196265549391964259780178070495642538883789503379406531279338866955157646654913405181879254189185904298325865503395688786311067669273609670603076582607253527084977744533187145642686236350165593980428575119329911921382240780504527422630654086941060242757131313184709635181001199631726283364158943337968797uwb
- + 9935443518057456429927126655222257817207511311671335832560065573055276678747990652907348839741818562757939084649073348172108397183827020377941725983107513636287406530526358253508437290241937276908386282904353079102904535675608604576486162998319427702851278408213641454837223079616401615875672453250148421679223829417834227518133091055180270249266161676677176149675164257640812344297935650729629801878758059944090168862730519817203352341458310363811482318083270232434329317323822818991134500601669868922396013512969477839456472345812312321924215241849772147687455760224559240952737319009348540894966363568158349501355229264646770018071590502441702787269097973979899837683122194103110089728425676690246091146993955037918425772840022288222832932542516091501149477160856564464376910293230091963573119230648026667896399352790982611957569978972038178519570278447540707502861678502657905192743225893225663994807568918644898273702285483676385717651104042002105352993176512166420085064452431753181365805833548922676748890412420332694609096819779765600345216390394307257556778223743443958983962113723193551247897995423762348092103893683711373897139168289420267660611409947644548715007787832959251167553175096639147674776117973100447903243626902892382263767591328038235708593401563793019418124453166386471792468421003855894206584354731489363668134077946203546067237235657746480296831651791790385981397558458905904641394246279782746736009101862366868068363411976388557697921914317179371206444085390779634831369723370050764678852846779369497232374780691905280992368079762747352245519607264154197148958896955661904214909184952289996142050604821608749900417845137727596903100452350067551305840998280482775209883278873071895588751811462342517825753493814997918418437455474992422243919549967371964423457440287296270855605850954685912644303354019058716916735522533065323057755479803668782530250381988211075034655760123250249441440684338450953823290346909689822527652698723502872312570305261196768477498898020793071808758903381796873868682378850925211629392760628685222745073544116615635557910805357623590218023715832716372532519372862093828545797325567803691998051785156065861566888871461130133522039321843439017964382030080752476709398731341173062430275003111954907627837208488348686666904765710656917706470924318432160155450726007668035494571779793129212242101293274853237850848806152774463689243426683295884648680790240363097015218347966399166380090370628591288712305133171869639679922854066493076773166970190482988828017031016891561971986279675371963020932469337264061317786330566839383989384760935590299287963546863848119999451739548405124001514033096695605580766121611440638549988895970262425133218159848061727217163487131806481686766843789971465247903534853837951413845786667122427182648989156599529647439419553785158561613114023267303869927565170507781782366447011340851258178534101585950081423437703778492347448230473897643505773957385504112182446690585033823747175966929091293693201061858670141209129091452861292276276012910624071241165402089161606944423826245461608594935732481900198240862293409442308800690019550831630479883000579884614601906961723011354449804576794339826056986957680090916046848673419723529694384653809400377218545075269148766129194637039408225515678013332188074997217667835494940043014917877438354902673107453164275280010251040360040937308738925689475725131639032011979009642713542292894219059352972933151112376197383814925363288670995556269447804994925086791728136906693249507115097807060365872110998210768336078389508724184863597285987736912073071980137162590779664675033429119327855307827174673749257462983054221631797527009987595732460222197367608440973488211898471439302051388806818521659685873672383828021329848153410204926607710971678268541677584421695238011784351386047869158787156634630693872428067864980320063293435887574745859067024988485742353278548704467544298793511583587659713711677065792371199329419372392720321981862269890024832348999865449339856339220386853162641984444934998176248821703154774794026863423846665361147912580310179333239849314145158103813724371277156031826070213656189218428551171492579367736652650240510840524479280661922149370381404863668038229922105064658335083314946842545978050497021795217124947959575065471749872278802756371390871441004232633252611825748658593540667831098874027223327541523742857750954119615708541514145110863925049204517574000824797900817585376961462754521495100198829675100958066639531958106704159717265035205597161047879510849900587565746603225763129877434317949842105742386965886137117798642168190733367414126797929434627532307855448841035433795229031275545885872876848846666666475465866905332293095381494096702328649920740506658930503053162777944821433383407283155178707970906458023827141681140372968356084617001053870499079884384019820875585843129082894687740533946763756846924952825251383026364635539377880784234770789463152435704464616uwb;
-constexpr unsigned _BitInt(16319) b
- = 20129744567093027275741005070628998262449166046517026903695683755854448756834360166513132405078796314602781998330705368407367482030156637206994877425582250124595106718397028199112773892105727478029626122540718672466812244172521968825004812596684190534400169291245019886664334632347203172906471830047918779870667296830826108769036384267604969509336398421516482677170697323144807237345130767733861415665037591249948490085867356183319101541167176586195051721766552194667530417142250556133895688441663400613014781276825394358975458967475147806589013506569415945496841131100738180426238464950629268379774013285627049621529192047736803089092751891513992605419086502588233332057296638567290306093910878742093500873864277174719410183640765821580587831967716708363976225535905317908137780497267444416760176647705834046996010820212494244083222254037700699529789991033448979912128507710343500466786839351071045788239200231971288879352062329627654083430317549832483148696514166354870702716570783257707960927427529476249626444239951812293100465038963807939297639901456086408459677292249078230581624034160083198437374539728677906306289960873601083706201882999243554025429957091619812945018432503309674349427513057767160754691227365332241845175797106713295593063635202655344273695438810685712451003351469460085582752740414723264094665962205140763820691773090780866423727990711323748512766522537850976590598658397979845215595029782750537140603588592215363608992433922289542233458102634259275757690440754308009593855238137227351798446486981151672766513716998027602215751256719370429397129549459120277202327118788743080998483470436192625398340057850391478909668185290635380423955404607217710958636050373730838469336370845039431945543326700579270919052885975364141422331087288874462285858637176621255141698264412903522678033317989170115880081516284097559300133507799471895326457336815172421155995525168781635131143991136416642016744949082321204689839861376266795485532171923826942486502913400286963940309484507484129423576156798044985198780159055788525538310878089397895175129162099671894337526801235280427428321205321530735108239848594278720839317921782831352363541199919557577597546876704462612904924694431903072332864341465745291866718067601041404212430941956177407763481845568339170224196193106463030409080073136605433869775860974939991008596874978506245689726966715206639438259724689301019692258116991317695012205036157177039536905494005833948384397446492918129185274359806145454148241131925838562069991934872329314452016900728948186477387223161994145551216156032211038319475270853818660079065895119923373317496777184177315345923787700803986965175033224375435249224949151191006574511519055220741174631165879299688118138728380219550143006894817522270338472413899079751917314505754802052988622174392135207139715960212346858882422543222621408433817817181595201086403368301839080592455115463829425708132345811270911456928961301265223101989524481521721969838980208647528038509328501705428950749820080720418776718084142086501267418284241370398868561282277848391673847937247873117719906103441015578245152673184719538896073697272475250261227685660058944107087333786104761624391816175414338999215260190162551489343436332492645887029551964578826432156700872459216605843463884228343167159924792752429816064841479438134662749621639560203443871326810129872763539114284811330805213188716333471069710270583945841626338361700846410927750916663908367683188084193258384935122236639934335284160522042065088923421928660724095726039642836343542211473282392554371973074108770797447448654428325845253304889062021031599531436606775029315849674756213988932349651640552571880780461452187094400408403309806507698230071584809861634596000425300485805174853406774961321055086995665513868382285048348264250174388793184093524675621762558537763747237314473883173686633576273836946507237880619627632543093619281096675643877749217588495383292078713230253993525326209732859301842016440189010027733234997657748351253359664018894197346327201303258090754079801393874104215986193719394144148559622409051961205332355846077533183278890738832391535561074612724819789952480872328880408266970201766239451001690274739141595541572957753788951050043026811943691163688663710637928472363177936029259448725818579129920714382357882142208643606823754520733994646572586821541644398149238544337745998203264678454665487925173493921777764033537269522992103115842823750405588538846833724101543165897489915300004787110814394934465518176677482202804123781727309993329004830726928892557850582806559007396866888620985629055058474721708813614135721948922060211334334572381348586196886746758900465692833094336637178459072850215866106799456460266354416689624866015411034238864944123721969568161372557215009049887790769403406590484422511214573790761107726077762451440539965975955360773797196902546431341823788555069435728043202455375041817472821677779625286961992491729576392881089462100341878uwb
- / 42uwb;
-constexpr unsigned _BitInt(16319) c
- = 26277232382028447345935282100364413976442241120491848683780108318345774920397366452596924421335605374686659278612312801604887370376076386444511450318895545695570784577285598906650901929444302296033412199632594998376064124714220414913923213779444306833277388995703552219430575080927111195417046911177019070713847128826447830096432003962403463656558600431115273248877177875063381111477888059798858016050213420475851620413016793445517539227019973682699447952322388748860981947593432985730684746088183583225184347825110697327973294826205227564425769950503423435597165969299975681406974619941538502827193742760455245269483134360940023933986344217577102114800134253879530890064362520368475535738854741806292542624386473461274620987891355541987873664157022522167908591164654787501854546457737341526763516705032705254046172926268968997302379261582933264475402063191548343982201230445504659038868786347667710658240088825869575188227013335559298579845948690316856611693386990691782821847535492639223427223360712994033576990398197160051785889033125034223732954451076425681456628201904077784454089380196178912326887148822779198657689238010492393879170486604804437202791286852035982584159978541711417080787022338893101116171974852272032081114570327098305927880933671644227124990161298341841320653588271798586647749346370617067175316167393884414111921877638201303618067479025167446526964230732790261566590993315887290551248612349150417516918700813876388862131622594037955509016393068514645257179527317715173019090736514553638608004576856188118523434383702648256819068546345047653068719910165573154521302405552789235554333112380164692074092017083602440917300094238211450798274305773890594242881597233221582216100516212402569681571888843321851284369613879319709906369098535804168065394213774970627125064665536078444150533436796088491087726051879648804306086489894004214709726215682689504951069889191755818331155532574370572928592103344141366890552816031266922028893616252999452323417869066941579667306347161357254079241809644500681547267163742601555111699376923690500014172294337681007418735910341792131377741308586228268385825579773985382339854821729670313925456724869607910114957040810377671394779834675225181536565444830551924417794139736686594557660483813045525089850285373756403594900392226296617656189774567019900237644329891280192776067340109751100025818473155267503490628146429306493520953677660612094758307190480072039980575323428994009982415676875786338343681850769724258724712947129844865182522700509869810541147515988955709784790248266593581532414091983670376426534289079098742549505127694160521110700035496658932724007621759500091227595477831200325335242614162624218010753586306794482732500765136299548052958345872488446969032973871418565484570096440609125401439516349061951073344772753817168731533186740449206533184858409824331269879276752302819075938894191764603880669059804914705202932220114574769307945938446355744093058483466098741029671133305308451601510124097336668044362140994842230895354232007936193610666215236351383330719496758577095102466235782700820575938453736277546445932135116947993404356975890051717304128693125699951445791328843668647245439797933691355015781238038148597339831348341049751957204680813855138272253234219030458164179195368888878989362640509486440530112337687890165646824152338885218611665567933423652236621168833497594762922586523151554244316284075364923316223457798336995440229801638249044555841786652868778333857626201712694823945146208412572567947403078655159448178467488335673853886982143607843369103504905837049147006413324087204923968347162406372146304110247436210704329838033967549296094708909042352807942165389054391217609084676765464997803900415653278041220586434133698802658726748950122980183615091029049242919298428066745937148593879994539254240070220900694662200741796632687373414952817000938093930497338259168439649970963774406833411431113922194082765390241161715106142638681072839764035976877223152727829248475639970029777900589595383604989099084081251802305001465530685587689066710306032849298712531664047230963409638484129598076118133347670029704549206295184751171783054889490211218045322681317529569999778899567668829982207035948032411418382057247326141072264502161892285323531743728756335449414720326329614400327415751813608405440522389476951223717685562226240221655814783640319063683104993438443847695342093582440489676230855515734722099028773790309518629302472390856918840009781940193713784596688294176313226823907143925396584175086934911386332502448539920116580493698106175151294846382915609543814748269873022997601962804377576934064368480060369871027634248583037300264157126892396407333810094970488786868749240778818119777818968060847669660858189435863648299750130319878885182309492320093569553086644726783916663680961005542160003603514646606310756647257217877792590840884087816175376150368236330721380807047180835128240716072193739218623529235235449408073833764uwb
- >> 171;
-static_assert (a == 10403542085759133691203342137159028259461894955438331210801665800234672962180907518788681055608925051917190662144445433835595489501570265148539013616306519011285861864113638610998587283343748668959870044400340187367869274012726759732348878437230149364081610941398977036594823591463255731808309715219781556045092524781748798096243155527048746090614751043610821560662864236720952557147844731917800712343725546175449104075627616077829385396994452199410766816558008090921987787438967590914249326913953731957899714113110918563882837045448642562338486517475793442626878243475178869958697311252767202125088496235928130685145568023992654921893286093433280015789621699281948053130963767216950901322064090115301029360256916486236324346980555378227825665231041206505932451054100655891377307183657244188881780309602697733965633806548575793711470844175477213922050584861112947113328821094578714380110663964395764964375008963336325761662071121014767368961020824065775639039724097407257977371623360602667242992626829630277589757195892131842788347638167481783472539736593840645020141666099662762763659119482517961624374850646183224354529879255694192077493038699570091875155722960929748259201284457182471153956119946261637096783796538046622701136421992223281799392319105563566498086105138357131671079600937329401554014025354725298453142629483842874038291307431207948198280389112036878226218928165845324560374437065373122000792930554833265840423016148390974876479752688661617125284208020330726704780298561478529279775092768807953202013307072084373090254748865483609183726295735240865516817482898554990450888147008484162850924835809973020042760450232447237837196378388135483084055028396408249214425019231777824054821326738728924661602608905318664721047678808734917923923121217803736039325080641571812479260200189082647677675380297657174607422686495562781202604884582727406463545308236800937463493199421020490845203940782000643133713413924683795888948837880891750307666957538835987772265423203470320354145742841869795472799186154631385288573730129094228733379855432514817031425884584962254283999586850250406406681047191820544352342046667950146374296364655891915135310082529994904874562441551527081311638121766367661807914647092917287784017613115795691373814041086838720316968010349263776702775009771662737124600992709418630470128579612748138807983617697487500079502839532266478317788699680283395230308668613168191852557234122469290277763000256531531071762280960597416576452124575885006363492171314551026369237325119844147154972582617127637240421323781252125819313268498872048683068789228870983086306586111793007178693570562554975762384431236664489360478109692520183356042112794589756922036102025380888246082763911915622037570736969677850621708281909652070776450422110772285659921383413532725137107621514770958361581240471968542997294446402584844918179956881219978405772785713402046471903103404871352324277109089891640558983922159359479964068994923538490500501798825116238188381267330618026093160290205596669795981834842352271011063939632623926629960113926326029952143452354640614061049438932665467928443113232214498101774523178129020155017228802221901469548072234073334681052461327832268955923701109732874360984002493130025470753861967432493102395766279717815113135763810886216491770265724160887688887515282293447287121039545323777928286876711267049135547760773655845950622676327972280622345486253084626121247885891757458308974259466441284967765824561478351421051923081842594791616249682768594796413184742007504540382141773556098929461233842797978566466734240436032269122908057438314319410489575244845739320693764798687398942275314333361838560358278583766983210126081046020231469705836544611252075187733112560778125560225565803349953151880800601890382648216375737077015744684142132303864494083237680306898134033570758401131735819237730280209424231954121970154195575070728876653187928423918894211617093567094857926079694003950142962763480728907322409338954277493711834363423032309296862081371923061150409402403668284066920335645815769603890931600189625120845560771835017710222988445713995722670892970377791415975424998772977793133120924108755323766471601770964843725827421304729349535336212587039242582503381150992918495310760366078232133800372960134691178665615437284018675587037783965019497398984583781291648236566997741116811234934754542646608973862932050896956712947890625239848619289180051302224085308716715734850608995498117691600907423641124622236235949675965926735290984369155077055324647942699875972019355174794849379024365265476001505043957802797349447782453767742359446787304217770032967959809288342189111153359045680464231699344620995535326063943372491385550455978845273436611631962336651743357242055102619760848116407351488643448217122169718350824452317641509534606434395208225350712889271762643740106849245478364448395994915755050465135468245061369394410933866013068008514339549345174558881983866497072827311379042433413uwb);
-static_assert (b == 479279632549833982755738215967357101486884905869453021516563898948915446591294289678884104882828483681018619007873937343032559095956110409690354224418625002966550159961834004740780330764422082810229193393826635058733624861250523067262019347540099774628575459315357616349150824579695313640630281667807589996920649924543478780215152006371546893079438057655154349456445174360590648508217399231758605134881847410713059287758746575793311941456361347290358374327775052253988819455767870384140373534325319062214637649448223675213701403987503519204500321584986093940400979311922337629196153927395934961423190792514929752893552191612781025930779806940809347748073488156862698382316586632554531097474068541478416687472958980350462147229542043370966376951612302580094672036569174235908042392792082009922861348754900810642762162386011767716267196524707159512614047405558309045526869231198654773018734270263596328291409529332649735222668150705420335319769465472201979730869384913211207207537399601373999069700655463720229201053332186006978582500927709712840419997653716343058563745053549481680514857956192457105651774755444712054911665735085740088242901976172465572034046597419519355833772202459754151176845548994456208445029222984100996313709454921745133168181790539412958897510447873469344071508368320478228160779533683887240349189576312875329064089835494782533898285493126755916970631488996451823585682342809043933704643566255965170014371156957508657356962712435465291272811967482363708516439065578762133187029479457794090439202070979801732536040880905419100375029921889772128503084510931435171483979018779597166630558819909348223770001377390273307373052030729413819617985823981374070443715485088829487365151686786653141560555397632839783786973475603908129103121125925582435377586599443363217659482486021512444715078999742145616192417054383275221431750185701711793487079447980295741809417265923372265027237884200396238493927359102885825948568128006352273465051712472070059202450319054451522388321059702003081513718019001071076161432358471155369959782811652330837503075288087426055655400029411438748293362031465017502577139252244731448555188613876936961036695236179942323751116112011014592974397486473882674592008130136792663493287323834319147915022427528033518178139180198551672004671264439595962120954122300129377851806213689047404966592261393005849755403969409681891387136302126214754577574214078992738385834194218500941354892714424617818676129678402812599649389519193939384481931712519965763571236544579269391714688112594004439937791027666527275028956096005024721892268353662349049501568931426746983749923266289936079664852088114380642027976981532748458314879741695023966059798072743350980348361092364278288527112580481417860547783209941006436630295569025708378983678708447667928300527961717504931897999052674925211486251029110033534138519456704647644914365911948549537915597987234033945431722519315974082307832411934886264333083916226707665948547147824941143774031630992986403589281430493343304207573431954440506367102005746914258775268625663056944615427077330312326664431034309894720122682694874274735620802316011315482410182991906165335883031756812018133914090861319389023790839528337203606889129436487920140167370284870924438860873830296648014424844378195912932551426780779819757525353368558050825303562419989528653425507781193568399131883673447888828695552112293654073088339775808234324436627659543962164946450396759723040075906766506152022264815158093674649622869572430121164843379253826764183953324829436751005035078152203675523168431161209463034491772102996315554878311000500752369796109685119745615468446576523546008325039060775520970963367909216533343057221662059707100715990114520515109428581554773471551782223970832412406073499896797949247197263055911053575580685552002226777990994346631851517791364630330551754443656577948498726362806681419705536740324268597539896282803552799726080554573302695958428417269671660306173853381343814024048279362738039470198839365706286164147555864933364363287875097138128425573909904433183795098670203800533548856219174579901097084123411402160448390274656216062207733804522678116007830485911118338137291415500040244636646228465275546613185451215477214924093897408659253897872331630294361379429268082112519489979283826532913282908147824847781517964779380824918394924322420104717839012960422523766744397106063463998218416521947089619846125464833145312281971994057275917591591279145274837283273569411904875883590818927011083766111368623876288661469697856984023924541117354584710728162060928747544449729071086406072820826707352705098469570212430005031769870770984490147544922541878582516496026055634218534739829767044431114272772863484628968800592047985977005687260574374332608765746965647976405949709304033414442630581488362251756922883517287565772653346189666094175256518980878632057889091042584644510374477219106080358138511257658994752983022904583136418485544787844335722425uwb);
-static_assert (c == 8779107423697189837569390605084121179785924908521985744210325591223667924519652625818373720019509245903707006132632572173386255064201355735198759440688262514780984111791042739566301784897316373994922192050963272288434060342288511971569697680026523760811225516430052699754044682818892679819131995600216280966062736732384732411361657444399695883865096103428759622813867735547259978529319436889864013687219390567604283318011100799953451520968441264866031813954488628058475114348729275414143158917874709599556247183695853838552321088973445876088042556810479910661449374661999675082811103814453353294194886612961492737263277271551889038610730760478459569256149321998350414023066363814989311109728311712989022996247280182587921449185353922885937877604500400738774240008709945289791605011177739657720181601453512259882004564462415828652714904289727235210537277721389816687643366145200001177712112197515695578887483792988755435401388456145854488880537088360397994643216014828495662460205686448548113229841097955613958440901375416256532864511852298696327611517233241324799070919491286426159788792631723833717451538043437364017185237743182402835670087683125602640318887451596650323528720128188198547270462971612157603487958526705005955580409441670771849388016438035850194585870327013409236236730914217722025655319472231141666790287955685713636274653565577454275838590350806168639165264676470440930351612992518904664647715805865941038423768376846697817543122409517591717292238745940345900530458551468519245767864531742102178628854376524513367983209186974575765707273973775386840081238803880335095740836386527208267311808973522450391189055739828936937359693167240524660624945856907042041257347192086984009640984509322622503890256046324768341632643546455779035376002061691113121234273164937984171774242327769915688742564049454163158318121818582764775268091292470889088445575108022688069271697198283151469645400870507006663799330661702702747443254220478311056407220749648103123435473381583520873055218734115120978678440455896458852497569989966723235965608706826593607128847630137618509151255834742636438796285569873869967729341871213521030011427372987388572674228441333458857512226049283243347521457804912008781036966786374760325341492033297848368160903260470019067535330611645909560888797451907088389764190403007998305168673029446934012245138838180596098559442570696150011296218144186387024615885302290744905340666905921743970013779813332493771192048043297281423248489056841417013807670308191095732464221451376997270745468459702152796818222745730565721202663103043121160101459833683249558684459108862536961994308535039970814557821268170388745941980378838969910592895670554291811739768771829941043857819603751246957962236091154755893962038363120690483862423001038948620681611253867149296463690417828034303547922792249098522404751428960713875050463906134150846089705714470303918299012691600285355859412924847760497076978432722446602521825089097454542343354847347396045079587757210635356999268706465425788833311190517623061860675230010994127196459030322166751571656642321690787471906609473496034789643710478162255664092991251446787887635351852933826820719781733754578161073401362668109819113924252291125741395271474342305574536974918273938513597418963787308994593434191890687730302495910686072338836413159162281072263542758257699588089838677469397467899348065293581751035844389848387161847435160327276066603683131703246410409122832793376751512688745195564021646069245992363396468100513536211651450610523315211697125774638845313243973083536417692075962486918844667432144353019722959653638632948294049984266861870151255315023346724671430499257993958049088066160870545025276597975154855537620265690354041028742742755074396597631965320380782500944568424053420038357524917125099241334990032189526465838192972110970861380060986802081948044345526414857158569939005895236672306344348212805851269920711043891306875873016330601673973249327072503571873518366750575070091051288590764788630190966776854031578939382690709022667421734442841784680826494146620589862829612704279521637740421694195051400095278084716974624615208392585573200182664157066813849346058321763156523965698465901396025152159642193562900743812715885811057212579017860488539960334406702752688595217360219470968738009774067915037157027492209108801337707562571266897723911401203374308490793226200974353356835311756384895692909802720948968131504604855466961987314701846460342135201914356152591684810924688350929140120187693089324255924634578576427004426339299493833434502951593902551451002292839635000904253250021884625417628756439862964325562720709528784964868687330847894476999577326582332350213148861205413652337499383416531545707272907994755638339630221576707954964236210962693804639714754668679841134928393081284209158098202683744650513918920168330598432362389777471870631039488408769354863001967531729415686631571754649uwb);
+constexpr unsigned _BitInt(16319) a = 468098567701677261276215481936770442254383643766995378241600227179396283432916865881332215867106489159251577495372085663487092317743244770597287633199005374998455333587280357490149993101811392051483761495987108264964738337118155155862715438910721661230332533185335581757600511846854115932637261969633134365868695363914570578110064471868475841348589366933645410987699979080140212849909081188170910464967486231358935212897096260626033055536141835599284498474737858487658470115144771923114826312283863035503700600141440724426364699636330240414271275626021294939422483250619629005959992243418661230122132667769781183790338759345884903821695590991577228520523725302048215447841573113840811593638413425054938213262961448317898574140533090004992732688525115004782973893244091427000396890427152225308661078954671066069234453757593181753900865203439035402480306413572239610467142591920809187367438071170100969567440044691427487959785637338381651309916782063670286046547585240837892307170928849485877186793280707600840866783471799148179250818387716183127323346199533387463363442356218803779697005759324410376476855222420876262425985571982818180353870410149824214544313013285199544193496624223219986402944849622489422007678564946174797892795089330899535624727777525330789492703574564112252955147770942929761545604350869404246558274752353510370157229485004402131043153454290397929387276374054938578976878606467217359398684275050519104413914286024106808116340712273059427362293703151355498336213170698894448405369398757188523160460292714875857879968173578328191358215972493513271297875634400793301929250052822258636015650857683023900709845410838487936778533250407886180954576046340697908584020951295048844938047865657029072850797442976146895294184993736999505485665742811313795405530674199848055802759901786376822069529342971261963119332476504064285869362049662083405789828433132154933242817432809415810548180658750393692272729586232842065658490971201927780014258815333115459695117942273551876646844821076723664040282772834511419891351278169017103987094803829594286352340468346618726088781492626816188657331359104171819822673805856317828499039088088223137258297373929043307673570090396947789598799922928643843532617012164811074618881774622628943539037974883812689130801860915090035870244061005819418130068390986470314677853605080103313411837904358287837401546257413240466939893527508931541065241929872307203876443882106193262544652290132364691671910332006127864146991404015366683569317248057949596070354929361158326955551600236075268435044105880162798380799161607987365282458662031599096921825176202707890730023698706855762932691688259365358964076595824577775275991183149118372047206055118463112864604063853894820407249837871368934941438119680605528546887256934334246075596746410297954458632358171428714141820918183384435681332379317541048252391710712196623406338702061195213724569303285402242853671386113148211535691685461836458295037538034378318055108240082414441205300401526732399959228346926528586852743389490978734787926721999855388794711837164423007719626109179005466113706450765269687580819822772189301084503627297389675134228222337286867641110511061980231247884533492442898936743429641958314135329073406495776369208158032115883850691010569048983941126771477990976092252391972812691669847446798507244106121667885423025613769258102773855537509733295805013313937402282804897213847221072647111605172349464564089914906493508133855389627177663426057763252086286325343811254757681803068276278048757997425284334713190226818463023074461900176958010055572434983135171145365242339273326984465181064287264645470832091115100640584104375577304056951969456200138485313560009272338228103637763863289261673258726736753407044143664079479496972580560534494806170810469304773005873590626280072387999668522546747985701599613975101188543857852141559251634058676718308000324869809628199442681565615662912626022796064414496106344236431285697688357707992989966561557171729972093533007476947862215922583204811189015550505642082475400647639520782187776825395598257421714106473869797642678266380755873356747812273977691604147842741151722919464734890326772594979022403228191075586910464204870254674290437668861177639713112762996390246102030994917186957826982084194156870398312336059100521566034092740694642613192909850644003933745129291062576341213874815510099835708723355432970090139671120232910747665906191360160259512198160849784197597300106223945960886603127136037120000864968668651452411048372895607382907494278810971475663944948791458618662250238375166523484847507342040066801856222328988662049579299600545682490412754483621051190231623196265549391964259780178070495642538883789503379406531279338866955157646654913405181879254189185904298325865503395688786311067669273609670603076582607253527084977744533187145642686236350165593980428575119329911921382240780504527422630654086941060242757131313184709635181001199631726283364158943337968797uwb;
+constexpr unsigned _BitInt(16319) b = 9935443518057456429927126655222257817207511311671335832560065573055276678747990652907348839741818562757939084649073348172108397183827020377941725983107513636287406530526358253508437290241937276908386282904353079102904535675608604576486162998319427702851278408213641454837223079616401615875672453250148421679223829417834227518133091055180270249266161676677176149675164257640812344297935650729629801878758059944090168862730519817203352341458310363811482318083270232434329317323822818991134500601669868922396013512969477839456472345812312321924215241849772147687455760224559240952737319009348540894966363568158349501355229264646770018071590502441702787269097973979899837683122194103110089728425676690246091146993955037918425772840022288222832932542516091501149477160856564464376910293230091963573119230648026667896399352790982611957569978972038178519570278447540707502861678502657905192743225893225663994807568918644898273702285483676385717651104042002105352993176512166420085064452431753181365805833548922676748890412420332694609096819779765600345216390394307257556778223743443958983962113723193551247897995423762348092103893683711373897139168289420267660611409947644548715007787832959251167553175096639147674776117973100447903243626902892382263767591328038235708593401563793019418124453166386471792468421003855894206584354731489363668134077946203546067237235657746480296831651791790385981397558458905904641394246279782746736009101862366868068363411976388557697921914317179371206444085390779634831369723370050764678852846779369497232374780691905280992368079762747352245519607264154197148958896955661904214909184952289996142050604821608749900417845137727596903100452350067551305840998280482775209883278873071895588751811462342517825753493814997918418437455474992422243919549967371964423457440287296270855605850954685912644303354019058716916735522533065323057755479803668782530250381988211075034655760123250249441440684338450953823290346909689822527652698723502872312570305261196768477498898020793071808758903381796873868682378850925211629392760628685222745073544116615635557910805357623590218023715832716372532519372862093828545797325567803691998051785156065861566888871461130133522039321843439017964382030080752476709398731341173062430275003111954907627837208488348686666904765710656917706470924318432160155450726007668035494571779793129212242101293274853237850848806152774463689243426683295884648680790240363097015218347966399166380090370628591288712305133171869639679922854066493076773166970190482988828017031016891561971986279675371963020932469337264061317786330566839383989384760935590299287963546863848119999451739548405124001514033096695605580766121611440638549988895970262425133218159848061727217163487131806481686766843789971465247903534853837951413845786667122427182648989156599529647439419553785158561613114023267303869927565170507781782366447011340851258178534101585950081423437703778492347448230473897643505773957385504112182446690585033823747175966929091293693201061858670141209129091452861292276276012910624071241165402089161606944423826245461608594935732481900198240862293409442308800690019550831630479883000579884614601906961723011354449804576794339826056986957680090916046848673419723529694384653809400377218545075269148766129194637039408225515678013332188074997217667835494940043014917877438354902673107453164275280010251040360040937308738925689475725131639032011979009642713542292894219059352972933151112376197383814925363288670995556269447804994925086791728136906693249507115097807060365872110998210768336078389508724184863597285987736912073071980137162590779664675033429119327855307827174673749257462983054221631797527009987595732460222197367608440973488211898471439302051388806818521659685873672383828021329848153410204926607710971678268541677584421695238011784351386047869158787156634630693872428067864980320063293435887574745859067024988485742353278548704467544298793511583587659713711677065792371199329419372392720321981862269890024832348999865449339856339220386853162641984444934998176248821703154774794026863423846665361147912580310179333239849314145158103813724371277156031826070213656189218428551171492579367736652650240510840524479280661922149370381404863668038229922105064658335083314946842545978050497021795217124947959575065471749872278802756371390871441004232633252611825748658593540667831098874027223327541523742857750954119615708541514145110863925049204517574000824797900817585376961462754521495100198829675100958066639531958106704159717265035205597161047879510849900587565746603225763129877434317949842105742386965886137117798642168190733367414126797929434627532307855448841035433795229031275545885872876848846666666475465866905332293095381494096702328649920740506658930503053162777944821433383407283155178707970906458023827141681140372968356084617001053870499079884384019820875585843129082894687740533946763756846924952825251383026364635539377880784234770789463152435704464616uwb;
+constexpr unsigned _BitInt(16319) c = a + b;
+constexpr unsigned _BitInt(16319) d = 20129744567093027275741005070628998262449166046517026903695683755854448756834360166513132405078796314602781998330705368407367482030156637206994877425582250124595106718397028199112773892105727478029626122540718672466812244172521968825004812596684190534400169291245019886664334632347203172906471830047918779870667296830826108769036384267604969509336398421516482677170697323144807237345130767733861415665037591249948490085867356183319101541167176586195051721766552194667530417142250556133895688441663400613014781276825394358975458967475147806589013506569415945496841131100738180426238464950629268379774013285627049621529192047736803089092751891513992605419086502588233332057296638567290306093910878742093500873864277174719410183640765821580587831967716708363976225535905317908137780497267444416760176647705834046996010820212494244083222254037700699529789991033448979912128507710343500466786839351071045788239200231971288879352062329627654083430317549832483148696514166354870702716570783257707960927427529476249626444239951812293100465038963807939297639901456086408459677292249078230581624034160083198437374539728677906306289960873601083706201882999243554025429957091619812945018432503309674349427513057767160754691227365332241845175797106713295593063635202655344273695438810685712451003351469460085582752740414723264094665962205140763820691773090780866423727990711323748512766522537850976590598658397979845215595029782750537140603588592215363608992433922289542233458102634259275757690440754308009593855238137227351798446486981151672766513716998027602215751256719370429397129549459120277202327118788743080998483470436192625398340057850391478909668185290635380423955404607217710958636050373730838469336370845039431945543326700579270919052885975364141422331087288874462285858637176621255141698264412903522678033317989170115880081516284097559300133507799471895326457336815172421155995525168781635131143991136416642016744949082321204689839861376266795485532171923826942486502913400286963940309484507484129423576156798044985198780159055788525538310878089397895175129162099671894337526801235280427428321205321530735108239848594278720839317921782831352363541199919557577597546876704462612904924694431903072332864341465745291866718067601041404212430941956177407763481845568339170224196193106463030409080073136605433869775860974939991008596874978506245689726966715206639438259724689301019692258116991317695012205036157177039536905494005833948384397446492918129185274359806145454148241131925838562069991934872329314452016900728948186477387223161994145551216156032211038319475270853818660079065895119923373317496777184177315345923787700803986965175033224375435249224949151191006574511519055220741174631165879299688118138728380219550143006894817522270338472413899079751917314505754802052988622174392135207139715960212346858882422543222621408433817817181595201086403368301839080592455115463829425708132345811270911456928961301265223101989524481521721969838980208647528038509328501705428950749820080720418776718084142086501267418284241370398868561282277848391673847937247873117719906103441015578245152673184719538896073697272475250261227685660058944107087333786104761624391816175414338999215260190162551489343436332492645887029551964578826432156700872459216605843463884228343167159924792752429816064841479438134662749621639560203443871326810129872763539114284811330805213188716333471069710270583945841626338361700846410927750916663908367683188084193258384935122236639934335284160522042065088923421928660724095726039642836343542211473282392554371973074108770797447448654428325845253304889062021031599531436606775029315849674756213988932349651640552571880780461452187094400408403309806507698230071584809861634596000425300485805174853406774961321055086995665513868382285048348264250174388793184093524675621762558537763747237314473883173686633576273836946507237880619627632543093619281096675643877749217588495383292078713230253993525326209732859301842016440189010027733234997657748351253359664018894197346327201303258090754079801393874104215986193719394144148559622409051961205332355846077533183278890738832391535561074612724819789952480872328880408266970201766239451001690274739141595541572957753788951050043026811943691163688663710637928472363177936029259448725818579129920714382357882142208643606823754520733994646572586821541644398149238544337745998203264678454665487925173493921777764033537269522992103115842823750405588538846833724101543165897489915300004787110814394934465518176677482202804123781727309993329004830726928892557850582806559007396866888620985629055058474721708813614135721948922060211334334572381348586196886746758900465692833094336637178459072850215866106799456460266354416689624866015411034238864944123721969568161372557215009049887790769403406590484422511214573790761107726077762451440539965975955360773797196902546431341823788555069435728043202455375041817472821677779625286961992491729576392881089462100341878uwb;
+constexpr unsigned _BitInt(16319) e = d / 42uwb;
+constexpr unsigned _BitInt(16319) f = 26277232382028447345935282100364413976442241120491848683780108318345774920397366452596924421335605374686659278612312801604887370376076386444511450318895545695570784577285598906650901929444302296033412199632594998376064124714220414913923213779444306833277388995703552219430575080927111195417046911177019070713847128826447830096432003962403463656558600431115273248877177875063381111477888059798858016050213420475851620413016793445517539227019973682699447952322388748860981947593432985730684746088183583225184347825110697327973294826205227564425769950503423435597165969299975681406974619941538502827193742760455245269483134360940023933986344217577102114800134253879530890064362520368475535738854741806292542624386473461274620987891355541987873664157022522167908591164654787501854546457737341526763516705032705254046172926268968997302379261582933264475402063191548343982201230445504659038868786347667710658240088825869575188227013335559298579845948690316856611693386990691782821847535492639223427223360712994033576990398197160051785889033125034223732954451076425681456628201904077784454089380196178912326887148822779198657689238010492393879170486604804437202791286852035982584159978541711417080787022338893101116171974852272032081114570327098305927880933671644227124990161298341841320653588271798586647749346370617067175316167393884414111921877638201303618067479025167446526964230732790261566590993315887290551248612349150417516918700813876388862131622594037955509016393068514645257179527317715173019090736514553638608004576856188118523434383702648256819068546345047653068719910165573154521302405552789235554333112380164692074092017083602440917300094238211450798274305773890594242881597233221582216100516212402569681571888843321851284369613879319709906369098535804168065394213774970627125064665536078444150533436796088491087726051879648804306086489894004214709726215682689504951069889191755818331155532574370572928592103344141366890552816031266922028893616252999452323417869066941579667306347161357254079241809644500681547267163742601555111699376923690500014172294337681007418735910341792131377741308586228268385825579773985382339854821729670313925456724869607910114957040810377671394779834675225181536565444830551924417794139736686594557660483813045525089850285373756403594900392226296617656189774567019900237644329891280192776067340109751100025818473155267503490628146429306493520953677660612094758307190480072039980575323428994009982415676875786338343681850769724258724712947129844865182522700509869810541147515988955709784790248266593581532414091983670376426534289079098742549505127694160521110700035496658932724007621759500091227595477831200325335242614162624218010753586306794482732500765136299548052958345872488446969032973871418565484570096440609125401439516349061951073344772753817168731533186740449206533184858409824331269879276752302819075938894191764603880669059804914705202932220114574769307945938446355744093058483466098741029671133305308451601510124097336668044362140994842230895354232007936193610666215236351383330719496758577095102466235782700820575938453736277546445932135116947993404356975890051717304128693125699951445791328843668647245439797933691355015781238038148597339831348341049751957204680813855138272253234219030458164179195368888878989362640509486440530112337687890165646824152338885218611665567933423652236621168833497594762922586523151554244316284075364923316223457798336995440229801638249044555841786652868778333857626201712694823945146208412572567947403078655159448178467488335673853886982143607843369103504905837049147006413324087204923968347162406372146304110247436210704329838033967549296094708909042352807942165389054391217609084676765464997803900415653278041220586434133698802658726748950122980183615091029049242919298428066745937148593879994539254240070220900694662200741796632687373414952817000938093930497338259168439649970963774406833411431113922194082765390241161715106142638681072839764035976877223152727829248475639970029777900589595383604989099084081251802305001465530685587689066710306032849298712531664047230963409638484129598076118133347670029704549206295184751171783054889490211218045322681317529569999778899567668829982207035948032411418382057247326141072264502161892285323531743728756335449414720326329614400327415751813608405440522389476951223717685562226240221655814783640319063683104993438443847695342093582440489676230855515734722099028773790309518629302472390856918840009781940193713784596688294176313226823907143925396584175086934911386332502448539920116580493698106175151294846382915609543814748269873022997601962804377576934064368480060369871027634248583037300264157126892396407333810094970488786868749240778818119777818968060847669660858189435863648299750130319878885182309492320093569553086644726783916663680961005542160003603514646606310756647257217877792590840884087816175376150368236330721380807047180835128240716072193739218623529235235449408073833764uwb;
+constexpr unsigned _BitInt(16319) g = f >> 171;
+static_assert (c == 10403542085759133691203342137159028259461894955438331210801665800234672962180907518788681055608925051917190662144445433835595489501570265148539013616306519011285861864113638610998587283343748668959870044400340187367869274012726759732348878437230149364081610941398977036594823591463255731808309715219781556045092524781748798096243155527048746090614751043610821560662864236720952557147844731917800712343725546175449104075627616077829385396994452199410766816558008090921987787438967590914249326913953731957899714113110918563882837045448642562338486517475793442626878243475178869958697311252767202125088496235928130685145568023992654921893286093433280015789621699281948053130963767216950901322064090115301029360256916486236324346980555378227825665231041206505932451054100655891377307183657244188881780309602697733965633806548575793711470844175477213922050584861112947113328821094578714380110663964395764964375008963336325761662071121014767368961020824065775639039724097407257977371623360602667242992626829630277589757195892131842788347638167481783472539736593840645020141666099662762763659119482517961624374850646183224354529879255694192077493038699570091875155722960929748259201284457182471153956119946261637096783796538046622701136421992223281799392319105563566498086105138357131671079600937329401554014025354725298453142629483842874038291307431207948198280389112036878226218928165845324560374437065373122000792930554833265840423016148390974876479752688661617125284208020330726704780298561478529279775092768807953202013307072084373090254748865483609183726295735240865516817482898554990450888147008484162850924835809973020042760450232447237837196378388135483084055028396408249214425019231777824054821326738728924661602608905318664721047678808734917923923121217803736039325080641571812479260200189082647677675380297657174607422686495562781202604884582727406463545308236800937463493199421020490845203940782000643133713413924683795888948837880891750307666957538835987772265423203470320354145742841869795472799186154631385288573730129094228733379855432514817031425884584962254283999586850250406406681047191820544352342046667950146374296364655891915135310082529994904874562441551527081311638121766367661807914647092917287784017613115795691373814041086838720316968010349263776702775009771662737124600992709418630470128579612748138807983617697487500079502839532266478317788699680283395230308668613168191852557234122469290277763000256531531071762280960597416576452124575885006363492171314551026369237325119844147154972582617127637240421323781252125819313268498872048683068789228870983086306586111793007178693570562554975762384431236664489360478109692520183356042112794589756922036102025380888246082763911915622037570736969677850621708281909652070776450422110772285659921383413532725137107621514770958361581240471968542997294446402584844918179956881219978405772785713402046471903103404871352324277109089891640558983922159359479964068994923538490500501798825116238188381267330618026093160290205596669795981834842352271011063939632623926629960113926326029952143452354640614061049438932665467928443113232214498101774523178129020155017228802221901469548072234073334681052461327832268955923701109732874360984002493130025470753861967432493102395766279717815113135763810886216491770265724160887688887515282293447287121039545323777928286876711267049135547760773655845950622676327972280622345486253084626121247885891757458308974259466441284967765824561478351421051923081842594791616249682768594796413184742007504540382141773556098929461233842797978566466734240436032269122908057438314319410489575244845739320693764798687398942275314333361838560358278583766983210126081046020231469705836544611252075187733112560778125560225565803349953151880800601890382648216375737077015744684142132303864494083237680306898134033570758401131735819237730280209424231954121970154195575070728876653187928423918894211617093567094857926079694003950142962763480728907322409338954277493711834363423032309296862081371923061150409402403668284066920335645815769603890931600189625120845560771835017710222988445713995722670892970377791415975424998772977793133120924108755323766471601770964843725827421304729349535336212587039242582503381150992918495310760366078232133800372960134691178665615437284018675587037783965019497398984583781291648236566997741116811234934754542646608973862932050896956712947890625239848619289180051302224085308716715734850608995498117691600907423641124622236235949675965926735290984369155077055324647942699875972019355174794849379024365265476001505043957802797349447782453767742359446787304217770032967959809288342189111153359045680464231699344620995535326063943372491385550455978845273436611631962336651743357242055102619760848116407351488643448217122169718350824452317641509534606434395208225350712889271762643740106849245478364448395994915755050465135468245061369394410933866013068008514339549345174558881983866497072827311379042433413uwb);
+static_assert (e == 479279632549833982755738215967357101486884905869453021516563898948915446591294289678884104882828483681018619007873937343032559095956110409690354224418625002966550159961834004740780330764422082810229193393826635058733624861250523067262019347540099774628575459315357616349150824579695313640630281667807589996920649924543478780215152006371546893079438057655154349456445174360590648508217399231758605134881847410713059287758746575793311941456361347290358374327775052253988819455767870384140373534325319062214637649448223675213701403987503519204500321584986093940400979311922337629196153927395934961423190792514929752893552191612781025930779806940809347748073488156862698382316586632554531097474068541478416687472958980350462147229542043370966376951612302580094672036569174235908042392792082009922861348754900810642762162386011767716267196524707159512614047405558309045526869231198654773018734270263596328291409529332649735222668150705420335319769465472201979730869384913211207207537399601373999069700655463720229201053332186006978582500927709712840419997653716343058563745053549481680514857956192457105651774755444712054911665735085740088242901976172465572034046597419519355833772202459754151176845548994456208445029222984100996313709454921745133168181790539412958897510447873469344071508368320478228160779533683887240349189576312875329064089835494782533898285493126755916970631488996451823585682342809043933704643566255965170014371156957508657356962712435465291272811967482363708516439065578762133187029479457794090439202070979801732536040880905419100375029921889772128503084510931435171483979018779597166630558819909348223770001377390273307373052030729413819617985823981374070443715485088829487365151686786653141560555397632839783786973475603908129103121125925582435377586599443363217659482486021512444715078999742145616192417054383275221431750185701711793487079447980295741809417265923372265027237884200396238493927359102885825948568128006352273465051712472070059202450319054451522388321059702003081513718019001071076161432358471155369959782811652330837503075288087426055655400029411438748293362031465017502577139252244731448555188613876936961036695236179942323751116112011014592974397486473882674592008130136792663493287323834319147915022427528033518178139180198551672004671264439595962120954122300129377851806213689047404966592261393005849755403969409681891387136302126214754577574214078992738385834194218500941354892714424617818676129678402812599649389519193939384481931712519965763571236544579269391714688112594004439937791027666527275028956096005024721892268353662349049501568931426746983749923266289936079664852088114380642027976981532748458314879741695023966059798072743350980348361092364278288527112580481417860547783209941006436630295569025708378983678708447667928300527961717504931897999052674925211486251029110033534138519456704647644914365911948549537915597987234033945431722519315974082307832411934886264333083916226707665948547147824941143774031630992986403589281430493343304207573431954440506367102005746914258775268625663056944615427077330312326664431034309894720122682694874274735620802316011315482410182991906165335883031756812018133914090861319389023790839528337203606889129436487920140167370284870924438860873830296648014424844378195912932551426780779819757525353368558050825303562419989528653425507781193568399131883673447888828695552112293654073088339775808234324436627659543962164946450396759723040075906766506152022264815158093674649622869572430121164843379253826764183953324829436751005035078152203675523168431161209463034491772102996315554878311000500752369796109685119745615468446576523546008325039060775520970963367909216533343057221662059707100715990114520515109428581554773471551782223970832412406073499896797949247197263055911053575580685552002226777990994346631851517791364630330551754443656577948498726362806681419705536740324268597539896282803552799726080554573302695958428417269671660306173853381343814024048279362738039470198839365706286164147555864933364363287875097138128425573909904433183795098670203800533548856219174579901097084123411402160448390274656216062207733804522678116007830485911118338137291415500040244636646228465275546613185451215477214924093897408659253897872331630294361379429268082112519489979283826532913282908147824847781517964779380824918394924322420104717839012960422523766744397106063463998218416521947089619846125464833145312281971994057275917591591279145274837283273569411904875883590818927011083766111368623876288661469697856984023924541117354584710728162060928747544449729071086406072820826707352705098469570212430005031769870770984490147544922541878582516496026055634218534739829767044431114272772863484628968800592047985977005687260574374332608765746965647976405949709304033414442630581488362251756922883517287565772653346189666094175256518980878632057889091042584644510374477219106080358138511257658994752983022904583136418485544787844335722425uwb);
+static_assert (g == 8779107423697189837569390605084121179785924908521985744210325591223667924519652625818373720019509245903707006132632572173386255064201355735198759440688262514780984111791042739566301784897316373994922192050963272288434060342288511971569697680026523760811225516430052699754044682818892679819131995600216280966062736732384732411361657444399695883865096103428759622813867735547259978529319436889864013687219390567604283318011100799953451520968441264866031813954488628058475114348729275414143158917874709599556247183695853838552321088973445876088042556810479910661449374661999675082811103814453353294194886612961492737263277271551889038610730760478459569256149321998350414023066363814989311109728311712989022996247280182587921449185353922885937877604500400738774240008709945289791605011177739657720181601453512259882004564462415828652714904289727235210537277721389816687643366145200001177712112197515695578887483792988755435401388456145854488880537088360397994643216014828495662460205686448548113229841097955613958440901375416256532864511852298696327611517233241324799070919491286426159788792631723833717451538043437364017185237743182402835670087683125602640318887451596650323528720128188198547270462971612157603487958526705005955580409441670771849388016438035850194585870327013409236236730914217722025655319472231141666790287955685713636274653565577454275838590350806168639165264676470440930351612992518904664647715805865941038423768376846697817543122409517591717292238745940345900530458551468519245767864531742102178628854376524513367983209186974575765707273973775386840081238803880335095740836386527208267311808973522450391189055739828936937359693167240524660624945856907042041257347192086984009640984509322622503890256046324768341632643546455779035376002061691113121234273164937984171774242327769915688742564049454163158318121818582764775268091292470889088445575108022688069271697198283151469645400870507006663799330661702702747443254220478311056407220749648103123435473381583520873055218734115120978678440455896458852497569989966723235965608706826593607128847630137618509151255834742636438796285569873869967729341871213521030011427372987388572674228441333458857512226049283243347521457804912008781036966786374760325341492033297848368160903260470019067535330611645909560888797451907088389764190403007998305168673029446934012245138838180596098559442570696150011296218144186387024615885302290744905340666905921743970013779813332493771192048043297281423248489056841417013807670308191095732464221451376997270745468459702152796818222745730565721202663103043121160101459833683249558684459108862536961994308535039970814557821268170388745941980378838969910592895670554291811739768771829941043857819603751246957962236091154755893962038363120690483862423001038948620681611253867149296463690417828034303547922792249098522404751428960713875050463906134150846089705714470303918299012691600285355859412924847760497076978432722446602521825089097454542343354847347396045079587757210635356999268706465425788833311190517623061860675230010994127196459030322166751571656642321690787471906609473496034789643710478162255664092991251446787887635351852933826820719781733754578161073401362668109819113924252291125741395271474342305574536974918273938513597418963787308994593434191890687730302495910686072338836413159162281072263542758257699588089838677469397467899348065293581751035844389848387161847435160327276066603683131703246410409122832793376751512688745195564021646069245992363396468100513536211651450610523315211697125774638845313243973083536417692075962486918844667432144353019722959653638632948294049984266861870151255315023346724671430499257993958049088066160870545025276597975154855537620265690354041028742742755074396597631965320380782500944568424053420038357524917125099241334990032189526465838192972110970861380060986802081948044345526414857158569939005895236672306344348212805851269920711043891306875873016330601673973249327072503571873518366750575070091051288590764788630190966776854031578939382690709022667421734442841784680826494146620589862829612704279521637740421694195051400095278084716974624615208392585573200182664157066813849346058321763156523965698465901396025152159642193562900743812715885811057212579017860488539960334406702752688595217360219470968738009774067915037157027492209108801337707562571266897723911401203374308490793226200974353356835311756384895692909802720948968131504604855466961987314701846460342135201914356152591684810924688350929140120187693089324255924634578576427004426339299493833434502951593902551451002292839635000904253250021884625417628756439862964325562720709528784964868687330847894476999577326582332350213148861205413652337499383416531545707272907994755638339630221576707954964236210962693804639714754668679841134928393081284209158098202683744650513918920168330598432362389777471870631039488408769354863001967531729415686631571754649uwb);
+
+__attribute__((noipa)) unsigned _BitInt(16319)
+foo (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
+{
+ return a + b;
+}
+
+__attribute__((noipa)) unsigned _BitInt(16319)
+bar (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
+{
+ return a / b;
+}
+
+__attribute__((noipa)) unsigned _BitInt(16319)
+baz (unsigned _BitInt(16319) a, unsigned _BitInt(16319) b)
+{
+ return a >> b;
+}
+#endif
+
+int
+main ()
+{
+#if __BITINT_MAXWIDTH__ >= 16319
+ if (foo (a, b) != c || bar (d, 42uwb) != e || baz (f, 171uwb) != g)
+ __builtin_abort ();
#endif
+}
@@ -0,0 +1,43 @@
+/* PR c/102989 */
+/* { dg-do run { target { bitint } } } */
+/* { dg-options "-std=c2x" } */
+
+#if __BITINT_MAXWIDTH__ >= 65472
+constexpr unsigned _BitInt(65472) a = 65874028414853418769511496113653036945710467528674240836188871502976748745763974525826911024024988631776491096261751992694895296214498585327384601121850230477827515082843619768846499801840836477230687590770231681718268338714887172330888785411211246357940293072535006266916583089772232445667160886208448607927748489013059344141951625673199213945267073377588652374198634016718719257659199541018970117033192039851653491638992986532515557336069337719046396088060414869427270972708809318734227046883806081011951941853679439848321781173016681200685359617693806920032604807641414656615976627881030905633504995608500926313100449123752592887306455273713086084720226711163858729450345307982160835189085198339193053545528326363004277216519521996803653047233696840937893926439475024000274633924716672022043462512673682343650888234611610847904449303938980580750614829479521364941526248038103556791184166137132891705498670203747450648138794675915927809475689266431674447401721770257807894864574772637777546833262526951307916013054159424871918674386303422478917660124313218179561460069927914109853781325554791226906771269776791232118969314470480394982481391738558649576936680153086613697764141243587961259345656781466911451311347049773832249980208428530724233103217369963103642890811580190014250767734527431460062555356767163656837728658921843437422091225040343040245536763579475902218857185893576553568913202523567943581185934074140454243365677691321402599868371075480132367548064644179457549106582668003278353839811901755098775042915492192962256439240717885562228560807300368546591938513564249673935563354224669505426548315283725161174366021701375396395313621732692448055488113835736519133847733806933661608336123237017767589792413707136130610229516496362268872996002408911802982404007464241164929849341909484070765678046190680486057484835560562448063002010171248868062856794398851279347048705720960974749673146662296765976038110218870942100630056574273343812309347877934257043013803766940137680754965100302990989281818211387137383832600675317434920893732120105407723736041635958085676519190305809361514850656066374765384629954359307080862256105691419898168955679806156443004466405913142123628524231555115399711321193475052976374230374739915275763990520499641653144284448959338924397090731568126860006699218100212808418951593973346259258754997140003401228249592046733643429633842927437674005630309466335475488976044970815680337796705251785679176317921969250255914644143927301143156940750728409691193837462118411451140103456466642917621794037963804154558563563784540744625286045320380647149505894465602074709712052403213672513944120580472196908870481008605753502378254869195510822476848807886998210212224568817665331382282682183443019436910934518254905570403017861343476981516822213043567878416094061997484366094926060989684786188719853361377592613245034788253106057223977996442867392634883776229675223227731721808083021736947720678172726157569358655251453763272147556197009586238264046136725977202440532459363521159216893005875943650891355683793285122481839809223042446177899018320884858378858428482004887350002248475654126695437381791039346060525159596388199191045220810622260461623488951548300045143031946225548627356322494072635246741690369797703750001744527651635248045159165227990904076792563599086736013143689002450121560791866918627656264249547156379687514841821979600884946973379386059970849524777822542279884834069088756993835503335163308439818940407550289076454404410002526269749323403673331561005855976564163112359624884449722076806747002050900060486557888988389190561491837653913417576996782073392887675547243908721620711696799096385497090726000898536841269644251102949559919330359725680095583471880505317680844666709274840966390417748140336028128180466837002340200275922083519953988906089254843320339560405442077901688830870404393361047302469466448124739846498711286663890861622125303854725244017935265801954966781478807230955537079573035800508809193696776558659380041474673947719614891591483335826961674762867599639802412473648680441069062029676465317014339608126488486239504818779896608289143566814074344128163474927248996300958043211993182818053822887583188270715520756855009877038634425539657265881288715061989818229395878573316718153726750826355803265260984266618144751818838129431927560052524725127582765549442372461635957790507428542296212660482883830778100032262628335685268361076110653003933720753658626342498598108207113591628523223931344937962257434088745568685381473222813754713557301137685188707577771735719907385875925945361215971464704808214927499603711487344132091326731184707081884630565832911532419130163514966778562434847861021362218993469451376667702490745897248165073801412613710459059823342004801266188992270518474584690584110796775040192964553128155321278735400418222301274509554699483242906248842528643927491916050334115601214082061834286251573797771471610462890207070038990113517384314874988389218929593573595769992957934439472313648608872221417538591099909547681713055197851963217806394271932283786418963737083378263837851866770792294581430370179812803807766812134735008944094254924133000181138341444754146592554240244926530488085797161607440296312032375671384766799546314294952639429116053444305204179954961737670754928180951211327209631174491438566704748775957423647631106931872353072411758039523701355399245986495256131899939578128637906193987861515696267624022768855677386145040750676905386076271594075012645017847456843861067907361603785482067517607711397078496893391404908466039763474426356995787412728936302077788321037622089836944185920214948667492076372211507958383725993147568828022520584628113743069072098077681737646616832744282683301027940111008949487559489400280166812162349769417565580841259074013682180200573711186777726659689975490119163357473183919117291539140678034476458394800768806683673132266242343880852243749183854335527770813216391997262974885810843114429314160237463276656664218915730925460828760711378046669902410716387688714853282313680765227107400697209645981183025449661912571103890490913039864188897637949556486744952841792160388971558166205393610932705442433631027753841798811000777130265365602851965515681643984169325435610742993940251263241305792519709217930230875279761194839959584662947191743403356700820347334268850390650844637405501531301921096571026263943432066459294971843089035394861220552532758517810050362565876624718715634556912646641949968260622504116224630219284301623921188277675205384056375364778072061649987278221213051902862594711798265704318920329526303415071651490215159169436665502967051371583199355417397040849618260976239182865708899876580220885148819958098892407447384776849540577596373076572931387032303318606938946805395609756474317173037851890190086080334220234266081872276699590277311605725492019621206245108261399321173649438883031907502103004618343981447073270063780499728342099870986514585907891949892308658040261024667776373424978390909682927910796351757483974443865702371792838882771005747543496062821233816175876149479890010870200215632229210706418785910292789638550348725797240661293132307251159131784402794068309831964186085953199517245335059417823074979114015927625438852575505515547130205018453380351113945679912359116614886302675918646948307265762938004110601513658895196700081824586705020282825093739598881081540708217418131914073953341509242444578622435984145983493347604029272854899321609106849286714028483886414825128479818859724734438344906945298606455406699287820316660695989544913612976004949026573679384907850688667479190435572179237006408685754560762141977321367339517301097820953022755318954649838568359278646708109095740043295665248217530811189495831329465924529060656867586984790794628582957651073768585090489278140555182834690421510195303839613545873092108913694594537183285417682903243454311391369375810654906662974651031976593576633213427096627363649424527674138186816206523669842323707281027980506733634096495865602720885328039147475167492532627097604997707385503393991456792672459352936820122822469556596945676396903590546739682393729575454493944807057345819069181271569904644175551803259147445317231361820692382321822423289376965920517760072762131028848540838123733912106843655308311750496550815033703056692798798011918005011348199727933997069164542544843124651534694478753855625309629960678863623815672915274926726965714364858257611221106385074050699918280948177141442387115797213194242870596023564029577989498938485534058029690537190534744252272824857327493965876618976643677984346169877601719298683399281042997338804443874233186946808040598508364557521255575013579815682146068863549337248303001248078807047378108920762143811221461759354620875369589065024312588898065507971561029929345527858159313129820327669633132293160565999400466976147547125003253164886640290777125287017292361727094985547014756417512102317970262384641051079277427351725574074131116107146600399234403647819323600759586671280733725982209124764267999221147483008839140602670257205078780970624480127071396543158542953522136110465710368242064084840890205082187266645629140357952494765688460918507878486426042065278647584015295279651155982623258616377485606104157632043716067693156340573589748375359059722913343059515310846221532353844339794755668848402309080774422293295651170084782844354070621520168937868316086040235069146058345289688192907685918900389066798118530800450286088002427616043549842138481236713776013883531628590595300042847329197168381891936968101967776014081901912034332263670677828204428422384434715718704595120461430375574175765702011953092786008531618841562463621545904938593447520015052398913473747165675739128227729860522837856493359404981275620405156088407724873896814306917527150300142982470028171920769744429179320431741610875850043999674743188496908160129431272106464679454201996897333414256543788368259896759637862338268498926658644196226425393282232669383401043410041622131834269331249053253163263805617292232014554953766603366944449281936436163348007550264881313734403499866885910422096847245868983837395381509905362814510495294417227071475516750438538914922504534834593033205080900795488912148742019119549014001554366911119067584994744299018308039208210417466906415185076706749205801012799329399986289204986294786437588639612782571971507723771937929701163710244163043404564826267800950589676152533594989418618014288641614520385570184240884586130870870741886347468641829857183453740491569842565622064996027914799445938815414612045489948609894048719358464589599498624644809962127765563981065415756251258118421436949142446606626464150436046745354962830933231617087191036634528282763930864590672989015325808346540917086018285482216294776630407604444017209836386813546251369184558393180862727824133618231105407565377726874201016716874747193298110226548713113055804386335542276584785327642141420979789128607575389126059449056231221655504322975168824547921598754212580284860341317067232171503075318659142194545497016145803181512026343421286297638468103352223053704896868265116206256544679438575897966426762874745106558292347134875728572127325337754733765251105470177415270966206899861267252369448068927266102835975020557437913164840102135985178231875990189340734544654744647827441286010902235438982564998068477390121580268067852517302500958493927727155669887335454802232441766876959727296032213883872141451322900261005024406412638925534447309297109774680653396839068981982303959449585919601951784676269338509798444492284027198527534729264816863223855205480827392176674198533541998652285208950844368772121015938775827868718348053651466660945842822857135950701469458166244446036560410696408598768008796242326788817178564489668276079897020785729862548025216683403145162467545641729518620497596028019199039246447845134132855463133735174323788649842018758419435906318743206053356800088370917852318294527105533345230477001222310383402828126358397712503413591645611054601866497386469412638491773728614643382590286186308330017723253240683781406419919818813502414034869402770627046602136910556735340620577006649826384200614066464173557086745764379665102794298748986565199421337796563169859800331533497258203854653725133871631985474523134061290217790871839012014060652170431386706390526266713354909666532894989712338707426377288105959729380930582675275553400044698473843175010204608057871421993855679325795511343440323540375249581001966431109313820512103729737415876492397855350709356620428053728631513279657137136751691815273101807269203767363250781488995922177169506473238033222632470640191052132325977988500916888797348877819383961059260577892204584222324373872871821748974613401628203875338762555211387910748411152327539619567997694542831475663395895555090404922654858513105597129946139446385944075046977527087443129745077809595756576233514427417022666744060487857898390789948480719931806881956529624868523931326204018924742455510988728560620886881508902552006781252685182126521983698023601752690226917489683075686040459944761124984353820735928331227975669811495025536004835557357866887952405925158206358648460053744971810759800516971341251283976744691594110219822376535068050425606180275339861939768053672977590839860433707369056754028768873245370748243872093908425321452790676005744239063004090812287994171654371534280527461204785965744686899037505526748205474829861508775633341610106216825084287086663714002411976655574453853711919148720158805545980786494280975922278491841813051023374114075744194873828536865132926198728339588170375472796201352742410432853435729363112226201941628255002535490275056766586373821459331811284350772302429368659539685224295962240105465692745743117250558134122530552966969305908586250082284865580325406190790343864287037227316258520732020059190355270848306662653818702002897039308630618431243314449931945150585878901504845973215101937953823928461721757938572553687288827606914187939448631587847341567152264836920949873736396479054462466993545281884314888041635210657865924492733477634678092762053049423724420978749565535935202527272735525538857856532535829727403758248515676377734964271319895603733369499282090619370644390912703118190967699735839422150118676090812589197956828432883454591775506142072991995255477162685456179917844477810916117758366522467183885517800565518850836567463260579936570404378905085631880126835957647088321534365595303983957495652572590640830763831479030713794949481583992861854626122255507636651728698938040296394529620734556222565311409570754214795520535003346400553934254868951469742466063081282009587365288248731116040001268793498485153779630516908276030764263795595829834765298430173859886036974114210469592900822522496578393807022364135855868617791972115817676751055814736691157277719078078363722995682352787453931398544225888615155245513172842244076107970477685087347438625378887619302413866466619117008334792748656074141300284702324314107158575021092021045201219104849568044014318163216648167167102545567590192051572811882759399171815091482243321889561619871953313830812925825376241612376634587322435846044799053536631550927269169032948586514626083989734654942487786073128339707925635994571914892483303685762083840487806131930731387849170685349079864020207179382689618594010162070659159447889344283707204286255036729730123415253795453381392363525730409662963512930464146567702953413882972452890687402324823676434623668607417451713252684608112007770743378032124178068076627655591705783142289469636449645674093183854831679943102480054334422336004642534472137802293959591564047787165742281711262045913463889166614975785367285123231848489964947168259259859651331806294100233514606935240876224388286907295795623525145565485264076203685696921301244157049222399694261123517677386771518164905737344603978252996052580868902923124475552914011730528812300179021230309867253769880851013594703320917123515967493597713163002806913617288734951731859626757112576606989339415205916570757259477367425003980820415407690284037569443414621271531087857711540292395118940327930085917648961413854880713533683379365683118321440194053278494655321531901445796224168264056771141704976004602347371222102339725674327295424584923438972729801604160881606371129484752571956550759895866459266634599318934331132992268419492312051515244634605489726581981774372625890847390663222639677778599130509229036502941438146903740421129745765409463741046041724109743995541832910890810043237637250838512421266274159269838087162966877339415320918445838084607926482487326890808603331454937071756872582541587950869617374867497291942434166388340736188426522646778126260187474459305273317048369223194305392592429269796065446394224285706245837186991386807972768134945406804843677986121363618283994623075786820519030677924524631232773053566327068836914008068880508593892814413599933512127846256450189605965007722408749599327105633360191669226811125705464166865932685139499043188417058408145619475137407704309057096253453970943431010208805958880441668536636630984528024738383726952579394912266155766194059496573034122939179354744906886317447299846294675145801761429867331920860320689436106861896387056042301081513818264319294187170363122704106526138368915635603316494940799629455580847884255301629707874127819875328740309245368068925386845081146527751898281929519183808884694732922929381859998068561552287796638630153557107517603976885737408961385726894117817772124305384275773752681561772589162896726543848118292224854735017911552771598879672195419903142467189758288893617797981332645308463000380199968291172662286342433407530992399311582382371037051384107721693674935016059465473282177680148455402959465472212928981753238596329614601855483413398833842270568295296640743598590779752989551301629995771523000231911679050279485698305095423321484021804360883790254659446161386801194534079288499545690468910577746611299797864563154863490832639144410652702292169488612519356587316152787229543906355470677554502438539602268426767473565515536424169935736875415273620834081490730213150398951736650842108450857240742774594217852879173672688751229305531115825014850231000546945150122964624749643195594303796058701805941210884086651903723484629069594503110445498020891082678423358251793036052092074949457345902128190663782180041297332240668738760754685732067836519097118357790131727679935781054122263807112935237022613351668926147398489883137771515688789600851256388568716495659230435230035583859074576720408679091908831650422755099588394054135377265310497551564802196750405263555192208913371509621178676044203357752939238134233705209988483613418357068790410292407284985250078216801955681819735640889915286539424767699291558260497936451862444377162411777198512727507682930531190062304184267580007068243872442587201835784461931300341180739516168341521559240873860541511979663086972805839349071094889623734952370289999461430319855751397225742175395567834824532612348799185498233668108399584932908791423527338415192594890797161640870428514483903241405192766090688820461474694129483396941450655378070502596902012960005925071407505634409039374591587356995126256441595045666991786542475413106212634440243252914105680546441834800933952893940680530366893360583164583102871341878638954296317852245050855362654227742890577697939811035528084823005072060163844309859018655879693761266441850506107247499887845837529072734963012358189223535309540488630641402694119285809766132525455640455074277103890569921925511571780900429074779519535887352143224202076526307608773803900609314478528807884041223459718478713147780482731067298371645459172074879456665672144659257063151846218815521853521538039105580092129093604550652176702149722267464711925176295825259195451897982973468788292910834248649486634164719847512355589622486356044931885992391641340252366296529307289311708336501951699737694422661506981734291820308445302217945166uwb;
+constexpr unsigned _BitInt(65472) b = 100114717733501279047723776182956757115347721138729600912473525092734313193742682589293676348980090646698499578185617585517470684073352391831549464003765330477102561187757762352331821624084183379691781020398833769817312236580255374406710448238653215266366011299735448468233210044198074360279493272538045406557958991166999429636554253642483353287723736626614076173774389030939047034368309416169925794676390609697640839419284172923106398747822703250993067360914782537098910254695325663386815684191492860666091783967519578790679002244952830877932146242740101430274624860813733813737621518346385654857238660113122429104843905171306980734661172930679373474815865977649539832219611124478579695954630737663119194766666017364148266829323683991092607661278489224151059990583807281880150958519699211512206729907482237561220086387258275529362147029865909521016312742478755489179294243171430093282806931016966661559517454422004572379224590073716192247703943965356759520307382733944577073741111865259059837853430666432946454201096800841338436696525366648645617275032528104274255720436655975433320265726343790016529230948964521731256685630816133432097823288170038731302362863259092166866670795290976986882930506509405859592561888953891642540736219655036807263131586242300902324923629589408158902044606269590852501824083407977953169790880420387424165701539966258248590181838302042657242716350701981682380948097800014578392460910606462228574932950529247423845880444246962732820595796167829328780390088984547261952625922193139901916610229492861661092747721202750340704955733954501284774742095963348761398081653664038221128605707314601000137489677301442099842048911700061503791803955912831122268287304609148464318114946033067997411760446328269899089629818950408698728257794167574666280106889646797554422339012444675121187904191185708967722514510225266384207784173261118827990431209523939503888139578140495778237116859508769743682297748273388288638161363038211171042178345297734400961512771146499751650577019484918426210881233862902133150779088536308917675675720023126726569989263142413036511588884004219336934144457874722017065088307033502514199354766651530451205664583289757274081662413150880987330091133750067230834920533743728975055389263344730948669540035822680101190222573346417237717427750191394457814210342687726766498000013848036213470001824806523810390917676635462226134191850956214698938594038260119823563852944477412377714414327252439758780753934063615870937408624486637799147159598040393215327215307442605340117246025800399858556963142978679611972248396221700503403804080352829695144629372961722182429873697110904758384111265071905568036182549343701666549957834011325475822990799454716096746337639631671775884490360422243011601189186004955027306894976823561765501914858039133459964203906905395236286543557370732592582545923702706082388298981292440554326523141412191768888786774985354560225477275159056876962270986375173181799087865790243219120768156514753058075378804237121387244965229365089782719136044346354639742868457547718684681095030552362332018190999849681495887592146220633962494400153448731724916345133363187176014861754666835819786079622711131515095142110819477599733946526083895839602442738520215405610661155875963333902646752869321042183314833848600425342924029514402024057940515954560414087254132638206655542732916298810645354416986968872665347028969439469342892109369274868458350967335118125301472432660404078835720635929784538443336511239984968501806047941832562031327607795893386746691225953383835234381573194967235635474643094918398517417264166921806441528288088045443402355878723816094922844956240649972407815453434139893648396173056349465887442386211214383750279215239460582299014299785457774615881718062010290696199591746236715232317901166371136396637267613309688712874953346067259350936395868267524609507790518269395096951214637354016666487972149783655980128430859771990004203501929484787778444457578683004883770156322092059077341536722349032536972114257275616406902699749709996773603933319820907854024772479536315883844669093925821283494708645822008101810820783195140641716134000243606844133608185824332332112983249839927840564670970228432433825221961975915060990749635049584212248419151095056965424787975733630152111814352148292787134970830277961594621197535656320334231667471538323175715856706330175623720414446772642564136630153700983082843271476124222334675026760575553850016767126350165338075849886189816039085512959708505905638997418660622260834740918236636522752771425143415253634469316035769539924429279861161253628051885191242039194300643294989477525263496369270524045342208132906359550473104053196559789720930488483001375834491004104923938881376193746134243314219738399375604805971031464688704734674695095464521297128496245034914707312779753888535864711266092705548466197291426535574121014893754119787123401584971937623911931812654824764450770311232342468580959470259239272655961272418899162587910421611618524261985997750542021074779455005156374688740346435734305248614024687700564612552105741190172364625951503127677278930753915708544368773914098299676590937380612660233945555661226552469943730447311202454996701689733595767235544191018887562427221716057081123244243028862206939620020318416338019272030222673535761415091243824899344220213821826909682871717155546406870595084403092112870623574388474066476479073028727456441291272134518133325916707830017953156301354073289349821072945405562455412800081903376134990084929058222810213923609047100884815489976321023259522929519598262743943702392819103090239344152227378627363985053187604499448761547106356313981994575416149460255944497986615098021157845050284356535450362706248417187285042024526055312009264065881371591682354632169802604427262083598208582250627831915427796250182367158626300599669694399212026109416298724633822409185174039235022054762927142269080686246280318930901190980203350485911624668496546994063270528145522420719526397809989544695566596843503482731492596788167816454610363907131928062248472260573041500893166062965788856187295498704098181866189125137557826948675639600493354685969266855297623794567974488898523037472688252341617982295015392873790962088664497225378086193671544310879669838785972260142903223019927245095777580844549010638884104639769209200307665477604099091055300078270362519111246477993239904430731996922462686314752826464505758784039999666723171757625919453065906122811537251305497217011514737417177213763214593764067148752664422948146012328519731290903790308244098558969854469190904931282697255521655384538710810480303644586476374058540600441774912294572534545156636426733874536036390499586116578633893608943483320624970331502526937331033083364637213706286447812835438610194090360193847259865214797296133832566181311155776439894102392354820221013003611344028693316135266795276622685748215557346584596407856198349627245526002613343566627596047387566650205245868910425334754220122268774663499153322547243446655200236971477227286808325849832329977668989025155615690655734958700121049678314259880433274516941313740368448978067012564933495679614199825637910516781569579160199155830560560663296421354578510594442512499287195379579324268336277361316360091572843798014638962194213012716269698822468758597878300311133823629949061897664125640932351032054366829396551968251203900849671044358851282172072240838258098943272016433083629163897124597784224520933090413533316056993226180858350563044320086941399011552412354674055795214366172709489622353743902709646842353766918728049574079852658490598896856958726564654660876677816188904983204056956942298316286809628666323111074302026916737650913945951936978318198610882687109809391228261776993442552568856842086299985121528354577358120371573210058546210995628721410485136914205561775507634402830126625053092970550420925253966720424893740053664461273292615578752444089726419732641032393726962665264685116944689079236432992916339791133475201077494716024783727266793965971604306316367909477592552189739623599529386835978606414089208119364638444853003163517130387228434899052185263668016274079598175225418161791242022435714069120445212082926181940570850484426182339526458978818065903060378711467088311585645898741729961699239471682144702568103870842720702216669402680860278635845362230434066427869144231859159759262986955826439936615791274907168968855242256254901343070736749858025412302901760189775358581743472761836453826171858917032848455752485761908759016583296522483675389396824066404514507722330609652952992678075474567391657410046141256707906965286740038798179153617510590571459571689682189325317814200862825413367798753685167097440125704909594308609543703230902994867544547366610907020718715679465856749627217752722956021023792719375618949257949318029551471406463237279097386053256458106165784402814718586954320968953015232944232114555091481218513505878811187031325189438715890314846003392759822391815907593357151854176896718800458712776231550840392562528165573689669173641314877886854023490372744509901335180787696294817330796161905970053394112525443907867607433668652883386258677820962996685886115562854075574339741971216719661373828156559780529282458735911459494401559489864284887812419236439545341876135885651429400013372301583238860904028454489524708142722596306803949054854566597158217957039081871297261584604777835589339080130753277065539224637472918767946085816057384570763125621400591796712807858659361014495937425718482510759878432518805178469184911397470582102792186717135199970992054685542479985782231415083443247072002183081558412170430706150181461932786174632200040060486620130556082725775550597153503886491716273765811783242898035508062776289388360315897493848644783580401671326513023177609545661175067468865231253962607714995209579233510463800213895037006685022727111530678946960647569492041994611577889289214604187003067493607014843594375259767009393325507098249374731201260534197847535675315091627936145725445474417647007077970651601013669120244089638820059008184479526915272546451238701529388378073107543820882471482601307693781755204293593645053848731941506801855573871644105106448156348632476694394590996668647499759732769324337813750839939368228482585677866822996075808897285141101045024299327172559063303643204635678891840174765990600105457475619319212057398172536274173734952573235629349657388284834808930989298181672653013231489218326906675692420865138508313678035493530650052541000425980302390672463045262535367221549932356256061179214984213805565772817169806741774108671645134326581312200396561492691232279136954082549326553800132522590765092700931199260885443006495417472683709218836347889341416556713960955521447189825173045189970496783139865264307350984445082592658446239587119944913051760181394482956533054827091401320864009373362414310884501656463755878688896941858827644902208323530519392191134363209222093605875804363615582532971999495724877910275024940970123598634267867983449057004158327626031855161673492950985924797420926140300957443148635248305948119123302159711096542342778234754508269492333008731157030461874784024110145169185011713946906205781125735443682935337828885687738693695435870270328989801090441996815657595446621053110705087986014161869591796501434716102994924894262460919853691777292604060667837892304215870967163298790188945493292708730676014635415208899184754264208175638073501979475201586463232950692133256168040865636663291310390611433019671304871706407766956219378791473587162260146941132518775127141191761778833574287972156449744699932079204525128341757126237578255202780294168272384946263960753848846747580898152471820579481210461228692617403001743334010595558586720070582170906860414819065030941686631580882169249479850751852749787576392806501914519459448284809198919325234555597962666877036528108982758949155823331707970649668751754759983077311413542378611369389126365438077851402102549924054446450867994447577497552929123805136418269089766743806652808714281299047085598636180446664259081645302803118870447938332134726962881831933268902895367605961305654742682557681942595468692376585710407167969955445144928854325958455185640902877281897527515272503957173916752368702422657830194930248690788806072926150700257030088973552028794286919001287564467565169267168276360307868896645323350741447653902093097675109639470686554558522889261292506848863285598285129339004052668107076800113176815163961345570041567054146209333141463996135121987937345779668356356471788538881904369947412786816384317275919332015924666412228298730977060742887197419749312437642373180122106860788033207555416255486970093794393249658029678141106618618752418344530675496475112902295282960974467835305345646815993451293962483421933603619298443409212189067242142672046810985939654246095575583636106034886704865149056128346328530869795152065794354344104033444822747517762489977160553533001635374459413235293846801145574868600827903435057462223232011527715971681357193578475384189501097323708718043676013057635619753633401699987433242030567257829524648984042297522741836915148469698960760620579836938105975423987551338694880562104981961592402605868387046713636135146255490090587713657063013206834342169765207057771395817575151173639060049201698656201765881257687504060150982128733838563049796034023876840614011963572189314715848275504480094908212911727151682350972478265191507531831250489123983022266437313653926683050158462511188241809958130049339770427565160413835574135986323510291513545862418063205074338951079462206513685443145029864073921345021844849145745506162062728038266780249818625325662039340090237496340119475614453071232421297080815361765917150654498069903376867748062701336517275461202624748253020697726500031864664945001245111844270693804633948293660956787843373851845741902131555575197437478354614572541194422782602417058105318480168246799662377801538412314782958545171511894127231938686814207967909824118678903423512091452330938797960128910415335081862651960856032734835329855407218637980418358390956784239363890984656439527356282433324733832160603920004248721726338683836656033047419137225415292066170285984893661640083871544720413189611564145203928377134969949548474888762163068000397757655287195739651812759315723556948579434454669396632037129299024150872401801117369941615583644974876856502199207175387556416641512503041635774749314746591155833739783123080261110094782076209478201554818723446968836641113221564050283245191877862533711084428640130864488454624802680743072975620306310112619729211333069104357243325018778925520339061944098628465362651206617075002416048055795473391492434363052025347266378809851694299889317222370569013832244994643866409070049045118774933868368384603258635939615603091148804570884962661244438865936067471893668250308842566762788319411539561490781503763155653479460134043895532426945156128934612696025828504252151283375134510928459903096734715153778109403130197131248019316651759693973872674955733275103421982376252787312385797658220770598275965146003356181856999908947864770076708535586349492850757899232423143844396084844040078005090221296054651028866997635940904155999427038747919225619740701123163061243671120415487124489411500715828191499601409291460757889380695691474308683189522903077241070380367089132643611650523307834742745303310487887966951497117510647349374273456397897912211757807464869034382068316034160043853449543591014954136582441662095506858285864781585065293658602509060854597649067616795737812231598010734067941421565684420201992773835623036204418104877305471742752109397920380834966996710722028819710035428614600730086831596971100231590883989944752546536016172546412684040033559521236967246214853735645413254299253410727690575867954214416140558081346451163964108762439427323970051606289776165858416424357891422467181650062684992877166286740589476752703701626528952288163423007889277331352674140021142845910516076662232216674718029398638715878974237152069137050755428155130793640662166117584202466608262987553732524714724388803300488229233044845668887800816824438968080839216969181219448044547443941051929925417699822554422881421994087240655174880773473548911756902998184900735695948490729748321004382279340016278094703572364133125564281642719607796887756471802835333379278409552784648073731419635698518935992786120804917676305536605060009182587611523462994989304451899943175196266152948994385451605471158595872957687826054582153472712542715255302609621888638651371697502021672915772676513343000790978308183287967785349465835917873022653042349856876549193764678016698233332898698798473764345254002662653507564038184374035002721176644511741088639865091304530245168267837700955655779122874902659518767696535040199203301461538774050612808685039502336859677745894076135500061581363176842799625473551806048893186087740946866607450388261315547482318656946969696550662834005919348568293728751372059746250342038728413637702999453641030986923514088735238246185727389302501769068311178111654423584088243660081820882572402391549407625437880913790459621072887481182872099914351803243142744092107764205010581529784581053259035664288135974399803998383643582622960285003661540002883844783064606262959936669169329402394659415036846067768525715376351716220490464406707920642698245918808294529084826031771071469485012891059110411484906779808870511481508634839218367918630524749909869651924155084608745088196942032592596539527999961140782450000510003527503750358791029922462482173677027356392350857214893824774827323978108285364541487637924703438313854030156086904163066939454891376856614795154679714792914673806642019152560027271392215087552179465448818060415061519146801092421368810715449187690775243640394007336532567401444394739650896078150242023594790877415956923548671954483306470894638272194818356709172236128340332770207851698971571587319010792604461565714677618438475569161104417573197556864349189146849724838083993133408251465883761728542325249315486515628013094801050375617956346751016492408161056634016092819014841853897267006965481937343839268114290444523549214856748090163208413527478840072549345380110648262081120319520850811775071545119935961470512637911989177087460006474693931889487742359706755672077087166572689858419021851837802780193208434024282299532942483000144195002022520619980583220590077215711664509153314666589125687826629822516884195708377252997538578332258307932873989956586374981442291372854468403699025042572235856717915388770530168587331179797655658071103524008115236353756549679170748759469516067942438616716357831153014255228670162534958193004943600542870528708805213389429304896418304635289448124302710129897769356418770523480407389315328572306634238009504382082021165613590522029840102543328930669970500692456407511650187852937349195602608014357736751059571489603216826077415809980979995711283335891962795940179019435439507734122753192445481086439094633796179207995025246597613838245829524552778303821902522279173224245471199657550553825642492239342948135017794983743597654410313919346933663867165680179522453998439173845369808176275332816850180170341213378782496307778975588398912577730974746618617131469815557973549303574003815147711173642475398410677966310429335960283636647175743582296638000833820970775030964223374636373803454955444189296936840037446363760362609968685074787335071844649451957697708868264272628943789964979104588674822545864503338181273898348523408711384734508949115868795361526655558615590780941372174574518038087185667131948876078387967198148041613418973289441521934658231375183374956575695869332017751718627982355393837019680653556985919193671847767127134568298291883035015093292336382067308787956277908453081687665703784475018000718697708635284076006695671158759597412687872005027545848711100708185954993889142620615392711359879239101030375288401894286247542619281771596083146956639572008458511055345530112400412859347687uwb;
+constexpr unsigned _BitInt(65472) c = a + b;
+constexpr unsigned _BitInt(65472) d = 65733310712974309367288359480609626206791873887406120614733566482989916799556257112216000049296191860946928376952770914306941899605485940771755684540650442628048273063270873248514555210034196075561139066045840499492361498226073231697006377971536721223952154393046315830776038940449691541319740696961883087824017261681376524927620653768554379673373641639381277483868891587662001863419124871001009079537921523665768337716200951896815969924745929795329212934170312485558464946777503351275156853431957611568920789844552631853447610968920496077738692498000533852760507563967103841050666987732076030100597343456816635403239960433806006856418152716540091693637161283246177641292173543574512366902095853676443736576147420571058987232518265841796862433718664274349920633906531393769642675525093914711153973922447983137836456165193697235052551805400298086748645418276187545002106540916940395119175073042452237626925202060310568697433598981090347253584305512444157902701459227814962188102586948892109610299149051502729974628908609809839821822668130317727334441794910982323288113687167417312366330251518202778678924819655933549572677766276304430538124570465930158881124158535793551498860046868088427643048679300639925301593466769812387105615012578877880942705932034097020799850477256554157187520410799244192086355131496764490623151239802453953907987512129264476529989486245112709372298713617598130001106466276409258479134275433778100370825627338116103346660142744281838852332284703873115994712754322103199482327643844821444620969063070231305099748945990177354116563708994207860979807869487982086908579214553457839339156863236498493901872308526293149758602972887939740766581996707422324863902544850256976660695255552868047320215405536704136182963653688512530881389442673688153779168928135272667235282714117619186610756449017782957105316404901015149425682458716235839749012551636965653227602758151742238268928989092641393035117605197064846256509919642113594994851398265224351584646864671276272287170206350834967382210977603114637135024583665957926257686586058765810879630550155133497957679518697701224201347673784813556755516652278639222049628628287667613121004050120363396228919211550751644909908584892325419054798571690630781528920127106892476546223788400087450236632648353332805463973464740030783584597992338831046583674519869603805425373352565430767940512477204822377530625570185248046102607943687326859064835877026768109497540886942682684799854161862922119146249366591746206428593130174782303743654861025754940013540275960320712831588609903301287960684961185629000492377328684361400422413202934931928128205758977693042413470979440630546227978341467432196713936659890524636113664916651345905532522446273701858583186487486581241346946982996651940112810669464052280768863401797902429886586329492435603149059738096812614308552041610545962554732460517382302778704900314853378833994526492859340082586070061874180401035531072947356120533223330596236951819458671353284610290902367114339230130038474653060194134173441865231113369348953652356888429945225573297968120204809079466443965769374017835395355023768612500042930682981458036210757904433118080252226763196336174038015538916025253047465327780663745316284042180589950637410910243796722176452997422452032869849474155801562587406994494338806397698857919192253297500493784346639226164158567706153672447576854501508656642416319546327503355101617552858712404139385302095053298974831170533510055418735231163952891673278446632404352251926633418293917756851159977649745652219261347400777288096237796987996178292518234769055437767785281299929461975823205145570766477071025158470557503539318620163226935642230750325519351407338671881791777421947266477128840544205744167421398368196045974760281477844909410435155086523641006217202968340148903733166861610745128566882125063104438505676019473865622707492473021438332405640370508995585435065934252616730287190014082490179349579155878175673090202058578789470739947139150638934038138854860659580737294427346084473515761085656374694303240034849377638603819627901691746584454737075987696732357864160392684097734196506903951030340568566210073938545020734774672539136441431596494399821760599541801790002315717000790501618766726270055259571145436819102070077096893640498510170082736898801319866580232219628192859326134644962295862962394503244378790497751333374799637180562971292630390152275444702790253729069919721990668632055229811455885739489565076520257982326323875516272981848548514646158679361508148923561357778035888502051861007880479204011110486245574869858472137738300810270139435935840928373836784477996558084637636599118320399137586018170765778543561772852108460779850111484532178560301608530586242255218170413391235975404124813248921038023968124539591162200254492538477883460799401251722230389152830685780062770735001129218658225402145869689445329832076158865544012546385379952350848071363447689084299437128393129712854269186158884623440785080127828567674142955139977142314173327744101769578385949887626225232567431292464838177881053175933182795610276528165039456432713744227820265347923797672998924525666844096977943611539498280790283718695987111890972309916548512146602693673585809451569438925252460399015606252694572451638647723983860176322391824411594587395886929378769888525765272903804387296530026060315134144616825034150473979181473433350930826379704943481916964116513350250938678585295189807690963814876673299057200601671473184784764308134823451386765389454409346892892074774191075512646614701216770972610868772288229260369238970314495042811553164842978580655316213597939013907486910566989281674324160240738064996765996237332550300274306784336662255839815949109702299743980927123146425097820892903672153196408370662800689888188019379058741285331097301245972926112276153227947559985943546686506638810613424903193542704460404171589584398190245989640779754495625561723849214983737287782842000135718896989752537689864067398378213687459242441194971923220481541558570562442595085851041944799808904544506901571173692831540551165995774595397470400090562683562794797697451285136828058143410591944789180427904555456236941912215085454981071205525291216441004333912838320426472156279271774015558431587150544806781108944739721492705508709807242677552414468497054010543374648176577420059610855075742038369243252137693046107454287811873987736356821716492639864472332281808643883488191858800704652514964663233933121073957190441066389920544329130284858672534099201695727803342839514123378350647709393690280907650354940575107480283474589624431744112216519223017797921728614302139082329594274840140955169096182323453926257960018135659648490966464611127419651150020298022851672795958613733226054374082818376066733051312368282035038368221284863628439006578385553557427882694598740435172636552554976931016786384269073745219783967315992539194327913100155235209949808181873346418916844796192276741603170233235579826937741291735884125962583664120694650682226451066086977052680862907173073986350090415076972216568662204777477676181236054073998491942400434664408501191792680685898213614962161129478516160664228754814099785893942104387816797251376921851749252728130118789568732271069448494645703579466004131124122290810249141494796253053995420122535297581983215063363025637799574748502335575866748531406891315967131854482010827928515900145183933802038759837780856621841566650201051974277965566300742851625735938106960447092085629446949143070976802036257426890656404430664365438022478767335206522837018867309001375559793404871129404322039002227149686606800054203400638173907211138919574969418122927785423106047254614638512456220433124655851487811812724404028021271603490636522676990657913071077769637444715725031465662119446538311847732751542465191912628172838715204335863864671263320123569607180813744039784794557850275817793745624539689727591059618207995917822692190607371341378619667008166326946823971150816170122919732927420005317989039847266860660838953010552852504872862201752813773661634566079866536422711701242406591907899014311859857561282458525992977344795421368705765423491900494672782609071622856881671225075228441073660291043270090532848717852955586557701097116656191206054810390050048974711729417972730695253698922905903402839461448947122909788437632918839109833855362870382021199337984636024211238445100119626506381001969142602820463906490830595091014587141363784712274529031186275532698542639030690737659655600732970978851629312632137955400109789124977675620891004796030561742309942982748726372788787844021365802206904154115828668469270647299065970892497506111177532779559235107495836644954860706519473738135333950676031184011334131153827391679043933870226065555817120578169594750859481964131203848536656321857915857019373230113604751095011430181838849196745919952458747873798651717228532368461626109205523225639696330985887543329702480065069798021969676105832222945278141918785180882254250181098714406914257413016773369311869929152473125037538836513147242640209270244621659867009280097881063095471227753857143377601538041908750720006209690876181941021293642811986890202282804923829454634304181075900728613236664383586413616441697962542689578964065923089817733799825401573631814041866188341822243904759333927889104250345822671803414434105208744186155926365676023108882730907733416174548842904738098597990054889857381759390405485985518292115964818019271139283111127144800517769797473685025967075941449741615153698181505476810210967212803156816435231005673110423674513460636903668571824788159266787950485643661101097519027767227755811167539723858541445903613867046027425790261586364576421346937949718637662093121876664211260659292665449453080467223969221541179031478839642011093187558574762424999953052269680026408388999894170108416916532370159310822306602527242241530469492050287644560390277163182566803384323647099694707514050241865025172990171732605422101252357761063125476145746508991853078042922923153532784863325897244500645080149943359682263761150491526758875442985583552806808448629787995518297967314995455444994379911835022316562927851501506714648033621987766605002273618805427820725655255977374251338915726717301436930699540753512270795587456559247324929358179682063943525930291478512399288175042909536775369829505534083212059067254922352369906115992953239868481254701706434450589968175259925224821181704186062671131863272203667288350609487644222219885266990254704667818169376769155049017443906498172414816916890099409769355698701114433211583133920680556670543334803812761075853503926979327958677028267011586824680244161797749063673065254240231260361482750693784287853381848065660924686459034669880024581940263665796227271840581998890059322321592914679410594646741924022734402967264922935666215241807910570827221059060464009439431848275172279807341660871539626899936734487126312793753112535721604037917984956372984344255463503171438382469687784808103212516696656465863764872965099254615613949298313368151770793885032085655010703699302801830837233905991992846971231980083357412443374790849451715248332001200446408954911292590345506980059689220419521622573695142800778196641963819347779781464898335945168142382288667603631444785921490519524557942964428371858887048557762883101800114636975374788847139768098532708794734963700051171553605854224738749839228186541203233478952754225649056732496723537224770787140204485344097694581527085745724073853845931749145068705119355469706666814377304194353069473678901721251998125134277321554040010085443433214437095962138168614846132092960249532502790475660773357322473456633740763590177329302651667558515902026192312270713340464664559379349881654479834848594990705911609377850540465814247981868919471088482610181053279395956541668167109033136996544482455304496236470853311516882696402592860776402528524418974654229171819383398946865904742803905698663793581648361428196179753345853333461596621837135825352632730141555838702201751706912055431454254203634774237836923223909207131773115474932364730163918580203711140938921645842472562399715122364324743113226904203354131670331853202038093577891624766074225030436696861691740417975054973861487048797975263899852389518576215977484746081088024774051070273517721500772048423662760209959853087623187023361223489991661522345358861206297468468414945784260252914834291908620955283686325996635431556840870693679743205870610728458779027093769106719141828673885454104445364754600645382978058882615962053396551668687164543905638237796969580255230943486680489869121332795004537548997958551443130441850722739586205099809291944934718981644248935989484265304140216346392928217091155186286727301198704575313127693210570021741771212340344380118361755793120626113896692172192970189671397465989966599783019340692909894111707602644029868632108619976201596557347762747397731091893518315505744672739581394668327454739383784324388450118021530254822019582999210141345431573532702238498543425906437633146511039286213901077094205025792484777193934176232100087114080513255075225408076979438243093213287700754638428973401727568608105385331184818413415120264785903581965112782059251324887970218309029080956611905522342577055153160171391832815735671709202835679972770969092038116768344576380562579680049697638639253099672180524573592630287801479783485556178767876566817915901890128280355298145494997577366648043196995306380682131376412607852915782853539523955091939553876816718814425681881438067157998112338527064687494784079462240951494355318688764824947876348896064548609507089718328708924674408381256787459001120621378520391261981333895190200338539428045048703611100501650848998205563213020524635315289615363581537690207298649864096548701931841128460211285121616079194250546369128047149913251323864985018928671318833677490034910282824468791738951513347250937598596971700525262274478694023742540145205474422785034665365205356639213190996217496924563848079577314325157667502656165232690283638427361378701996292077524391724943161508199500251567352164469451944314191201830196953638296355281391315214165221286987409934439741065567042555182155219977334605117051211162008552050535337492427253161086619689944865514767300074434538675912676999280216534587905627238194494953260482940568293400188546300502051046396999957249695964663901363407706222747131851011821193811243337366829604875455415851595817936629351826829550581136476539437795010218682911765844577711253228470671618789932794676490380865767038712588269058013669058792562996005423843803791484387085411898630625696125013546418161882721396452684841294493269501195578664340234891466164269467677385637878034293455809942446434225495352332378954730697473949178984606491568133276987301905841355297400053577386173285186611377447749125561813289416475082718496432897380687562954485268216052656604982175166636595368316816184037417869395475854625707060812970045553255755682765008637058611255039007981700581445526495567716561151398679279392913224930984914722746088712741496204641145240343337267832439894946010794902149269327815030140928095537137424419469957191747582125977373974416010362400064662058205735068506653620358020091594077058093709563305635394365888951703713886687815595672975687836297163978303414380398340196256886843057145148086253019606251959176012736523050890982883167224531493046576153166202984754911330805302122877672209304137806534926332672030280601402371820660980715756316306971938426266364136014397755163537944436183306688557521149071947401065246665374314986299514968125105349134395472939146400860609598580135850530756353052531369089611571602009716057411639240365265231216993694267378520425490736310164525367262982354745486129744345588532922894054353037220470375493150439381833056944970888892616077309777316341795883468143310146239393066796540157579427902905105575396180637339329822962351442704693893990585295012177749307785629674984186894084722849823467988780664750679693559534625774528522993488647132027746755993238476030751014405149653809180905004415744676550311221411267308377184686844986249007487478788508392782538891486397947112704910062977888061362065836091013302863155856965856096726458793923914795360061925584765206205171434756224518649718609198278686690570114973663391681083900561300317422032763346383056548744255119690201692499045660273674439968025877769274188305281955507982278844512623391355402464120401117148098511029898954726889232385151020303726506197952516637537419684727644750222404041929736512483497879491116484463259316053640341152264383400828860691401749104231010185274773199703770494291362248430735093171883754998640079602962659079040079351016071711191111680144191437902886226218542004288118985273592852073561277359495283785012899821803960056421709438351766076034988885713762994657577069723317148951070302272223238754526260227628439170238797495573897162559693676180431590127915391824013774025745344743489766655187683613196825687939071892559395878482535957800662063722765871480796050452363686958159805963927717718040700130441332294899530200297519615070767447460875457173269654053182266680123894729972709573570698706627270034433323209929097134664823788484666779312590125436798445066410155762650942485034997893787224028460212608271409888891101832339701067151190376431210470677697853810239905340357318543088596033437087441047744357222850669065868528446046740410109557825052671697608704008115043754427611790290802442242197178818583202461150101668283595827485977845284539626583718745260600144453281308210442940609691638369829825393954583995698366266720158971927855718008153570289419638691055692609193578393304832631971933511941336873679108394602640602562097556694144199408702985966498710717489164632640898761368752687108705140589757820237281212812473653136623398287806799099262908394484009109400779936356676886679972945728534689830084292420337733083763707387359460107302890472955054186957291401602261166979427665022210699225524810990904147722777293253830299043537994818526494128605925817350925088323444808096338513145738279696564731850349272008307820505114672631691086424540539543915924116257585875165597466373117844714254711574026661223440392924078451616713051920432311403871515113100518727577685639388320691776988175874708086550198109171131010071911106276959402931457385608422763988528718814476397814403552115457745096413840806325350585181288716521662012116913089656556297188715085982902221449994681630218437964936442320787391478216687908217903058261221128100585640757158282791292148088017396304829182083856116576696914842166432097920147620232111356401551165153489559661815514199982279638812679376483348319464548905923211042034064419484777348455290858798391526838102301379345168508032358556333110301315859339863690258679059572710256382248585394483092186058190443279674645328249674038450532729040355220463492502022446815663125456493901673386199636489640049010666677368429631921384546418957523730405383304428565397535515818187652093874534484245027771357268667721098366735200537472441216821380420620954504368236682393275855126238039776198621321282477911713680118719544465367875016153686707320695964258722040822975809759593976906308805244188511548948755947543912746457738061565530716519713167241081134918501973826739021484172593069513499777141328929736443889220619862691489015649243210929597568564547430948813132671040781638452369284835944133923240780767953175287558722117901106695398470566569210207177272401106331295413031614114233240842652452039520120577789477112213113151681038394702186301416182218247167584374421196913821288796001954550153326787772982152472873940191552643973037381956032576392763553240937704068420072583921057053471467372933417647188614551861876072347018962154219975121743480241605411751024300986478918975618499472073146934217998545512642937199165055642656035521248653183517787719217771774678113026792233128320134509150459329079579221641634322619683342322639111798635465124959513826815422uwb;
+constexpr unsigned _BitInt(65472) e = d / 71uwb;
+constexpr unsigned _BitInt(65472) f = 81119048438667678167087681061547454956381140139384237245583550530711468333938645409844208679849133854327057611553489468128164328035984847463655845071788960362320831883540865379868695908177633856753875928042242813143759736902234615262784603349439052388136548958388122154196710982058319581972751161275633244818776656878408368619251890145307362029151951656665307449952950058545413678359706906934219861128762057927752878526888300707475052550567207218048464686590414329826011899493877618251612171176743649929542208704371790742051581061564924686728630317826783167436874223826889941491613321988011685915234856911937130079954611950479372405086492241563823732858570387693419963851277511423963831485548548300094183848777598065592477874361374791093134495858258772895350156173763904460587088304626080634782396169079853496729981933220728341579433292565018270340924969893176586137517212163566854668149084854194514540512972367539162773979546948405367825368816551439864599197623727447961973313852940189734097264773581223296564673086780437949527333234617991653039436427470089995629538677536322616344087013847245825889785129307101277587565790413807740056128153459347496379119475908790478674607311021353394024326546901226384866292029804856762549998378275395607862546028767887582384886893835304122473034112598555482961034975502226294476263955953414070184072692312251960704831523959513116199602910182193757720818611785611751424872435670755617225210397949250736289480496031229147785822280915073807228690260594124922546495633080711556467302590257107613805828154894362406553065122318032375945758669501668531919640242996141135537856152350704071206074158995802163298941744429285664265346600664813581320330085506182810969682362910556467384482527355881041049958578983724682270051978097497573988595202306543328228899366535303141001836130010179223955484310671691315675157890298161246314699906091629686102037118090687227643323983661402317966793329148608990208151816103891551217336257589721797279511678677607962987465599398444346206660607675612669385133994339334001047202637207070158304634164621649018083846364972854840542085445503273185398635963127539412104744443236732256410064386842938897180293501132242767965433327446407714979432067107304996848947553965459312857290102292633778071925103855561961642689712171066326296310751014912350815838229102059282801001807007546862384852431170548875729913417313449317847846268130604437245222947026237046389351718642033347919557634869689872939487994497721319996121053479869301217891602001377463819348096214595761560042060467757505786280651084681880163047905225772849072707850057452565822401181498495553368995371572225391463960379328369998850781937151047607536666997565456244697610971794918121724255472143489722289853957819365396078455701339705550882833666248654901691646941516172619659758623700966761264487839045597711090111609043113466081404797094428834184000722494962361259142927215260652320646674302376291741333046218753795318533934134259021690347497655704386411615592650870422342229618987816769323769256274950493247725841212690242938711616060178642536645581037848024744067722023890268818663850692404866682718757177280591339061114974200127926081733733018102141027506053391371425739609259095336710641686739798192412331252101710193050506100630574040807566296147790678793092821503626466188997393185623444459684752040722703184565952637890300357344078236773703041612119688753710951737983088821404522393324152283715757727599156198283521860165529341197148175466397391445044487934307253572874211454446413378321526991472029674563296210659444945015438578433530023303317646179730757486551333547484168809553116275681543554769794852111447172464324820230195235570574101222038053231415531130403535642101014250043829312952635775623171615396151190160824468938979021996635823946530092873435448371338356467494980520678919103994679971871190574979116176861082978687034118804828671405005458967552089962593761753485765192586963197333042944108056083507875173377303275821279528360690420915103903277555517739176118062387662726531924427886263223467472756464895276108685877011617074604870503329783376466294167561256118789414043290844890467721215980924736118802611717469061553985464403283105120058553402002832205225756564480590464041062170054205408435207673717764462878667484094585324010615984002752965285598325142296404754671892624212410092915444222450922807502434260509517936530681719400385179332102078962960989053304307903630987068328941572686913884437211771806107290781422240094404517925939208619021498644747595753667530534854396116308693966724901034910333882380323105599336039992289396717523357770305965180968018091683038560418513989593671315494952005575641589066096424514272893213280807203580425404888117237642205257712307303520976480585990631493558802249597215990680727235727680464741106200457940514707243632479374697310949259806293595605426504156875265643852486131696413469651497770625614055561695520874734132569280184155330884303541927274099444596075460312500140627414316921245782551508392694567926458725922156525134131912620565629563745424477601001002834577003764301757275006572898941827383642087739961341233316802079286247050240864190436485241852367599925843222354834508189424267520537148646435669679609916702080455050518247564333696291426460728311097975896311205794873263365251428440180820526976514251965060111780918811290932324514544775320372515644899646445386297030021170451457124095843775923323648641302287349569472380872468981315675312934595215917185742254550785729284384994468474362021071156740095507340126577833882996928879297117957134110697823557811746768297256901301469847365366540872176266513666224312797304645117801470774161300769414206440106647681505178861726195178070504474193201547152440879140147395354291118092097766087707629160801177150569212616669050339675277783278561419070471509958120627858186869286180400810179621757437463950373570215026972271523776904898375864872682957691253734286904820890912266621421134519912609409321158405153278383121089931663076724394859447175761223776998781734439316313779725605736797116945518910959312627147450807693644698768186421543176062568269126135364923107771703835943600424121438954027487338321722570442329551738760412623469610835330959822855143237859319003755140931892768237651598726557124619934447707062427209188221064149521440640066748619847807496914428090027290892686426829384522012606207518375267107272024760472127103492224665241988704409301564171603029155477114602819662906864324804894233432183235006361334660519980228744254510540041914250111138836989771057454654361547808598933184456396356506645221284696351504236067684263932447980859845924807299229049024046473245673203436521710994303419754660467297271707120629690385943875053778343184455773738237881501082462953248165955808898084784475632662320255655065971913920219022035914633324174732177874088438600417796719490628693272667960011196066396582965342176994548255439142090512459388501942746352045185426148002634943204379246479992639232921830427033287155498919776545033968687621234093949952909800026995695079322733909577094852037690747955182561930828130036202145179371869408388913075896545961481134374398000320119002595527049537405648113593028246809564199535473284898041084967534286644400118310477565602342339149979928025711422687497006581756870241948832788965327620211873440249958591482493647480343674661352705657341579860982847393587969445835000305914486839931462621936881997112355704793534251184118769836474684593365406384472677451238145980115233631239247091702886622282776765570550640577164254082902084481046445184457510053388880609565532493436064593184865796251942514270217511141402543672756335480006142305884648244473831525460829363634009149069107713792592957352156655644528612153857814065482670082433717647773255802209129658062502706566850593441730666442893080895203992967625531811586694873773329205655322405359033341706687324384018317037001782168879764687102213649107684017881114046056973626288368923831980412157547214430507911000409494544506938619432275414478439064152462285377461223295418752397837436482567742872764397512131024342672507526733360260619700643186477463782694275609954903143256542952944244778121152941289179788480630575079737246115747738710731162393425436847859590748398447899233172200885163210339069282573128507741201746652410914892598843232556714867016096598036327204404859186977944018852154292950479601707726551489067324830725948985200010822771865994042549528143137537234897029439040042099258593057347700830782468002060943008703943539233162564161925283351163593564000534389587666012967529689803053042601268511160410637186606459825374862793733909559137035783365120986108633756185235286103911854615676281592264788454915332644527001118582184317205780738425507296610451103953245609660526224451952038193836909795487838919754293279246980412412277469667514578815693400872697826159671033387900060491350863625690886949607407803017489536456543547449575452205017872347883973885053031375178228655676446542688676430489905336895163589876370964053761552234596313318661762645436334322498036180731113807766213352920419109181566662246988745170550346369695736277066595184206278927540272175689860604339875001317571632108033143340510285476759986347610209603646730491066476518327502915964009738773437390713106897658049079921025910397086352600630140473861970059325940882198708598301803793063240941226649048055739602475710328647679371343726914399933927294112748415016048578310432314612655800678443667961781718967749656812897847657802967169299415131554072494120795622870359923856891605071616981039858332959855369188625993550681663399570012356032290795384164356201731128172530583544055446571588461496057995980051362265047609949782134422377992955289114641410000667908324797515059271430856942076440404106883511530427157381337099588682150941240363697805807280391816158778238762289070818367605192052103908830159642096297615269980255859671250200610730249344137390151207031035250558274035825002195793610549381991958431852387163377257799558681814523416557997072060034383107573558276040572471843576830621389193860813697602418293653386506782212076337399903209307214470100317235761412805710850988359248318598165462604247385873981751694346718728457417932324818612380916204158539792578806888256805126676518435457076849655151856936357948664784020095496222964185430323976361450038602411831033143981782139688999603806697895951064824131960093159480868343924057343826438855010476119767439348362410237725083120920471869889013959103517616051537640818148924738754354089158457115165537078046425536848814772861455928301259776462563365625720593811805541433460027991668477245734380834490979189946819375364265114193907530843496079499570606407645546816451989380123450283611889376947411971083006967171854331483582409116300864741032958931152422255907229272782370063366185455785561463140714434020616892321571308397688561765568218590094663388920474697495754115827676909301461896579867695100028699940482746731097861581511867012590301918904848423473482044669126212681353219369262557674792141559042307781925390412160830618045086937241164165649447650723634354457142234648420469253813076126735987958558693703224345904768090230475931054961533525465895971268945384947233816059121648653851353453912800961632935932861729834819069634919635535224730153324057833673435077653698129140436860433080504229548612604634726787499023145026639040302604734451197951750210597736330455651622023033797538538538388047038717462186292552700783681032951322029660431854988718647042310141247996594683975241674287271866496256088758252070549970212193934302912289510530303203831345332617060689084866476564117717848075568001674095145292184997435515321066836286842449524618961120843546331558247350173766825349931296560241611815167064564222077109455628613665751622910083205972562374990491989440135610674632037756035201220531489214743233527679896283445539353795937582940464566820043656823348330117257561617021315014049449950739422399371130289848322210348793026445266609167020369472192152933194603981711148733468582622132685224707344961686050084595182669371775863549703595858015823029362059923704401908771829719157180336503430116716548633754689680081817505016700333755593763797689012292844579379020029127375863019884877689032184615650546270273754978419500607831225684508776090376013315145720095774198145351621403429352951733285655442381483133062462448870877207237218277952979379182757247788452029508696570488503322564296655547291293159396498587812247048810855422075907102519074830482119974646632454684466511785100872254577824923892646219715283408023229043837722903387825185619904121450017633423962806734053983934885694936245030629211896809296229178870359102587984788832764476132123860284993319553254333377839285141565016492722252221500663685398500037288543684486768039325272434073801963463430942131045379202104691431436998216258579637703636865411008126921082151389068001167345018683753020006635937917955530346905162334685025167618679504177188090790942946213285536894146220921886876894907949473675184610288598142017504617242654104935121705029703374353045210887017164061794037910162870959118258745823059265397125649060836584712804805218669996212063992598515582310270762188378921310553219011284838436786157288363931529250206667998181297158027685071735143864929936838618916161453511377304799441674298890606473463305374663350676450748359348725937885062403443723509124094601154953488320671752278073393621467650971847117076922250477511784298673658861500721612064575807608998895607851644295453391456454531215271085280924936192363348006487557798534384978443971017420514310413011341257910074101557496425650045546328569522751909127274474723854148277045201115758974699352866898705983402808577306498669325143473424401614778819080047903246862154326670516656908138050620886701703196982970872862366004885871348263125410814963357269942863134475202775601444469305395643930624301668737708355311375180156253322096137444456043933566859036382939967257430039603258368723799047389083839037860709580897208871869627268202249353732838171824296209296294548516742651643397676384749036910080620422686703669742292285224805146963851250167147621958192005244523117780154638357434245675935026566469741372627933840058563022743977770039792941923366831648672050001010333404021614070168174891577961210547481087335204029860430074623406526352168871545292621654379079768226371019632197882405089965244441091504957041079111109676293226058631082853605089096750145815866278653725337363601678627338076852854131594110446067843045748196020864098897960603689048909134722146224159214858620044517227409018605296559371894118327828546734398364921268494096918767605212134173850356612880499233235875192216561439048754061975401146302507573162756351518836491904543648427377290672401377607941743202014178133247052968916763308898658059366804112593142747772802872872304011241156942330917342016664825114824131243881038959568825225716955297062560791044525662833617673328465929407476131817005115131011425346567647872751463087723497711057993035067620531694484063799218004595637121150717217183299896785562805015987083726131098938541665352678729793826691542886712254454230735695807236938891382873474309821108791807902851724497787728694301469491290361539735735734028169861741514343551497126831500670910708155930812131910887385589358355422555285375252543773821415062238769615036107116916346130894926104313380154323093641810144994084088334595459474978569275200850715028129823788422826182776550189888994189028571671614227763000320597970917330215486637825461852950012215677075728416669389817388070042483328475316537616864892173128781529114231771457379262706718258234462542374022749406522482693318623915313361505582138590475914803913584557901835727566996101504851269428252388749069741603720981968903953766184268334938276196004132962491389692548154641063031127046389922901411660834127939363774203120739133359618778189671081189918613578143635540354473049602793742448779303364071952500394469313756206252912480887419992330960013802381990210410631484072902902375998459735022573434286550488854404225499410437440899765548675353956027131753647660244719190071121180046235065381258093864329255300391061722518798465720681617948506132785891614696323904168697255418185414840320826942738182211049148991865561460552475257728514376004626739858958112783218822581938659995258008366390674024417559692051128119019755248518826335616004433962828701583475168064968287188646214245436116135742700974241192952705901357173335366072427382953649798775310169545613750921035354107237850806773170429868305977421534705142239789399817358489398528489621671100995785476142590361642167601419294639340535073524003189021567892064529154719611780384794965102877185634190417678554972476697592417945100762958234795145634183841198575605036693361890914066638688933804783122003206140851517845351284437901254259517963992132047440899338576461272921447117371152745656464026628310288885368960098096395483758646172667160452702652763728544415019742833971425823350297849878891081549376274324754320377470927375294403461571445568047178227228649780287407629716070804833784829531827100866306285704108381700908714688679792170091907185890482755056663783653285850369390801734159537296613413088952244635065103645191579854038158054805810126516527000246940559539553778892449771733156126807409645105473768008808972072008217506082220527464421397385482291529628610427697726036406268830099560882593282337035370709287350673933627663463610202838804830135576202990273111350225601975962441083015431105048646343759044877770708388334099167417362280821803262543471360466340830978889317353377750218329560019091914123445543397162385202752767669258874323919091915867230744011350323401943498133873125741935300069150865471338673218318699682037848842960704204726712036770403135645242073535305594100787208225387595470760974598941367205963787787451921872637551209837515546984033501137650105919525019782774083428947486562538308599107816386191438690298067432065274285152619455640208329873154326556265218124953422102104061164759739406020007771447449633506691053566567554794290137213551502841022803374066829191255804461926337382291971071657619740152638187836068987044078311655693090136890581847972811444227785568598697490213744389532539849062085793434364140569384991142262252002341633787983042085815862009284930092119956533000012942039931918424874436052309809612076045438352507919301315931370884026985545405614314711742990866407383288963891689191987720090661237584147466664348258734606093419545193907923873057096186600080087829790813417721075180297238453473507102656390704903022463507389818244022806666755905180037866359102638089631182462270862768787387368570734224286771986934557843667679671999977789368503351679562337657410015516370171000888537444667506161377038374275576286219252222288250058986308656559322111651560979152776988991823243693590987572629615903838137358071995845670867227876752335931359417336032690435719777074026099760429651423260611168595239702289345958194686977765546787012516833388024556329306161090878811254191812807181148398358492263376089635636576122404761772834195976106082533669359788834602183992961701195820952116398799174622232396129037427479764558336883762314935238157985291895843414254671829878324339001987738619891291427323314592666630164935825946743743891716827463547008617450634928010342360487247773526521316117380620849244670899334798193689224088577441539145108966591940250014425667966508636518668132105272814102989073304527222247595005692471942155566669672508265839552263578063972763273633393197633385588002045734487191760501135491526337629695993173298383444778411111350828500653946760200905423307420627645624295420909895627482832393225261330169329637488004609091139880602114081817083587800642684902092333638498363749375561841720781868464322821196677454133629871922182954402660834327698585486213839832288uwb;
+constexpr unsigned _BitInt(65472) g = f >> 131;
+static_assert (c == 57377170989012975523235298775628163096786299329052925173791514226739126998299132487187540275332383345633202443026572283244195003730186546233931040576254981863691366198241646738582443836938118929157834265839050149448112591983102709209299379515040179869431043477239668452738506539490676389953277690877463630052873929146723173084770756201506988565759265503385683595422822915381435833997954584133804797693715376511393546428928468053144514693805025551921210093099095632179601519025351007239644806371537347664790877994232302065208364877919439667571152385500660502806582630919320611305765872100746931444315248184766234359238222381740447636693461661322019586656052268540800014118990950583495903380068020786002928240326898431693869995996718398424733979832452475783024656559268509404424289861986444627782117438848327446464800529729964729718097296194135885144761895936794304601810062573606092269764133696154408339619752939837601410428702087613619070704348681194015486008116310922595347812974165062342557117212169975803171297939841250867923983149268543209999522465395376129489798925020742018329341237926186874665814453600170581435306674792594350254610887598332942194741495882331538862369813458167400580253173723189529350263994469744239652974208595409783715833572820797712603002019716179307138276060181701674177428736049429149797664004611079956017295196252957890844127128867677075049650430396318798397551429060988758309683253767978753911099615434970166708870436638501594171804068269923661969833755536739123593776058456130540504821096837471150421391045389049925726624976620799424653072940119200833302562438007537447404734386131521034628578787348919469268813671092767748222787598717204014902891198311288659886453038762669021123791782745284995695243470021516088024702004980924874633482158825760584623238586376051678961742550579964436226750544260417107242109791556517723299596710714148703737310949180738966617948021698482116874864385210419740339388941376554729711906521354048083406958192358775355325345507072554884236740160471200259192566137094372853322221762223094632248220548185456945141125865077645827772322028652990486811164897145703431533429290615187818334391383828077139094311820133411825864375296948673419508392908735309533794376305482404486262153845151304245674729526505850830277816734660459648523460411806223632018060140822898787537826638236736751423736216559819748923681398783598859809563130523214652005683927088749355217131149051663499588885886330919134346890307879961324344245434284594400898921111984879378661668306107937578725335792263176557153878942501439033799035563039116379919159618164339126594670691646729276045965557011176383422843664479955728477223045422048303147106364799579008832203805312334786141336502003121104130271974959332146376010884841925918029468341023983319772851851664342534284512591451020982074054897782588530597448807380584790251174403400238997787446351083672030851327022087535958506159285135629734186095662860675037323703747160879949801105821048487074621182257059586398135308126409584794558377256124386237830467323837343503362473680381578999707526775921093389038187490484497312179534439889042136882192310807394542570423503986970240038791539314459588021661648933510351172260677915795875497850781049984891592813453981194596114978480372421470118652515114050411513114649187392927390975279222243409044636396912608303417495052035400225075553781946329045094985071941326489996016916823325216289045354447354144050536509083841785710890721046478853309021167099375188018164239801696329633079133423287468617852015848403194383956288270065563643315866420598807502505331357730461671330715263435034824503558539475524688019896805444836262818564073355993322734575900524731273000040150425301379127511007660411996040079442458594302495932467555744591017938218516995885228130963020666374760378908193803561331317453562691363361354611668053607744081182902070039627101880107640659696080949502658725031197348371475602578643801127706709134367012875195131639234938755799617691766597157349009302256648315876942533494115962323538649459020329598000862487044395337155431131013558695846554105884176417471347065293777152594575396433576821110661608157633901890580575884751567213983771538554347215449337912902861615102040695523346094241892668483532972691946732806677315979384350301454967139053089328843395710175363423404688529792958672602871625669473512483023574456170726531260260946103622337174958678711850229459265537116921432491080935701898552913255223911135180728069171872891062429303783287026009016315716944633919378928825723883165682544428615042779534922925502649177799213581158521568158502446397574489100084879041497110913323291680911234810644190354794668172165378953505813116318874451935588145078632980031353728507979825565665920315276501835618753883496574252386528550555752843027495441205710405304638611159558259785718071260837463137913842597005776779733557923959753782007797529213511124469320394528648397077071453476382189330456814947262443238283693818278138742130574846019552822985604546612483744887207912067845279067463815407828656789627494881030985107694337930545926547433509012296426510716888770579076820149279306121299381655054952027022977335524127091352403292373008785990716311488261080490309254583535811987673294043461070581913091893080936636115904845041902191703523201071787259612447592676792505759677966780452587431984189514319347175891229710097096365686473870394668607558038051588936187179612143798475705278075384349930191177322696048657400014763260912331412279202722110386136894083215493922629076606190648325566402723954664692455059976157716620580788754045939267603789964810044706415968757569230510841226863188335626223259706356490036456648924181052223770415859279916782365738594735517943035253936284458160249089252540393577186711907727259164271416839138540376190055656600064257272234066886224049144273431330413829645578960245276381213558329997342418781219387097787222357594015898718426781092557058092859739532385394368000749767108956540818781858459815407818695572901424772118023522678371353095421976241418691028000204265310601381761839280887252069818979764758504220831106501028185521829701363754196239360882890594202775941577975089261586955359977289873278823433293541610042350356067122216096386616651954495143585357708932399484513598457803800808749826728824363615001756504010336555895332804363920476806591766278431679053668388627603963885414289439458464070206722458205258166950802964072814303267777876740132506958968087233409171300526778517733904003289371434899975981736840997906816115741902851430181786713326181575271955416680098293696540574046267437039512151785873275668761543850231612184977894694935246302815353707626637679887407654905090274043363509917967971055508277358228255261720032037021724784380712823284038643112418764060083535874850655753002234160156923784288459307336864286469807863209068655601511818538160113777808067018484890368284742927677047799037476345520137540192632669168740608456730741177178877910421413550084270220952817191104038929625042700621101042348018035592395814083980607333923224063214017706195565269113470819118710389614439662265116267024838305932242153012585666128852756106428935734739343899090102371508357315778430818082281612497811051081914600448559972827189212366348562276521096863748564522601522836467489096204107031943168847093756146432733254310510877058981575484478312475789678500465693680957571230599200379811794899000408522453208943194637533274877838620032444084054666122791538228798508122274105344560918421660909431966213065663391903510420571528276287513936427590149123153659453247668880384252580860685522708929772391190878613569747105616267557722657970871999598423567174785065483690942999650200577908282136131388209014355457877079862945319452307119868290433386447955204453003966215305376845062457862559139718646506841289184761081170379608471444998100858013325063048414873814363324034007806940715284690366133104298538705401413557371978650782670338051340279530280798691039878257086541595412171258015869453114209998969123972862084269553172667362635960143002024592703543374501375512557282260274028696504420109848710726436876464883065705050998810792120677293673583998993466899168700267969980764897320695075843573224646757856180890382606532742035206458623542872260827143221389848642948556565071800150434517846872802324425127417431258428308071963629234948095760674934589629845719662968285652513693448668835853248319759608740716614581476514221999640547376483602031471307813774135163763491173434014650976791905327267186992022483428738586855935367723720074384474949712341321238520301025597375659385656017148986957121657129834110025621044271357895265671534892080199098542882169009910595958948436713380345352476106696395360258169682211637750121156349580825248660061244110679902128745055300138269575958449002147545083559956031766052888223796335450194196798699171795633203904189952604630734021921921228481130132654726544095150977821187685183379064045353585395430267018036660734909163408245192359244775200076206192083612085469831577941861884660458350283992377091411231055397542746374259732042017861222505314111940400302860724642754576538241456722757020830634425778112251617404993084088417047747816095415008603440403265658423226973486739184425896621068136329186080532906608514234166760300199309364742888015621211710361049700580845783432435649614154609150154965516457170474710283842159665498124060704063464243394363748028511484181185566021930604608442079098582803126446325655440082382071178455425117073958830180290107139791665869128616263354737273232374401449257208137848313191868404686893285498673666589118399129431182916868718295567608644291712503538673835365569403960548071551112712374724024300579550788961323252957755907322602925352173223841819786388258724508632493133180526462059408659358184446424675320379981399962127170881709631055197700603450530872723073754389614635916391243226051141922253223341435262139566512605879149585490301218536218492434309804115534183183083018503589744799382318105456137181247133285922864966127225285258412932181055251103552380083065848295160524666765105954037938560153512546040572004655023981253731267348632892140022133211533705564104883758467874449979015739375589192513424564175325796577444797880730748118924718286215363953834247825883843595483956382840139139748245812677166028154786715048909442194090210735729291510042560816853038961042824725280565150515529600968887764274505282171965666414745578032247009048757175106815836725918393302152718345619569171907146362247470520055968725760858733223307639098163709096769398640712618527242053179932441956104932054081703891298390107140207409724042106312114969977085487037664792203603195092086448281709223400676668283610504698608636440396606026189697499708152165350439589551766455030801757402906237697245959849840715231668791768500635301313036422757667738281442199630221346041492905125863155557817573114446056286870330618283061980463563119055671927898971865795744097683907079998069888535818762062268092744398622042175454225957004435212814532543616097338938440636633760068444824154299043305340019556109318202522362701812949888780299273388613136975822732556342715808161476596121870401470789675277766242452731042279597726209189388638578732487045756906229414074535488399358987687950637914538413579269681144908454883498414796024816282527308557576791227134605302838338307096182103410790870363530944179054254517330982268764929562387176562572373243832876072729602677151703023053348694653148509610201047071522702697862029532402007702587104968360278736656675538015138000711226530185640098499149143684089184943616800337677747604790252218278882721763582376598723368183425562453278578339141336589135811587376152040402853615753844089939155790961519831882099532989537993927199933822033592774496226679696190989726222733191782650231166839942077425437951502569511184735236266191787748436290237035160351734983084840658965538422978102631057875165913971869963222524448095761054981357243107880300789567816565621063245987538673626476198682322043087378393011275471833331032176041783645796122679515181384124221256382917493817352948297883200879490361107375062945755165012792984991897216784334286583032930127727950977500557539764397169634593736811624033437165187826915800733863530025110164137835837143858119026253128528131272606689212604891831174209747753264967100079332465041072368950204986256700096244652876683043311570982466386738966312407703227763474714531165388711277536518197832749220599331961515896900293431422369835847287434772881229984625732732809789579395508115983718421682952414035889213306134089078201488106234745234057614038446948235855188876995041443055843357934050591293112753129809270691464471312231024917067466182223492930537547372916340919082770793302716953086664515281644394476430575935749121783120312862884889459242098791265183906337098873988028596572796137063072081620722095516813043638849671182629461743606866372989070069852346205995688805220455004116397068106330678416424211165171518259229056915374927045569723919448383668491014996574632602574252467664205521471365613967081427059374476089018459404037302368871028085916061759010423892746796285211966092710008134819655582457138439023666444944891530723560011557085541565411827972609059229111127397226427629116698421983897391398596219832987156368738782594437893023941042701424644414086708556238888746645033835725629988268773048943265547341371481032993137143805554814496307470405895876302058560230883482430776645465119255648809144708948636412538342277335275751572751372446894792228421604657166669773903269993295507978493647505792280997499789246419864086990167630347037708777224613731254119345052268389188171507033953296428212293624965778790948350360016421973394044452412399224266824898024158536148457434213366242733957796079723623977022985608286548054129644313785693790557934374287353233328449826608313051205376014241926948821299136734323901589644428629483929404221881510853170540833957501329075981265870145384780426696760450336298399024944684123954304186694350139242512575214055573533219078625595654506575681699072565203146347216173447335173123370755736026192689837437929370388699416297158649912413517250011432242968265199820201285954144825232821959165666107896169208671492458377776249215787552509646575344647307422465423326429392152423004052360721153457253592949492403097525629910898420163145166185911562561752960199555784048725709249291792810374859562786645742272989972525467622834487038796465828018426717594897076745074463811550754089804843219188185754124341879969296851829036079963082578199796004955232539652960074116179854894856313316073228971848360244723519616575592369250758341622753179190894764703211325914576710306847315159357359272977607375726641672685040994533986221234325996425307431022601884076697597718771994081708400850415985438885670427617951757236278628683577635266112681530724520278096375923533828352912752994717601742038214560209829690103601941545691441836366234036458040814909716174697885680044935700868734581083573849480267460985666775249982111539085280548230383912709829269012073430170276198172259222549613119555244144065338721893308260499561691437254744496258463236888265188277309379773682417603587655081001984192025696041397088330848089185614182955063699741218308992395171698220373016511483143443914157690063091927155804132750052568219978901565229763640612932719991842163069636528263642824212850805526813779797173134680215392114908738221620931275033761918515875292410917242397116753349825223691084466303739780785210585338299769894691620987832106771404824371801492797870391049671303749323050453506947491626485419737816893010971182412473409207000775812638914070632597471994209863137354879852769642828700378752373576530481451944237495211162201121550860395431579585096479778553146063747014637733526197508493057244777265762428056676020077593579406537909531604652622404267828393975246026762495524363575072904577510760049700232052110480162986516841327268823920154784702112675674033049099998907077096907316402674865699806609843961758901371850487980998849092210439390597163549631211768888555269215452620335390255249686615829707293839768465425303788650792317601584256854750057531792193110334592502237605428527575110755634543303600574528336859910106207401638044386816863382484241806254105892047999649236826581747985698151170965639418120843859468883710909579864781169659795385062888835113059997374070933051254432835144651452730460690446338409880966109457039072896467197514603531894666236916522063339884216607674422820547061878801890644407405005297229913302907905989142668962399330477905791788840993859339189448842702091821435290161943846990838809465557802272245361684376804705730998196227422255998497531063186046339388885080315344924548852522156309817495246382182091170182813397207177648238750003281454020706305986631844082852382152907869276567945287377011407831248292719314836933657948720370725576463397477910330786210186110542846909059570837716357334196889992580491934386403646177787114125991076575215594071754844512255300672017006398520493763296391312546178465934317694364203456231175279118241601817994306053825851788275404207507029742940394885299706629314787178170012288301675221361088585540013652866459345122648052430544454738922623717360205960207988353514027996049637943629561010850822232857411334356832633050261519929532029564320421258733019611313914563382448992228140724182383681244953648342664319660717610251899615717264870779936476907176205505283987266119295438992422272879445907906015678883364811903413095647831590128094339976754886945541457700620475959336707369611589241476492461640768459267381852344960429303161699202710553466641045206393484743062461243195396164578651399435046500761075777202760982601136433411690243839582809040626594691027600401165936716934892278404446694606493857993204606232018944224554798158200523410564443488141766793172758844260998734710961833531918359661619396461926332529677237590199176808231815967876906077143858813392535013059603823260109176996696506116178766611761855554961376636946668660167448652954408060562070235178943688385179029326434626293955990817953919486951544258997832284911755812248749136493939837707432235935529117788085255396132634824496109162108080060580390541248229902771512721078221592123055930108004427138094286568360330563318218084308662991481109628386467855831215477865163776871997519328151709013415780618918771478918919854914154296194468152273666077423743061544950596310904448403007425548897109037277480972163670835672539538449998689312373758669315774264509883124626980967035655029131398613792305479561124035819117691203742369119465589782234509863125831055563606828714918892781085447122203918667819446414276380855205213717119761037741867296869124268320452748990107714427341442676361925378642418301349722555482023301243849003842222838445281521322057605487804319041746447698920151954556062116305184313170709790188674724727302997759172800711920699360802063886569174240829804299999523206760958141293877384569405015559203473994467621937829863215769860655262603133191365334364626095943232408992590739192182246079010986217319903015010301534889217980664788324403254938505200168831699124840149090307724792109135193581334978980453959144421948517385726523748989575197758434898688542906068559717985212861609354436320557470737689343713752675030695577044546143840004678208388540426881739449913507701753208395772678143431446763872789610598910353393327933983049729956012931601687494173098494285210682640867822541915736893597305275198025701325854826155860156845842261912029699309965219373327871140745396567573273856307816111226977214979759176835322753978160811867041793816448967839795503872543666156544717824660368965764738108535644744259013242678154849116803726409914591785248541248970129110386875628233500985207949423219262838418057121695256044990188524077420479497943082095944724774879374625875467782415157uwb);
+static_assert (e == 925821277647525484046314922262107411363265829400086205841317837788590377458538832566422535905580167055590540520461562173337209853598393531996558937192259755324623564271420749979078242394847832050156888254166767598483964763747510305591639126359672129914819075958398814517972379442953401990418883055801170251042496643399669365177755686881047601033431572385651795547449177291014110752382040436633930697717204558672793488960576787279098167954168025286326942734793133599414999250387371144720519062421938191111560420345811716245740999562260508137164683070430054264232500900945124521840380108902479297191511879673473738073802259631070519104481024176621009769537482862622220299889768219359329111297124699668221641917569303817732214542510786504181161038291046117604515970514526672811868669367519925509210900316168776589245861481601369507782419794370395588009090398256162605663472407280850635481339056935947008829932423384655897146952098325216158501187401583720533840865622926971298423980097871719853666185197908489154572238149433941405941164339863629962456926688887074975888925171372074822060989458002856037731335488111740134826447412342315923072177048815917730720058570926669739420564040395611656944347595783660919740753053095949114163591726463068745671914535691507335209161651500762777289019870411890029385283542207950572157059715527520477577288903229077134225204031621305765807024135459128591564879806709989556044144724419409864377825737156564835868452714708194913413130770477086140770602173550749288483487941476358374943226240425793029573928816763061325585404352031096633518420697013832209979988937372645624495167087838006956364398711637931686740886942083658320656084460667920068505669645778267276911200782434761229862188810376114594126248643500176491287175248925185264495337015989755876553277663628439248038823225602576860638259223957959851065950122763885066887500727281206383487362790869608989703225198487906944156585988691054172626900276649487253448611243172173965980941755933468623762960652828661512425506726804431508944008220647294736023754733222053674360993664156809830389852376023960904244333433588923334584741581389284817600403215319262156633859860850188679280552275362699224083219505525710127532374249163813824350987705730879951355264625353344369530037300751166274140471334366630754712647779420155585685556617881743738385540176977898140007217988800315176487684087116169663417013291370800831899096859531945204190716717502573025350058617787635480933089670306284597585818734856088785121899451066970986106201069863672011712515632440863210713872692755338035103906037807907048203002858238477860960644492643563977654520837191979524337723119259608404421643097049642762164294600723181768063696426390167022298401232205369596435872999952844226940995344564116630547371856308484927980089147780783142944503353476234004345803402965436092320175500244821165897252117110610969492880654829004789895578451575692681704725789759821917190608779304172351434076882695116684651984540381892101832817443304972678790622161153031424131962661319047280118731622895398562931270490268724879492475624986166695709225686881866197787756098330394876207857808917156059890517791497692592084725900225707789400920109586813314313859749022393670949449440053474960231732358062704688307739072616923416724042175976602907009843069284397933767612588511924496143157162925438784118979955697204347276653750979525739483874670669758573414142808243691479623929222974232866338808714580720619054812299696431442314820449670893215407292350016337713376699327031849963391229409806166154760509553415749785479654053067398328168020591208777537261560091226352467020712077514638290424834182192144095075007314808554065801151996865097848823621532965411348509400301385467549943306482837716125484654016268824276633890383140399157026813143195233954156740378621479762034345150366471462896094471724972132934259234371415619656132888252595107277891368873437781551821825058533495432015354958571532246066759818861276604704762519082544501137144991934451893993179733600794009778918873730272924487377741238051996430766968127830812630033209354371727945038509809956393676483669979805775689275281982179924965339949879318260484504531839430166222394398812915504091572095306003803595205227400518578902395452068924514063523522292068997201688261693411544059054356706121760032336098061894411892659021095089202461966720852999595670850565525006263419581038437604503126629135662749715654308249851965705303102225103187660218539056082373922741495192667063495055261427574338533640873969873350429284563536767411909505209274255461102828313663935717406210258786433584197134620910389247874905921114613887579869940542867067223269133250420424105415946176905656458177271017679129160751989239090198941031674944197520677810416776932397950599133491316349287341573552540692293389940564264376549311679136031343692195347738666617353185336134422711920920844399307719314978136465976048410259058164969778439241674431316067395494758148840480886692112354117101032785128193937723745773065158101867146919612180819406775396844129335149440514481197738822995968228560848807717236586943646824305166818267294980444218285644933573502760381857619328308683781861219756248923743795092527308806372681676276144404148907769558418647660002483413969357909782921068829991250280120081201026814146299951127127610072311896011620199302450411006668075365222906756407654674886818542441552830122233595706898699872729786995398578270431009457368799785412790631316216715005485273371082998479926397057401586572038045306633417054489750538440286890689722739366800162720631591247614863608642224493153626576205168863122173579721700536126715014031511726060567243757525868482476617126043798623940056069396100653874617195674699607791498709445954939294199831258859982271624381652130224970790313748637013345915294979530795868152262160914129486516964231044670275836594228816755503940204163740305969707253292074475814676058249561929433134333660057287301101601231820316073168618636908190726177050175247818110578055560560688796401505655932023842697754241774588374583062963381557220895250630953485229368124338847090290027391396907435275428961083688904437823309592552190497059386493018787504765076429185299708053155148710304044373870518043787954080584404302939574749896866935415049254281838639079551782780564219871198249887864355538762502718959259919546646112503328969319950600561471441299743783716668847772659164854260774150186393424240478270287902343520007666607468800826373719707066137011314687880480610962685179005544933533910568379444719823665964430839780728790312908721450954900306036821156888483515412321692126129142199751034562341661408706136051387196710769170808727480986201380603544687267022728636986681325110117972770888046653074394859695327060350191949845163075852867006026516825334372326375162712041928605870230764353151341123717849521021678793350888734580777604926875801033048153758377411158827346523524411768729956869595658251889098064558649587248601158119029099816578206772717002437661779578738240520735444629045137710953185651212029211246365385921614991669030870319446280256529788199452527866424798087728941043658956252705695603053482413759462700693700396198856191108905226330260487967656048816959593297497053665480866123890888084442536937116867351876268498070783630979926035244163040376739878970300224889181049042406027162195776692731462000545913208181079180867135918324675694055853046489335938390647015590992212564586330238720324943335239947287702685301470854427682225668715032890232716014350243788751768447794434804639497493507073621826571926761326808459692590242410407317957315748210250498916986581050910401583890428635558533119546645249639493352412276105501922854605502224127761658727287953742606076981156611923074814756799317499509745248284124488946539941744572834694649627740946208644282250490064195074307292869656683657601797057177721239379124263270290244666779980558690255863759814422128884734790463658210245352187577310420384040290997731732542997922603843129602152306671290627691265725865108615510456430871942239638195209261426513500366098272461907343221207963711153528093982853648896096575798186268665189310896623817510846345533080533140219528981705593192340721212039582958451394010024357999615925285263365111350752152668471111931308588569544125617452251181061448878620016892084290648228327302043663656711357478900973839476344562063251135142126966016075546263553162380720933458207021727310291418840276839446943253223262384684959689512677602663732079938322408518253951573835351309616179244687166025972131912707139495128391953077031980947874168604119683184664472292669848381795716009083871277556612306170920196488394805408610339875406019601113294843242620641631227050396754855645908196677904279556854314392365012070695397607233869733732555354673786608404872112006461237659135939679275103781149663509936946839995722971632218920136654648803799972140417973321580604863072421391340575806397889874629780379074048070658779849462956748626382042782237133987989332960693947107347322070553240815226240781284897941649906726782225942376770704312812547551858324243572433971646340877222604560978234285974381350714487510375554698400191780868985387925205337522055254786165264786273261600448085096706878053834421193793435604071890849941164391597386395848010481495153892474310184632151139545541072880969618376592937999859928026160306470287401211063637917126265042524945623705790523166204475630950333591915029238611968191762728143401485588876210805814128969245566633882719865122176245924463431951715842086750236450006840051564804190408841791940222692500559490965372477515688268253907405496642061472907342914619010121657212579181361467764234637924865485254654467943228472410972274349854112832298416317954400352112014820699718681808295773157325470660796230565624096088825387707637204654499888032220345920989819199754462019497516156333728274845778054436974267467207501484818327497996634691908114728824070307789831590463706387785702300364749922544296903520329009609348748598472207871485112473007786011386600419549232652084046690076837253441970589225666430463772556359249502084980591376994436651741109935603108812045858836257061111489108694386435643655503570595363318133190975314435624763094113576669379299879979047877298240040979391202391964866677228338860102182004962956424168914834364344806404249386400712534763031829932743960305692761446072279764397234750540149429403439749575848830848657812222791117982664155619963998683072850912914322395766334779657728184710326923706111558881079866807532448067057406387379253229971248972229112839251051834424814052803713705144425918750145936376770334989969765941522051562319527592037603944008196341741771777848899163126744930412990444970629287473164038618648207526802355843985009383313264900148884890437451555831118865237299650313800103403674247036998590658232213046659066945246981994423069267393751732173862753007086921667358727996969128214260798544457265686829196691538797403013370398779833123532308239888530352263432384546504659679350788619617562975098311033202992160208321823263595046929594372484633167764684371063478592389989019993262289770354123954622487914983371095489879787300506269973836370262923994809081491851979148233210464287723547308268289545956100025353727281343306885170982649275108574573731883099312275402899355278010561115889951284552584210602172192240235668967937144010856156904288525973206965937001207686254561321773686607677024015765569995868546681370481610606612305336643961295748241327849599352676198386527228372353464255467163589382142154369711725391415150151737427077090938503391036481370835248615036035435239805525524939624513586824779990843403584223026036549164871994498279585076983299267350266471423781445213817651822478261150255874775114605585133555708514031499589483260801164738064688179949331387667872882453931997456104210519238094969069094347377374389413541242199714835857089203684459462494870779614545494951490685946503545167775428612031749346968651237139763717031086363001626407498094791041106763432551280829882335809472709855142568511616100186294425399353967187772580310395684195656686846115845499108406502700569267254295406499817588703876956335949148148960788415278113818141194000719299627010161982704907375531833943096522360889958075510189999882556652751533256426724908005844306820566942462454815614379651882905999952611712068181277375771031068600151105053225733715057841114673643294161325414723447247896413844761392712900873991500727727988233012755468137985487045848323147699725209424244123873303345760534627485114513265503137177270494363511154154010126502031675154781468525410425582343562369254805002623756722552094430638213066101557324249884101582258371550962841630889022903012629467213985495629174612197041783095535483671731125269178980318929998149748008732059177416300672714752080719604134060781771051728726498516455316263934982877808288029831289158518619994126749438610499036246939468147866808815583628635866352666003012691226678944025246264467520199665240846297381415679648946836733478583637226664975883109220259563005658134769128244863819504484695987609363181740591057926507876779223774228426887733534600167683413275733171171270019603279094868615622575150422151703790028705869976684174374120840564080248431538776051720852458782994792785936334978669805334758824884759378899860961695145044302746444751642930185873173329305382132062149406379095533148443999367492106392631221391752474392696310805042226934345451615316827944781158323260483877728010772182364455618254430262105733658004629703164428287059954752943677755230683385792422272308382960568148442648521812726916908473955619693036101591838375145285769230472979404087426741547381641531013124522936059313874952339143580993610832789396477651427096689929844065793223009542113167750462316461855478190328834520247867562981697538905274347803151303382326837667926549784019228244459707228042200246435557237296895455131340248838065579792009722304766582554629605581578556681573590748753636612679599540171330555661187523819744087281037159103595512553735410777764605456477949855507965732993734959932675737107114324664945943782423246976584400383847339248164647110781898130986963866741914263056327890373726590220101946401337369865956909412583101247130992986634456295774045770365699491568498700087644325800718476354842411877991082107110921907265515434055445483828546895078607556007597715422679136379038955557432552862372826360828027222460232258885433338573416736183915685479701303704169090476673292837808268808618290572192903169204879129040601709809192744243584412246495712375554087815372762877034756019516026451187231771971020372313035145807498295137052077097875760346570303776525027990167687906412639437374329382722326571991231658438388194553372063029334063330040808178698069781482650930319107112425002346994300962208678648414336188668674008812775504408028810609235995531901530099417059930126872981698330218683036165021988047868722244970608801844857953841494207221711214149875285075258271377921688661211419646509144638419930001984902754044189076330562777348557494732075689780507188202817812141664869508007135966483915775937944747297094500891628667526280126080333998404053740784126418138539396675750752315216878030933195589338833030254735958022623267030648066711592266070181453059500443564036283847411309644435370856412705956023552243720250796266568065803243388752146081981140573461356567703830118679807945577667574016387858372340609953359965086606647146493876713596821337835204436170776131677949232013227414096628304205354026063813469761303258719571993966225488958555093510427679791988971742172779979160922404736762880638975534962742894170841469656176520040761328916017189723598495076611011733196408040688628395455067286145659096950255539579524498493898542819120837012716973317963326487849849715816371147080347801323811060493129264074757544079929354744987108772532724901250431897896897092387811630627162295682938692000390799380186457408883817104297882448016632464850925981359863538329736159272918094180915299281795598292795892856092097063188703480460632536098280113540310786423817088772720505027688114038400828083435419652958618670207960650777062461355274910559417030961671643529156548924836502550477472694370667915954413329338824630200776333664812570409093806671470985465153208017946314158900781802567307669191878751484541748174663621804204380702802179251961019509169300052486002788063614613203094151093588031301465379292063556105603936494598372721962197938596354257244836631392404104249987383535354722179904221179866116779749977897677368618081056318874360605107874352677173957972841002691713804847766731026566566458338088565056130613983832021989821964722306831167603123999437414390273779602339099084350503010746403627846052441086604944652144679200545838398031375048439017447852050336579754361882763104670283491766082028363014447117531598447417678699769199955291379423547782526702513838534616910733291869941851842197893695263196593800083998981939690714086344244116829570847891514360775644611936068668410891121888072989671551040770844686050331981671924327746963849622675057706122039771668798123652290001766715471057273382475530294964577957716813904563781129755046076195618184532849854944607763244738467753108136589490285069089300807303423783042724466020296447103622857051676984063780930235780424078279226093967571953577579085123301797349159025386510453481391811031020579578896736388673626563068243444220092728433031839438654271567721273844233939318850279293315407811042192934736150988154534195150957861317891400276601282474543791458850609927220168618781858328688361677583022572402852987289530903439428291591351640826911513931896234378855793926094184629649867461377749820862152288361311783428144898687311257224061894140973371841970934601082910985534446880770279296961865075179339207939540667034649398632260182465551928975935233834664323653910774960714073598940999871889404546159059913102803430112603077837945473322898835928522370752743776004767790785046192909362420427454535328279162043868628615367414430148444280505973468416702467121091075677716122735981853155305087654090041184203543897366928456793118364387536804232658134896980836455221010943495434855043472538001537621563522139593046154357787767005431104545971669418574851780250907092283316306268963575222624300712467342094598896648057984691403613468974488944872998622837323868755355189267111780877757568894059389970538280324764242551100008248461368426518187213353352357694434213832166987557418266406227696226731269684792001568400021847396528021967067824143661722248433981399668779553795275336703143817493437527034996864062750575476033683476592990160272467162084962796568071976074871258307939299418014923559299385665473033725113974451523809060277107680679572873780993418718878242541739331014400659375536978260477488357552107556192113366347417991104642703118092203083908784935287088794768526725852335467431719632035696961197574244468572784804202348383106161583679110160287614379640906594882850609519086285042813749276356637781379038220846742528795286871479100756150807333745975474958321450363517740760238117025425974486078154207830247097362626165324810782122767883284045649030069274675687700549598368628071401598588410441252531499209707332674122415338248580890294783064345979541280969199051704799741386653088518816114562299165926309199651937446790392973333738006627698157890241933414100089173174831431184707510434403555662528452402504077142425536804953254061897213891569242003073903768794005932350898891391492985275354272208278492706372857379439317642872859681436000458822433289482266728226315775670196071226105231934830048135875895979603688395385169281157101689790447091271008526926070764802626463647543922527775678125834056317542431590664776972614685296274947164129345320953791799602460255113053411734201692035340147314494078580586501891867882863976375198757727260072182528363757963uwb);
+static_assert (g == 29798432244916674188267874565994511129465120803978788344316864814816788118116211967064993859202651457241150653527937300318139441398137480739498016605169958074338468812974247940643983119687412709712298707708639065721844633834030392754622467082167575384256636124970912416863467750122830431140200433047618208655095004510815432687783237399333966883566662284249473184266466494555781284661942394134007606974555197496847111970137021016999418540004497135190180698605565746245843253924478007019667216316038918311843149665996622104492911573546889531777540730482311189993304911007037408068009066215218430070848129328418292313395373962245129226209492855153844385373084110919586111468993602111024707027363861811899881912842982859068396068358713057563354536496215662738647102018858667173959375414318871177496133849959199312926882218088364664113311108693640122976260449711327351932322233788110835455072118555373145049291154743494115590060507317111856539735032533192218230483260244334704193889469794662184966199537993963999078475259216878312482974707442036256492782509772373455272769273833882315645298854863311795542608650304882161420040697211181665252342080035197173802534749769469724703268158024710819175669522770851475093176446672238329528502908755349515870984599273679350446826002857904638165429577187227047143578608071452633518342471271063866280346111762071869789364903979901717205061699969843702610929231630805060328615287467659369370840319159313397133502893318829441500860040361733782863054788093908897708674331583672603407220706479492676072388733266691156305962918416232324775256248110177992057207141301567069682256206366821456168676509466261858856409938472156321638861395757026663407211258205424076803550614986657484594005574319169124484702443999652049989150938063489591743426294245993866451260505250593013109374230205818553705481323814467997764434232825216265839479482674731987963761808633293308337512265283871364612091159988201854370660145184476139485901491033635913812044790756144158913525552429641012849929727963443403717727376487350639360231917245906451656664043825445552575910730367456550208688513910014028364857635115620260661725890378663220166170586315294293674161240986703299566970473620561528908884250063780883792514734224688857563036631219375697604761545663806029135955446308329698729187633118726312957682328458165865329528612815778259975236473921843981997298878825807911669198854508239886525812277435714684005819874906489012032318711200528590760750570526041852880637356865931470793479763913927643202410399111751142093604070407422948063457225322500044586890851162487991894225174721754156861359977725394051668830407469004793273274348712069653223607355162389110859799061463530280124845281291280807143650682769463073672563974069400047110643228833827027461693537080439809461719940027498281816925274592533558602395110549455677542858499427662912175880073255153392214064243908048250185909069590209744180868907760635944391850223298315749825841911357067093249040115124993758536243030293225525076353059013123513325111698367182126915150684907599519814623893088542203783385592662269309532984292040400010214779495601358956413902867199644918537464229778619633233694940922502004380517602109211347567613595105955983216430889725956410713259203298246729608748959880055703627186556401864111638018470966012670735995089481515926436830314775679719160087497370044975445626269931153113082589491706095558709469653105913401990243443281006865761497472274166770933023600380168828263796270922831789199991709935715817691152337421394560278747618690783171271473596641043754971933307758834432348553804094808181840424862922045449137050403287348645901740502665714464996238931464404295154095892302597483360400390905349894368195585539402232530091453204340306958822061151948990309527918884648436508768149153317544823591124206975349609256020546849488655736876372252212050830544466937747670764315669293329627518514102617563387649516771990491187310435931289985445526697182123815532501667217766095415711672214803130745000817763746855941300298444804381373550323960417069156844824460603544879660738559186868618886343869739140893603306795963472244965044168057032658483269336150393386192137971198307076283753910047081813222124156957062790985290105121454908913661951981590760015402914802952617772813249648632973163740452843731296254362782304147355033972630909824073748449028173804547717470842714205464845684491356562908731509116142387254835486442424180641204069624898443940690204887266127211533609905992195650506424940434101991806132943921221483671634998075419443031716104319954336198869316200695048883609675602643204732662053401940340217947023472547371529407763503959015869316454468851368326655813945200855080128542483589047640225121515223460096921289082506572330085372802157429561149070936426948551401948745143933947153735393521070866175780404741792183629118310346303334779175995003188671138779985580661774608808636114429379106468715113991360500153251219339447352994135563797492655340081747655877102423272282522093490036439208508486641371157289888819319721741072021088988838185575526314420629404039273157137765410457726146724738238380912109958473128084231429395806333577982707754174511689519819992445390193198198658674126964252857209724109156960517790623894027903793027127063672501493610074211338320954814508470755576473435095989167775767189027449015518474082166619942092480362630295618282318120120784478999847987626484022481457667372563874126148626833365925380661168036280884209429692348940543937907700655045159826358187660828871244692799325658776545285122623630935724707862474702154310309904951694032327191814827022575329978008964102267856794554960532273796606163812328655447447843939879079636519295465998645050724045891371587372278645762052618094041441489071969833201075688391288870817741047957072975950738340906036013816125144698235601966779945176857432857633399909230472912455927908602203373016718198614604928264423172202682557163587717390960517005049436804372462076787514085114196168532579703170731400431879295626043387670808835418558634677506586435199004217308917933633779528930967546154533842346719884096382881942924876345720600214180390787910645851233124478908442387878397330067576987181883304718450176054652199888389760748145336637283014805674257940619738290930262825301386786230510361804626489472048185472733925891779724267067453733096077343064447478426009793051940246437960227278263493197855944995062383797697382558922940929936070026427171402887628703859868935135079107329440442422076757924715656314319859155753548658149259529376550001720812563487422205664760779332226992828623190778104898486092380042779700488516917660657023822452904116096237918857457696381824722898116427936892835447067468468407009042078067084750876549952565020965668757590614127881877935221459340616752511248121731457595547980112335065757832005891665164905391633974616167324708883637006961506520792896036912627971590991704412331257521924823476631105169897878844060506322822415206964793339314218595856304487986963824904423128022971556161524749970501482913358319084506890437142764406147344587629536637264158168077923943554162127130293481141343347153505733367154880523871795677462334071936126263595187983894733622188425947744097102772800798384967456398866974517228076050160896508568699658252932716504698114217833892857487015573927286387074461795988559112405605411753418237862771339843397427624643310193743445651017055548894766307353802701817908959634882329583556939122162691594208513303270959445875971764738074360361727430013357247044648803607516281791963055729724246812412172071844637854708873681127474627331405181146695377571274674214437806915445217802775052815841975718045601990734416426330360993618773038694004120497336677710478038046243055705865865831174795450314028741068624141624553472680654469753078301535955043264283271909904456068340262636622279301829323206627968239913393816282945184963299662978583596244380198766900193280359211101193120639037252806190653613853649777477220096431415312315755563965267544743737395010806760019102516763403978882159819651640938970139344764659441590225162332671407148444880969613631409727647114892093790763899889575251819843426046454701461164266075412453030724977752871861083191084321517298250628434552232026386426397723496147104928347285904099698459531024308948589396794992195467602362080739396575252883580280220821638109567806035125118547858876658113425227036790662985374378852325482982045005999509082737712016309072932342749447188645797866863307956692202254274096257229720450056213784002994618833012774061411527155971154557389097691677678141035861132494437203379707367812549575427083312703505887015979470139355962755397252795113687602766495784089469668341232834905294201079498970320080406741451950210575593932460159381736742522819101649364144856706686103595233078202056255672800217818041865057688977839959137871100908550020967057057308917735988786388788052699769578854534978855415079111598231460966054321228995734190020325078812000201079027820474779442492631325689095753878633085497650204857079872554559473483419911768746015789710993375966794219776549253853530178476551311105974056423547355469529552560908854325369362455545410091798379902621331029483887682674948217956629284752930908329829674733920276770747094185746685996596412427679993681949974698419348014764002932434551929981624067136243863902078558471041489279445807895278052301932856585893565779292891317207843407744400767779620517520921670322338050728890045747983451373362797910535929269393753273012362217889561673925968389459965833685401690081841397162574712924132550520731464727484969352370896692414821612827317102299387105946365095615792215974376569671600616769751488289768809074955947363365918741991629059219089014597460766672961554404710097273003543733333910427577142506563709675650599245232505907077002621633894112388073720526721850175317282680734663880459465941229617558887214041112292723017506170621073751431142027041833994224029341012822137562826287139233418519120675175406976662350512581191346450770177349622645505283880898193006660945594325793831420602547212104618649469606666572347914704432825980672979848824836597174174529614001858589547531559654977293193127270065702000158500698214539788268688147372675991092422533558858644439593588202639477050504734296650046079656640647901548822757043473731619522399230164121224825466361924137251715058758866933494917083923326776719732155409909144925938224463264494658702152466050633205281304505215885375512199078501207471257652024000665306520470131745219079586546105311830140096132293692468094511925886272781358563926829224095578683651984200983372583665803571377476027144913648184978730933878979567253043069660012737872687050609798840108790845129395707870572912374332279382983724848624322539586761650029883161495235724577859552041602579347180037188647513083952602337794121166597431167370527762154337549776106370376153562655881935505078278498650286552410329632274646493785454991181144854679186335497390946483818038542665684787252305039589768256820169455262274070935643105621078189499806863932972473187397166808047422437248169273260555301215824183715525067199124002511185216150503341306108923690508295521642787129456634906823886074539205650887996137900313156803955685097335647168198343050412274573595260250608802876865485888024072019917345123849434033283566478908088265035768478211683223376432512441588787190764012153315909872510218339126604004796078990801028669133777338710317564240776134511810524463606368771117942931124804883649428527160017692567898683240236409226430799434265084307696860149739966884956352228793342336285107735457499085215192833410476346646383701031126925208288541002096440132320482015655980943794434204072206620053672585659226466354793301901487364350146519867630971691770986995057080225660905837503456552838203132631041791897154141335541677639190964910215683663487060604980846305614894646240323789368500369758091291245113498841329427792734330734803282924511704131080318489668163617828033603395900451487922230312909796925948381102991146822054674696487426070753396832430221618428295425257499796994420607860538645419531491757733336034021601535426583758567627555629938946859886544158530489820642241655856617038305077492032552858077568946392077123407218809443346686209401271493763555342851545003074944605265496573303231886857449155910337142767732100225936378105170371201084980241510325910452626303515593633156139236733088905862745695882083854190859810581160362070408267948533624449628244247119196173683262185913191513113413120834890358166551589156139594720535747080730112294593994121763531168883911031894535910487069095707175045214441413883884802410923699659922887455483992198926058974807403496764446301358667199255684428863794804385174349638463155672979632002172038865554637417660688132773049255710905333067787632676418064804368544180709337584779332643844014281294499087468987637559541868883972735107421654055148815317881757858498940165307145686763353409263467427598935862681561349845673024564278210709413696260619038530970875676404593624213991446834528296807904314996877361889127548706876660509342389067428760334202348176873902188764996715901220157107218395994779944228232025706880680537017422662829436163962024049183896623152251324568553859222919956280866164457373227617378984673998954294513406712936355130470484047172888327701828569122540112559029443105549133380108876317878934885708779481197872203584407950893040390662267527949738213177889303432525604671841689257389744714864585578792783077907001007366247010458342027047984410042602813807810527541755925124978790060094078974677759122005471591830027215095163800538956004584188386335594985153414639789590893161032065216627865562478243477492718987712336028170936986667727941311558639344162780955383819989272289059208271904167118532762576939936016139229330085472000664229184978349081804033101689310845610467686180433739112997151156369536100005937892508417519342890274027944999566791868441643171088511636287506843607494353281634216084927195204425318616160380027060137805983808724233258618373597362604084772620575548007554735347777391638935368867781173138943420137303127382395494860537617670160035924495601832037708702973800426654932341543282278261613196243383667905292201034018092087846236419463180081908614772996072182181475631925657135805746736769755149885159738078245236118655290281971965234305542674569161473901630756445921641134653221918773817366488270251547556553445951856258504157060074846199618221127220780775488108206614587779803010482980949599988435901666000892139982997311053704503820813573985517680412958243220188442951830553187600252244113193599181872435497016639064999726818396372997120756358317896887004368831719573185714636352388773401931148269187200760456815204645989551987623393621306594072130172374142854695647745385134266260394221479246638034464958250019727875388606182872986888783267877119329425439261928807662708446658489716263804660134040984758765172767392018690172608055362199607909977706235198762015694206501563061184219994813537596598965037650742184551655336428129821678412946250805280869978630642803771544192674966142704717514858737919262672330422178767701996082172980161058350281694837604804891891418253868499644666889737170146162672595758195633807151023528153597542333384168701376272552982942009280710503747128071261631293054233342278356057312085260259985144621746482929521601039472256832633668389692876355260796154739710758469371523134766822097661489603351981504829985756614646692050908671043534745910896810946153108823010813565715434364129438007586079825725640829938578522201512997903614656518629709210847565220655518550297524205877327265360786386320740093104940037625667310836335061646216571983748430953724716089948056286461750916867222003853823582795551925662024207653956362942482171653115616941583528041583602451893714531451905480724366854760556927442747966826238761875413903795420865790594905494790702579294909238521515589515005826505930386072130386589217894716686827488993215487103272779544227027134111697663748622188055096883894725483722705851459928566869284590930382532770843933468366093036527695687945993230017813346212329222255566336095319164589209582367615830662860581648744271399297073178983306225384265231838249991556901952431468352513388991468708608092739067474189472822100362609976498026022632560035118317611302900901331038619406127804916063924831183297494256578717253424234035974824920125286381993339752593386233733538479594764169282697196119372287911111519020020827824461438993089860086727372125993892847397206287561303860397419198856048912526671932730189638075028289339687312428642008826667579692987271950503032135653656758304596897823894611869615940642910929670674439798335840164484798390625939163760520381693557697796137496879028346725344730517178323841793297642804722421921020973660881331152475521171925828969058909085954920667354484636498136495463081604922293303480762098328616310257972292652271806090362595994022460593778967329967630217444017525741638045229870029346988014958084572771398978984372096138531989499905656918554786826489755330939796198694531597704511088156379062341123293295518802525687692186882544300669083021869264815460641932403430710625466965805696101573184162037649331430509823557536730381559741312755561207022942288392997545062374284743535347995055673645037635267101631718560797941766939979345842257105659818759024388745163435943430548152822772246258077883370773252929015899844104006131190134245627499981302192117817503265438901221817741389115833357581935745779927204521552590187770875390757765548238495852940181105538496855904068066688668026690107729150021075489752456818910460907620831637809136111720910366919838287991763482928791748202589855715467117114637839467261942141745735707911425500856498654501970611071951782463930001708380526113138372274175339335662509216976645164154703071438074490395763946786352790222348893491203713832049967892693792723281438844117355316466098637070993105543662349514411036242212001644754859251446687255243764019263618483003145105226068454039223391184981227114376461103289114282734069735129878443870014635503532648866626566667914901166162930587104576749414261153794064753802158961802642927355719918310663028215143569818970905632433269645320004900303957055632175311138456746844602835628904740418607000085429943093034316700698981140571877816887916474759854753997859271105386693600207306132365473887105340142508006162852906118538596732969987126166211990351704986503780155363871413699663954792800610809029455955600309822991543330042253679891766932624144939060428160579453101461433044143996234873674506037735662596771123861963729201895854603129610305096448743155140934507704061445592546699556299418746596517566849045890451544180847737277330001790442633829205995645608625832773369516360989588132005808556078368148568861893086235628443747784399629728471253481086345451020854279429082627369196342148203023724090997870940983926087765285728354735131880373997886328690240207916061276214402047198215843063673535384956668795832090551190886193140702678521430258815311225104047901738300533548529803349897158550493609982225769194034849807698159537877895555193536203558830022247566834435050885516469224684770384749924654266966662000902430627265289641143382738252234277626796684149644206035576614604674203041322937356663227140931005992313613604607015407976103540881585077144015739356504208743192058109416473577195313011234604304724364984149920580678685505306262473132159795312126331269718770461048329028893386454886617883785246418127743847205019651073400232203851162419350487342072044133458470845299106673918135646890264041635815461909682536651955578794886488715663089155422196473858390320269399281721069474509476566112352026843925757498701587450846186392850664266843050309911138045544674927859244458425621557512679785762866254871670uwb);
+
+__attribute__((noipa)) unsigned _BitInt(65472)
+foo (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
+{
+ return a + b;
+}
+
+__attribute__((noipa)) unsigned _BitInt(65472)
+bar (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
+{
+ return a / b;
+}
+
+__attribute__((noipa)) unsigned _BitInt(65472)
+baz (unsigned _BitInt(65472) a, unsigned _BitInt(65472) b)
+{
+ return a >> b;
+}
+#endif
+
+int
+main ()
+{
+#if __BITINT_MAXWIDTH__ >= 65472
+ if (foo (a, b) != c || bar (d, 71uwb) != e || baz (f, 131uwb) != g)
+ __builtin_abort ();
+#endif
+}