Przeglądaj źródła

halo2: Add ecc gadget and constants from orchard codebase

parazyd 5 lat temu
rodzic
commit
0fb6cefa75
28 zmienionych plików z 36259 dodań i 0 usunięć
  1. 7 0
      examples/halo2/src/circuit/gadget.rs
  2. 577 0
      examples/halo2/src/circuit/gadget/ecc.rs
  3. 442 0
      examples/halo2/src/circuit/gadget/ecc/chip.rs
  4. 494 0
      examples/halo2/src/circuit/gadget/ecc/chip/add.rs
  5. 199 0
      examples/halo2/src/circuit/gadget/ecc/chip/add_incomplete.rs
  6. 551 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul.rs
  7. 181 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul/complete.rs
  8. 370 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul/incomplete.rs
  9. 223 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul/overflow.rs
  10. 544 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed.rs
  11. 520 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed/base_field_elem.rs
  12. 310 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed/full_width.rs
  13. 541 0
      examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed/short.rs
  14. 96 0
      examples/halo2/src/circuit/gadget/ecc/chip/witness_point.rs
  15. 310 0
      examples/halo2/src/constants.rs
  16. 2965 0
      examples/halo2/src/constants/commit_ivk_r.rs
  17. 256 0
      examples/halo2/src/constants/load.rs
  18. 2965 0
      examples/halo2/src/constants/note_commit_r.rs
  19. 2963 0
      examples/halo2/src/constants/nullifier_k.rs
  20. 2965 0
      examples/halo2/src/constants/spend_auth_g.rs
  21. 101 0
      examples/halo2/src/constants/util.rs
  22. 2965 0
      examples/halo2/src/constants/value_commit_r.rs
  23. 818 0
      examples/halo2/src/constants/value_commit_v.rs
  24. 280 0
      examples/halo2/src/primitives/sinsemilla.rs
  25. 81 0
      examples/halo2/src/primitives/sinsemilla/addition.rs
  26. 143 0
      examples/halo2/src/primitives/sinsemilla/constants.rs
  27. 14344 0
      examples/halo2/src/primitives/sinsemilla/sinsemilla_s.rs
  28. 48 0
      examples/halo2/src/spec.rs

+ 7 - 0
examples/halo2/src/circuit/gadget.rs

@@ -1,10 +1,17 @@
 use pasta_curves::pallas;
+
+use ecc::chip::EccChip;
 use poseidon::Pow5T3Chip as PoseidonChip;
 
+pub mod ecc;
 pub mod poseidon;
 pub mod utilities;
 
 impl super::Config {
+    pub(super) fn ecc_chip(&self) -> EccChip {
+        EccChip::construct(self.ecc_config.clone())
+    }
+
     pub(super) fn poseidon_chip(&self) -> PoseidonChip<pallas::Base> {
         PoseidonChip::construct(self.poseidon_config.clone())
     }

+ 577 - 0
examples/halo2/src/circuit/gadget/ecc.rs

@@ -0,0 +1,577 @@
+//! Gadgets for elliptic curve operations.
+
+use std::fmt::Debug;
+
+use halo2::{
+    arithmetic::CurveAffine,
+    circuit::{Chip, Layouter},
+    plonk::Error,
+};
+
+use crate::circuit::gadget::utilities::UtilitiesInstructions;
+
+pub mod chip;
+
+/// The set of circuit instructions required to use the ECC gadgets.
+pub trait EccInstructions<C: CurveAffine>: Chip<C::Base> + UtilitiesInstructions<C::Base> {
+    /// Variable representing an element of the elliptic curve's base field, that
+    /// is used as a scalar in variable-base scalar mul.
+    ///
+    /// It is not true in general that a scalar field element fits in a curve's
+    /// base field, and in particular it is untrue for the Pallas curve, whose
+    /// scalar field `Fq` is larger than its base field `Fp`.
+    ///
+    /// However, the only use of variable-base scalar mul in the Orchard protocol
+    /// is in deriving diversified addresses `[ivk] g_d`,  and `ivk` is guaranteed
+    /// to be in the base field of the curve. (See non-normative notes in
+    /// https://zips.z.cash/protocol/nu5.pdf#orchardkeycomponents.)
+    type ScalarVar: Clone + Debug;
+    /// Variable representing a full-width element of the elliptic curve's
+    /// scalar field, to be used for fixed-base scalar mul.
+    type ScalarFixed: Clone + Debug;
+    /// Variable representing a signed short element of the elliptic curve's
+    /// scalar field, to be used for fixed-base scalar mul.
+    ///
+    /// A `ScalarFixedShort` must be in the range [-(2^64 - 1), 2^64 - 1].
+    type ScalarFixedShort: Clone + Debug;
+    /// Variable representing an elliptic curve point.
+    type Point: Clone + Debug;
+    /// Variable representing the affine short Weierstrass x-coordinate of an
+    /// elliptic curve point.
+    type X: Clone + Debug;
+    /// Enumeration of the set of fixed bases to be used in scalar mul with a full-width scalar.
+    type FixedPoints: Clone + Debug;
+    /// Enumeration of the set of fixed bases to be used in scalar mul with a base field element.
+    type FixedPointsBaseField: Clone + Debug;
+    /// Enumeration of the set of fixed bases to be used in short signed scalar mul.
+    type FixedPointsShort: Clone + Debug;
+
+    /// Constrains point `a` to be equal in value to point `b`.
+    fn constrain_equal(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        a: &Self::Point,
+        b: &Self::Point,
+    ) -> Result<(), Error>;
+
+    /// Witnesses the given point as a private input to the circuit.
+    /// This maps the identity to (0, 0) in affine coordinates.
+    fn witness_point(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        value: Option<C>,
+    ) -> Result<Self::Point, Error>;
+
+    /// Extracts the x-coordinate of a point.
+    fn extract_p(point: &Self::Point) -> &Self::X;
+
+    /// Performs incomplete point addition, returning `a + b`.
+    ///
+    /// This returns an error in exceptional cases.
+    fn add_incomplete(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        a: &Self::Point,
+        b: &Self::Point,
+    ) -> Result<Self::Point, Error>;
+
+    /// Performs complete point addition, returning `a + b`.
+    fn add(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        a: &Self::Point,
+        b: &Self::Point,
+    ) -> Result<Self::Point, Error>;
+
+    /// Performs variable-base scalar multiplication, returning `[scalar] base`.
+    /// Multiplication of the identity `[scalar] 𝒪 ` returns an error.
+    fn mul(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        scalar: &Self::Var,
+        base: &Self::Point,
+    ) -> Result<(Self::Point, Self::ScalarVar), Error>;
+
+    /// Performs fixed-base scalar multiplication using a full-width scalar, returning `[scalar] base`.
+    fn mul_fixed(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        scalar: Option<C::Scalar>,
+        base: &Self::FixedPoints,
+    ) -> Result<(Self::Point, Self::ScalarFixed), Error>;
+
+    /// Performs fixed-base scalar multiplication using a short signed scalar, returning
+    /// `[magnitude * sign] base`.
+    fn mul_fixed_short(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        magnitude_sign: (Self::Var, Self::Var),
+        base: &Self::FixedPointsShort,
+    ) -> Result<(Self::Point, Self::ScalarFixedShort), Error>;
+
+    /// Performs fixed-base scalar multiplication using a base field element as the scalar.
+    /// In the current implementation, this base field element must be output from another
+    /// instruction.
+    fn mul_fixed_base_field_elem(
+        &self,
+        layouter: &mut impl Layouter<C::Base>,
+        base_field_elem: Self::Var,
+        base: &Self::FixedPointsBaseField,
+    ) -> Result<Self::Point, Error>;
+}
+
+/// An element of the given elliptic curve's base field, that is used as a scalar
+/// in variable-base scalar mul.
+///
+/// It is not true in general that a scalar field element fits in a curve's
+/// base field, and in particular it is untrue for the Pallas curve, whose
+/// scalar field `Fq` is larger than its base field `Fp`.
+///
+/// However, the only use of variable-base scalar mul in the Orchard protocol
+/// is in deriving diversified addresses `[ivk] g_d`,  and `ivk` is guaranteed
+/// to be in the base field of the curve. (See non-normative notes in
+/// https://zips.z.cash/protocol/nu5.pdf#orchardkeycomponents.)
+#[derive(Debug)]
+pub struct ScalarVar<C: CurveAffine, EccChip: EccInstructions<C> + Clone + Debug + Eq> {
+    chip: EccChip,
+    inner: EccChip::ScalarVar,
+}
+
+/// A full-width element of the given elliptic curve's scalar field, to be used for fixed-base scalar mul.
+#[derive(Debug)]
+pub struct ScalarFixed<C: CurveAffine, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    chip: EccChip,
+    inner: EccChip::ScalarFixed,
+}
+
+/// A signed short element of the given elliptic curve's scalar field, to be used for fixed-base scalar mul.
+#[derive(Debug)]
+pub struct ScalarFixedShort<C: CurveAffine, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    chip: EccChip,
+    inner: EccChip::ScalarFixedShort,
+}
+
+/// An elliptic curve point over the given curve.
+#[derive(Copy, Clone, Debug)]
+pub struct Point<C: CurveAffine, EccChip: EccInstructions<C> + Clone + Debug + Eq> {
+    chip: EccChip,
+    inner: EccChip::Point,
+}
+
+impl<C: CurveAffine, EccChip: EccInstructions<C> + Clone + Debug + Eq> Point<C, EccChip> {
+    /// Constructs a new point with the given value.
+    pub fn new(
+        chip: EccChip,
+        mut layouter: impl Layouter<C::Base>,
+        value: Option<C>,
+    ) -> Result<Self, Error> {
+        let point = chip.witness_point(&mut layouter, value);
+        point.map(|inner| Point { chip, inner })
+    }
+
+    /// Constrains this point to be equal in value to another point.
+    pub fn constrain_equal(
+        &self,
+        mut layouter: impl Layouter<C::Base>,
+        other: &Self,
+    ) -> Result<(), Error> {
+        self.chip
+            .constrain_equal(&mut layouter, &self.inner, &other.inner)
+    }
+
+    /// Returns the inner point.
+    pub fn inner(&self) -> &EccChip::Point {
+        &self.inner
+    }
+
+    /// Extracts the x-coordinate of a point.
+    pub fn extract_p(&self) -> X<C, EccChip> {
+        X::from_inner(self.chip.clone(), EccChip::extract_p(&self.inner).clone())
+    }
+
+    /// Wraps the given point (obtained directly from an instruction) in a gadget.
+    pub fn from_inner(chip: EccChip, inner: EccChip::Point) -> Self {
+        Point { chip, inner }
+    }
+
+    /// Returns `self + other` using complete addition.
+    pub fn add(&self, mut layouter: impl Layouter<C::Base>, other: &Self) -> Result<Self, Error> {
+        assert_eq!(self.chip, other.chip);
+        self.chip
+            .add(&mut layouter, &self.inner, &other.inner)
+            .map(|inner| Point {
+                chip: self.chip.clone(),
+                inner,
+            })
+    }
+
+    /// Returns `self + other` using incomplete addition.
+    pub fn add_incomplete(
+        &self,
+        mut layouter: impl Layouter<C::Base>,
+        other: &Self,
+    ) -> Result<Self, Error> {
+        assert_eq!(self.chip, other.chip);
+        self.chip
+            .add_incomplete(&mut layouter, &self.inner, &other.inner)
+            .map(|inner| Point {
+                chip: self.chip.clone(),
+                inner,
+            })
+    }
+
+    /// Returns `[by] self`.
+    pub fn mul(
+        &self,
+        mut layouter: impl Layouter<C::Base>,
+        by: &EccChip::Var,
+    ) -> Result<(Self, ScalarVar<C, EccChip>), Error> {
+        self.chip
+            .mul(&mut layouter, by, &self.inner)
+            .map(|(point, scalar)| {
+                (
+                    Point {
+                        chip: self.chip.clone(),
+                        inner: point,
+                    },
+                    ScalarVar {
+                        chip: self.chip.clone(),
+                        inner: scalar,
+                    },
+                )
+            })
+    }
+}
+
+/// The affine short Weierstrass x-coordinate of an elliptic curve point over the
+/// given curve.
+#[derive(Debug)]
+pub struct X<C: CurveAffine, EccChip: EccInstructions<C> + Clone + Debug + Eq> {
+    chip: EccChip,
+    inner: EccChip::X,
+}
+
+impl<C: CurveAffine, EccChip: EccInstructions<C> + Clone + Debug + Eq> X<C, EccChip> {
+    /// Wraps the given x-coordinate (obtained directly from an instruction) in a gadget.
+    pub fn from_inner(chip: EccChip, inner: EccChip::X) -> Self {
+        X { chip, inner }
+    }
+
+    /// Returns the inner x-coordinate.
+    pub fn inner(&self) -> &EccChip::X {
+        &self.inner
+    }
+}
+
+/// A constant elliptic curve point over the given curve, for which window tables have
+/// been provided to make scalar multiplication more efficient.
+///
+/// Used in scalar multiplication with full-width scalars.
+#[derive(Clone, Debug)]
+pub struct FixedPoint<C: CurveAffine, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    chip: EccChip,
+    inner: EccChip::FixedPoints,
+}
+
+impl<C: CurveAffine, EccChip> FixedPoint<C, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    #[allow(clippy::type_complexity)]
+    /// Returns `[by] self`.
+    pub fn mul(
+        &self,
+        mut layouter: impl Layouter<C::Base>,
+        by: Option<C::Scalar>,
+    ) -> Result<(Point<C, EccChip>, ScalarFixed<C, EccChip>), Error> {
+        self.chip
+            .mul_fixed(&mut layouter, by, &self.inner)
+            .map(|(point, scalar)| {
+                (
+                    Point {
+                        chip: self.chip.clone(),
+                        inner: point,
+                    },
+                    ScalarFixed {
+                        chip: self.chip.clone(),
+                        inner: scalar,
+                    },
+                )
+            })
+    }
+
+    /// Wraps the given fixed base (obtained directly from an instruction) in a gadget.
+    pub fn from_inner(chip: EccChip, inner: EccChip::FixedPoints) -> Self {
+        FixedPoint { chip, inner }
+    }
+}
+
+/// A constant elliptic curve point over the given curve, used in scalar multiplication
+/// with a base field element
+#[derive(Clone, Debug)]
+pub struct FixedPointBaseField<C: CurveAffine, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    chip: EccChip,
+    inner: EccChip::FixedPointsBaseField,
+}
+
+impl<C: CurveAffine, EccChip> FixedPointBaseField<C, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    #[allow(clippy::type_complexity)]
+    /// Returns `[by] self`.
+    pub fn mul(
+        &self,
+        mut layouter: impl Layouter<C::Base>,
+        by: EccChip::Var,
+    ) -> Result<Point<C, EccChip>, Error> {
+        self.chip
+            .mul_fixed_base_field_elem(&mut layouter, by, &self.inner)
+            .map(|inner| Point {
+                chip: self.chip.clone(),
+                inner,
+            })
+    }
+
+    /// Wraps the given fixed base (obtained directly from an instruction) in a gadget.
+    pub fn from_inner(chip: EccChip, inner: EccChip::FixedPointsBaseField) -> Self {
+        FixedPointBaseField { chip, inner }
+    }
+}
+
+/// A constant elliptic curve point over the given curve, used in scalar multiplication
+/// with a short signed exponent
+#[derive(Clone, Debug)]
+pub struct FixedPointShort<C: CurveAffine, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    chip: EccChip,
+    inner: EccChip::FixedPointsShort,
+}
+
+impl<C: CurveAffine, EccChip> FixedPointShort<C, EccChip>
+where
+    EccChip: EccInstructions<C> + Clone + Debug + Eq,
+{
+    #[allow(clippy::type_complexity)]
+    /// Returns `[by] self`.
+    pub fn mul(
+        &self,
+        mut layouter: impl Layouter<C::Base>,
+        magnitude_sign: (EccChip::Var, EccChip::Var),
+    ) -> Result<(Point<C, EccChip>, ScalarFixedShort<C, EccChip>), Error> {
+        self.chip
+            .mul_fixed_short(&mut layouter, magnitude_sign, &self.inner)
+            .map(|(point, scalar)| {
+                (
+                    Point {
+                        chip: self.chip.clone(),
+                        inner: point,
+                    },
+                    ScalarFixedShort {
+                        chip: self.chip.clone(),
+                        inner: scalar,
+                    },
+                )
+            })
+    }
+
+    /// Wraps the given fixed base (obtained directly from an instruction) in a gadget.
+    pub fn from_inner(chip: EccChip, inner: EccChip::FixedPointsShort) -> Self {
+        FixedPointShort { chip, inner }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use group::{prime::PrimeCurveAffine, Curve, Group};
+
+    use halo2::{
+        circuit::{Layouter, SimpleFloorPlanner},
+        dev::MockProver,
+        plonk::{Circuit, ConstraintSystem, Error},
+    };
+    use pasta_curves::pallas;
+
+    use super::chip::{EccChip, EccConfig};
+    use crate::circuit::gadget::utilities::lookup_range_check::LookupRangeCheckConfig;
+
+    struct MyCircuit {}
+
+    #[allow(non_snake_case)]
+    impl Circuit<pallas::Base> for MyCircuit {
+        type Config = EccConfig;
+        type FloorPlanner = SimpleFloorPlanner;
+
+        fn without_witnesses(&self) -> Self {
+            MyCircuit {}
+        }
+
+        fn configure(meta: &mut ConstraintSystem<pallas::Base>) -> Self::Config {
+            let advices = [
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+                meta.advice_column(),
+            ];
+            let lookup_table = meta.lookup_table_column();
+            let lagrange_coeffs = [
+                meta.fixed_column(),
+                meta.fixed_column(),
+                meta.fixed_column(),
+                meta.fixed_column(),
+                meta.fixed_column(),
+                meta.fixed_column(),
+                meta.fixed_column(),
+                meta.fixed_column(),
+            ];
+            // Shared fixed column for loading constants
+            let constants = meta.fixed_column();
+            meta.enable_constant(constants);
+
+            let range_check = LookupRangeCheckConfig::configure(meta, advices[9], lookup_table);
+            EccChip::configure(meta, advices, lagrange_coeffs, range_check)
+        }
+
+        fn synthesize(
+            &self,
+            config: Self::Config,
+            mut layouter: impl Layouter<pallas::Base>,
+        ) -> Result<(), Error> {
+            let chip = EccChip::construct(config.clone());
+
+            // Load 10-bit lookup table. In the Action circuit, this will be
+            // provided by the Sinsemilla chip.
+            config.lookup_config.load(&mut layouter)?;
+
+            // Generate a random point P
+            let p_val = pallas::Point::random(rand::rngs::OsRng).to_affine(); // P
+            let p = super::Point::new(chip.clone(), layouter.namespace(|| "P"), Some(p_val))?;
+            let p_neg = -p_val;
+            let p_neg = super::Point::new(chip.clone(), layouter.namespace(|| "-P"), Some(p_neg))?;
+
+            // Generate a random point Q
+            let q_val = pallas::Point::random(rand::rngs::OsRng).to_affine(); // Q
+            let q = super::Point::new(chip.clone(), layouter.namespace(|| "Q"), Some(q_val))?;
+
+            // Make sure P and Q are not the same point.
+            assert_ne!(p_val, q_val);
+
+            // Generate a (0,0) point to be used in other tests.
+            let zero = {
+                super::Point::new(
+                    chip.clone(),
+                    layouter.namespace(|| "identity"),
+                    Some(pallas::Affine::identity()),
+                )?
+            };
+
+            // Test complete addition
+            {
+                super::chip::add::tests::test_add(
+                    chip.clone(),
+                    layouter.namespace(|| "complete addition"),
+                    &zero,
+                    p_val,
+                    &p,
+                    q_val,
+                    &q,
+                    &p_neg,
+                )?;
+            }
+
+            // Test incomplete addition
+            {
+                super::chip::add_incomplete::tests::test_add_incomplete(
+                    chip.clone(),
+                    layouter.namespace(|| "incomplete addition"),
+                    &zero,
+                    p_val,
+                    &p,
+                    q_val,
+                    &q,
+                    &p_neg,
+                )?;
+            }
+
+            // Test variable-base scalar multiplication
+            {
+                super::chip::mul::tests::test_mul(
+                    chip.clone(),
+                    layouter.namespace(|| "variable-base scalar mul"),
+                    &zero,
+                    &p,
+                    p_val,
+                )?;
+            }
+
+            // Test full-width fixed-base scalar multiplication
+            {
+                super::chip::mul_fixed::full_width::tests::test_mul_fixed(
+                    chip.clone(),
+                    layouter.namespace(|| "full-width fixed-base scalar mul"),
+                )?;
+            }
+
+            // Test signed short fixed-base scalar multiplication
+            {
+                super::chip::mul_fixed::short::tests::test_mul_fixed_short(
+                    chip.clone(),
+                    layouter.namespace(|| "signed short fixed-base scalar mul"),
+                )?;
+            }
+
+            // Test fixed-base scalar multiplication with a base field element
+            {
+                super::chip::mul_fixed::base_field_elem::tests::test_mul_fixed_base_field(
+                    chip,
+                    layouter.namespace(|| "fixed-base scalar mul with base field element"),
+                )?;
+            }
+
+            Ok(())
+        }
+    }
+
+    #[test]
+    fn ecc_chip() {
+        let k = 13;
+        let circuit = MyCircuit {};
+        let prover = MockProver::run(k, &circuit, vec![]).unwrap();
+        assert_eq!(prover.verify(), Ok(()))
+    }
+
+    #[cfg(feature = "dev-graph")]
+    #[test]
+    fn print_ecc_chip() {
+        use plotters::prelude::*;
+
+        let root = BitMapBackend::new("ecc-chip-layout.png", (1024, 7680)).into_drawing_area();
+        root.fill(&WHITE).unwrap();
+        let root = root.titled("Ecc Chip Layout", ("sans-serif", 60)).unwrap();
+
+        let circuit = MyCircuit {};
+        halo2::dev::CircuitLayout::default()
+            .render(13, &circuit, &root)
+            .unwrap();
+    }
+}

+ 442 - 0
examples/halo2/src/circuit/gadget/ecc/chip.rs

@@ -0,0 +1,442 @@
+use super::EccInstructions;
+use crate::{
+    circuit::gadget::utilities::{
+        copy, decompose_running_sum::RunningSumConfig, lookup_range_check::LookupRangeCheckConfig,
+        CellValue, UtilitiesInstructions, Var,
+    },
+    constants::{self, NullifierK, OrchardFixedBasesFull, ValueCommitV},
+    primitives::sinsemilla,
+};
+use arrayvec::ArrayVec;
+
+use group::prime::PrimeCurveAffine;
+use halo2::{
+    circuit::{Chip, Layouter},
+    plonk::{Advice, Column, ConstraintSystem, Error, Fixed, Selector},
+};
+use pasta_curves::{arithmetic::CurveAffine, pallas};
+
+pub(super) mod add;
+pub(super) mod add_incomplete;
+pub(super) mod mul;
+pub(super) mod mul_fixed;
+pub(super) mod witness_point;
+
+/// A curve point represented in affine (x, y) coordinates. Each coordinate is
+/// assigned to a cell.
+#[derive(Clone, Debug)]
+pub struct EccPoint {
+    /// x-coordinate
+    x: CellValue<pallas::Base>,
+    /// y-coordinate
+    y: CellValue<pallas::Base>,
+}
+
+impl EccPoint {
+    /// Constructs a point from its coordinates, without checking they are on the curve.
+    ///
+    /// This is an internal API that we only use where we know we have a valid curve point
+    /// (specifically inside Sinsemilla).
+    pub(in crate::circuit::gadget) fn from_coordinates_unchecked(
+        x: CellValue<pallas::Base>,
+        y: CellValue<pallas::Base>,
+    ) -> Self {
+        EccPoint { x, y }
+    }
+
+    /// Returns the value of this curve point, if known.
+    pub fn point(&self) -> Option<pallas::Affine> {
+        match (self.x.value(), self.y.value()) {
+            (Some(x), Some(y)) => {
+                if x == pallas::Base::zero() && y == pallas::Base::zero() {
+                    Some(pallas::Affine::identity())
+                } else {
+                    Some(pallas::Affine::from_xy(x, y).unwrap())
+                }
+            }
+            _ => None,
+        }
+    }
+    /// The cell containing the affine short-Weierstrass x-coordinate,
+    /// or 0 for the zero point.
+    pub fn x(&self) -> CellValue<pallas::Base> {
+        self.x
+    }
+    /// The cell containing the affine short-Weierstrass y-coordinate,
+    /// or 0 for the zero point.
+    pub fn y(&self) -> CellValue<pallas::Base> {
+        self.y
+    }
+}
+
+/// Configuration for the ECC chip
+#[derive(Clone, Debug, Eq, PartialEq)]
+#[allow(non_snake_case)]
+pub struct EccConfig {
+    /// Advice columns needed by instructions in the ECC chip.
+    pub advices: [Column<Advice>; 10],
+
+    /// Coefficients of interpolation polynomials for x-coordinates (used in fixed-base scalar multiplication)
+    pub lagrange_coeffs: [Column<Fixed>; constants::H],
+    /// Fixed z such that y + z = u^2 some square, and -y + z is a non-square. (Used in fixed-base scalar multiplication)
+    pub fixed_z: Column<Fixed>,
+
+    /// Incomplete addition
+    pub q_add_incomplete: Selector,
+
+    /// Complete addition
+    pub q_add: Selector,
+
+    /// Variable-base scalar multiplication (hi half)
+    pub q_mul_hi: (Selector, Selector, Selector),
+    /// Variable-base scalar multiplication (lo half)
+    pub q_mul_lo: (Selector, Selector, Selector),
+    /// Selector used to enforce boolean decomposition in variable-base scalar mul
+    pub q_mul_decompose_var: Selector,
+    /// Selector used to enforce switching logic on LSB in variable-base scalar mul
+    pub q_mul_lsb: Selector,
+    /// Variable-base scalar multiplication (overflow check)
+    pub q_mul_overflow: Selector,
+
+    /// Fixed-base full-width scalar multiplication
+    pub q_mul_fixed_full: Selector,
+    /// Fixed-base signed short scalar multiplication
+    pub q_mul_fixed_short: Selector,
+    /// Canonicity checks on base field element used as scalar in fixed-base mul
+    pub q_mul_fixed_base_field: Selector,
+    /// Running sum decomposition of a scalar used in fixed-base mul. This is used
+    /// when the scalar is a signed short exponent or a base-field element.
+    pub q_mul_fixed_running_sum: Selector,
+
+    /// Witness point
+    pub q_point: Selector,
+
+    /// Lookup range check using 10-bit lookup table
+    pub lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
+    /// Running sum decomposition.
+    pub running_sum_config: RunningSumConfig<pallas::Base, { constants::FIXED_BASE_WINDOW_SIZE }>,
+}
+
+/// A chip implementing EccInstructions
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub struct EccChip {
+    config: EccConfig,
+}
+
+impl Chip<pallas::Base> for EccChip {
+    type Config = EccConfig;
+    type Loaded = ();
+
+    fn config(&self) -> &Self::Config {
+        &self.config
+    }
+
+    fn loaded(&self) -> &Self::Loaded {
+        &()
+    }
+}
+
+impl UtilitiesInstructions<pallas::Base> for EccChip {
+    type Var = CellValue<pallas::Base>;
+}
+
+impl EccChip {
+    pub fn construct(config: <Self as Chip<pallas::Base>>::Config) -> Self {
+        Self { config }
+    }
+
+    /// # Side effects
+    ///
+    /// All columns in `advices` will be equality-enabled.
+    #[allow(non_snake_case)]
+    pub fn configure(
+        meta: &mut ConstraintSystem<pallas::Base>,
+        advices: [Column<Advice>; 10],
+        lagrange_coeffs: [Column<Fixed>; 8],
+        range_check: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
+    ) -> <Self as Chip<pallas::Base>>::Config {
+        // The following columns need to be equality-enabled for their use in sub-configs:
+        //
+        // add::Config and add_incomplete::Config:
+        // - advices[0]: x_p,
+        // - advices[1]: y_p,
+        // - advices[2]: x_qr,
+        // - advices[3]: y_qr,
+        //
+        // mul_fixed::Config:
+        // - advices[4]: window
+        // - advices[5]: u
+        //
+        // mul_fixed::base_field_element::Config:
+        // - [advices[6], advices[7], advices[8]]: canon_advices
+        //
+        // mul::overflow::Config:
+        // - [advices[0], advices[1], advices[2]]: advices
+        //
+        // mul::incomplete::Config
+        // - advices[4]: lambda1
+        // - advices[9]: z
+        //
+        // mul::complete::Config:
+        // - advices[9]: z_complete
+        //
+        // TODO: Refactor away from `impl From<EccConfig> for _` so that sub-configs can
+        // equality-enable the columns they need to.
+        for column in &advices {
+            meta.enable_equality((*column).into());
+        }
+
+        let q_mul_fixed_running_sum = meta.selector();
+        let running_sum_config =
+            RunningSumConfig::configure(meta, q_mul_fixed_running_sum, advices[4]);
+
+        let config = EccConfig {
+            advices,
+            lagrange_coeffs,
+            fixed_z: meta.fixed_column(),
+            q_add_incomplete: meta.selector(),
+            q_add: meta.selector(),
+            q_mul_hi: (meta.selector(), meta.selector(), meta.selector()),
+            q_mul_lo: (meta.selector(), meta.selector(), meta.selector()),
+            q_mul_decompose_var: meta.selector(),
+            q_mul_overflow: meta.selector(),
+            q_mul_lsb: meta.selector(),
+            q_mul_fixed_full: meta.selector(),
+            q_mul_fixed_short: meta.selector(),
+            q_mul_fixed_base_field: meta.selector(),
+            q_mul_fixed_running_sum,
+            q_point: meta.selector(),
+            lookup_config: range_check,
+            running_sum_config,
+        };
+
+        // Create witness point gate
+        {
+            let config: witness_point::Config = (&config).into();
+            config.create_gate(meta);
+        }
+
+        // Create incomplete point addition gate
+        {
+            let config: add_incomplete::Config = (&config).into();
+            config.create_gate(meta);
+        }
+
+        // Create complete point addition gate
+        {
+            let add_config: add::Config = (&config).into();
+            add_config.create_gate(meta);
+        }
+
+        // Create variable-base scalar mul gates
+        {
+            let mul_config: mul::Config = (&config).into();
+            mul_config.create_gate(meta);
+        }
+
+        // Create gate that is used both in fixed-base mul using a short signed exponent,
+        // and fixed-base mul using a base field element.
+        {
+            // The const generic does not matter when creating gates.
+            let mul_fixed_config: mul_fixed::Config<{ constants::NUM_WINDOWS }> = (&config).into();
+            mul_fixed_config.running_sum_coords_gate(meta);
+        }
+
+        // Create gate that is only used in full-width fixed-base scalar mul.
+        {
+            let mul_fixed_full_config: mul_fixed::full_width::Config = (&config).into();
+            mul_fixed_full_config.create_gate(meta);
+        }
+
+        // Create gate that is only used in short fixed-base scalar mul.
+        {
+            let short_config: mul_fixed::short::Config = (&config).into();
+            short_config.create_gate(meta);
+        }
+
+        // Create gate that is only used in fixed-base mul using a base field element.
+        {
+            let base_field_config: mul_fixed::base_field_elem::Config = (&config).into();
+            base_field_config.create_gate(meta);
+        }
+
+        config
+    }
+}
+
+/// A full-width scalar used for fixed-base scalar multiplication.
+/// This is decomposed into 85 3-bit windows in little-endian order,
+/// i.e. `windows` = [k_0, k_1, ..., k_84] (for a 255-bit scalar)
+/// where `scalar = k_0 + k_1 * (2^3) + ... + k_84 * (2^3)^84` and
+/// each `k_i` is in the range [0..2^3).
+#[derive(Clone, Debug)]
+pub struct EccScalarFixed {
+    value: Option<pallas::Scalar>,
+    windows: ArrayVec<CellValue<pallas::Base>, { constants::NUM_WINDOWS }>,
+}
+
+/// A signed short scalar used for fixed-base scalar multiplication.
+/// A short scalar must have magnitude in the range [0..2^64), with
+/// a sign of either 1 or -1.
+/// This is decomposed into 3-bit windows in little-endian order
+/// using a running sum `z`, where z_{i+1} = (z_i - a_i) / (2^3)
+/// for element α = a_0 + (2^3) a_1 + ... + (2^{3(n-1)}) a_{n-1}.
+/// Each `a_i` is in the range [0..2^3).
+///
+/// `windows` = [k_0, k_1, ..., k_21] (for a 64-bit magnitude)
+/// where `scalar = k_0 + k_1 * (2^3) + ... + k_84 * (2^3)^84` and
+/// each `k_i` is in the range [0..2^3).
+/// k_21 must be a single bit, i.e. 0 or 1.
+#[derive(Clone, Debug)]
+pub struct EccScalarFixedShort {
+    magnitude: CellValue<pallas::Base>,
+    sign: CellValue<pallas::Base>,
+    running_sum: ArrayVec<CellValue<pallas::Base>, { constants::NUM_WINDOWS_SHORT + 1 }>,
+}
+
+/// A base field element used for fixed-base scalar multiplication.
+/// This is decomposed into 3-bit windows in little-endian order
+/// using a running sum `z`, where z_{i+1} = (z_i - a_i) / (2^3)
+/// for element α = a_0 + (2^3) a_1 + ... + (2^{3(n-1)}) a_{n-1}.
+/// Each `a_i` is in the range [0..2^3).
+///
+/// `running_sum` = [z_0, ..., z_85], where we expect z_85 = 0.
+/// Since z_0 is initialized as the scalar α, we store it as
+/// `base_field_elem`.
+#[derive(Clone, Debug)]
+struct EccBaseFieldElemFixed {
+    base_field_elem: CellValue<pallas::Base>,
+    running_sum: ArrayVec<CellValue<pallas::Base>, { constants::NUM_WINDOWS + 1 }>,
+}
+
+impl EccBaseFieldElemFixed {
+    fn base_field_elem(&self) -> CellValue<pallas::Base> {
+        self.base_field_elem
+    }
+}
+
+impl EccInstructions<pallas::Affine> for EccChip {
+    type ScalarFixed = EccScalarFixed;
+    type ScalarFixedShort = EccScalarFixedShort;
+    type ScalarVar = CellValue<pallas::Base>;
+    type Point = EccPoint;
+    type X = CellValue<pallas::Base>;
+    type FixedPoints = OrchardFixedBasesFull;
+    type FixedPointsBaseField = NullifierK;
+    type FixedPointsShort = ValueCommitV;
+
+    fn constrain_equal(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        a: &Self::Point,
+        b: &Self::Point,
+    ) -> Result<(), Error> {
+        layouter.assign_region(
+            || "constrain equal",
+            |mut region| {
+                // Constrain x-coordinates
+                region.constrain_equal(a.x().cell(), b.x().cell())?;
+                // Constrain x-coordinates
+                region.constrain_equal(a.y().cell(), b.y().cell())
+            },
+        )
+    }
+
+    fn witness_point(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        value: Option<pallas::Affine>,
+    ) -> Result<Self::Point, Error> {
+        let config: witness_point::Config = self.config().into();
+        layouter.assign_region(
+            || "witness point",
+            |mut region| config.assign_region(value, 0, &mut region),
+        )
+    }
+
+    fn extract_p(point: &Self::Point) -> &Self::X {
+        &point.x
+    }
+
+    fn add_incomplete(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        a: &Self::Point,
+        b: &Self::Point,
+    ) -> Result<Self::Point, Error> {
+        let config: add_incomplete::Config = self.config().into();
+        layouter.assign_region(
+            || "incomplete point addition",
+            |mut region| config.assign_region(a, b, 0, &mut region),
+        )
+    }
+
+    fn add(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        a: &Self::Point,
+        b: &Self::Point,
+    ) -> Result<Self::Point, Error> {
+        let config: add::Config = self.config().into();
+        layouter.assign_region(
+            || "complete point addition",
+            |mut region| config.assign_region(a, b, 0, &mut region),
+        )
+    }
+
+    fn mul(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        scalar: &Self::Var,
+        base: &Self::Point,
+    ) -> Result<(Self::Point, Self::ScalarVar), Error> {
+        let config: mul::Config = self.config().into();
+        config.assign(
+            layouter.namespace(|| "variable-base scalar mul"),
+            *scalar,
+            base,
+        )
+    }
+
+    fn mul_fixed(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        scalar: Option<pallas::Scalar>,
+        base: &Self::FixedPoints,
+    ) -> Result<(Self::Point, Self::ScalarFixed), Error> {
+        let config: mul_fixed::full_width::Config = self.config().into();
+        config.assign(
+            layouter.namespace(|| format!("fixed-base mul of {:?}", base)),
+            scalar,
+            *base,
+        )
+    }
+
+    fn mul_fixed_short(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        magnitude_sign: (CellValue<pallas::Base>, CellValue<pallas::Base>),
+        base: &Self::FixedPointsShort,
+    ) -> Result<(Self::Point, Self::ScalarFixedShort), Error> {
+        let config: mul_fixed::short::Config = self.config().into();
+        config.assign(
+            layouter.namespace(|| format!("short fixed-base mul of {:?}", base)),
+            magnitude_sign,
+            base,
+        )
+    }
+
+    fn mul_fixed_base_field_elem(
+        &self,
+        layouter: &mut impl Layouter<pallas::Base>,
+        base_field_elem: CellValue<pallas::Base>,
+        base: &Self::FixedPointsBaseField,
+    ) -> Result<Self::Point, Error> {
+        let config: mul_fixed::base_field_elem::Config = self.config().into();
+        config.assign(
+            layouter.namespace(|| format!("base-field elem fixed-base mul of {:?}", base)),
+            base_field_elem,
+            *base,
+        )
+    }
+}

+ 494 - 0
examples/halo2/src/circuit/gadget/ecc/chip/add.rs

@@ -0,0 +1,494 @@
+use std::array;
+
+use super::{copy, CellValue, EccConfig, EccPoint, Var};
+use ff::Field;
+use halo2::{
+    arithmetic::BatchInvert,
+    circuit::Region,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+use pasta_curves::{arithmetic::FieldExt, pallas};
+use std::collections::HashSet;
+
+#[derive(Clone, Debug)]
+pub struct Config {
+    q_add: Selector,
+    // lambda
+    lambda: Column<Advice>,
+    // x-coordinate of P in P + Q = R
+    pub x_p: Column<Advice>,
+    // y-coordinate of P in P + Q = R
+    pub y_p: Column<Advice>,
+    // x-coordinate of Q or R in P + Q = R
+    pub x_qr: Column<Advice>,
+    // y-coordinate of Q or R in P + Q = R
+    pub y_qr: Column<Advice>,
+    // α = inv0(x_q - x_p)
+    alpha: Column<Advice>,
+    // β = inv0(x_p)
+    beta: Column<Advice>,
+    // γ = inv0(x_q)
+    gamma: Column<Advice>,
+    // δ = inv0(y_p + y_q) if x_q = x_p, 0 otherwise
+    delta: Column<Advice>,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(ecc_config: &EccConfig) -> Self {
+        Self {
+            q_add: ecc_config.q_add,
+            x_p: ecc_config.advices[0],
+            y_p: ecc_config.advices[1],
+            x_qr: ecc_config.advices[2],
+            y_qr: ecc_config.advices[3],
+            lambda: ecc_config.advices[4],
+            alpha: ecc_config.advices[5],
+            beta: ecc_config.advices[6],
+            gamma: ecc_config.advices[7],
+            delta: ecc_config.advices[8],
+        }
+    }
+}
+
+impl Config {
+    pub(crate) fn advice_columns(&self) -> HashSet<Column<Advice>> {
+        core::array::IntoIter::new([
+            self.x_p,
+            self.y_p,
+            self.x_qr,
+            self.y_qr,
+            self.lambda,
+            self.alpha,
+            self.beta,
+            self.gamma,
+            self.delta,
+        ])
+        .collect()
+    }
+
+    pub(crate) fn output_columns(&self) -> HashSet<Column<Advice>> {
+        core::array::IntoIter::new([self.x_qr, self.y_qr]).collect()
+    }
+
+    pub(crate) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate("complete addition gates", |meta| {
+            let q_add = meta.query_selector(self.q_add);
+            let x_p = meta.query_advice(self.x_p, Rotation::cur());
+            let y_p = meta.query_advice(self.y_p, Rotation::cur());
+            let x_q = meta.query_advice(self.x_qr, Rotation::cur());
+            let y_q = meta.query_advice(self.y_qr, Rotation::cur());
+            let x_r = meta.query_advice(self.x_qr, Rotation::next());
+            let y_r = meta.query_advice(self.y_qr, Rotation::next());
+            let lambda = meta.query_advice(self.lambda, Rotation::cur());
+
+            // α = inv0(x_q - x_p)
+            let alpha = meta.query_advice(self.alpha, Rotation::cur());
+            // β = inv0(x_p)
+            let beta = meta.query_advice(self.beta, Rotation::cur());
+            // γ = inv0(x_q)
+            let gamma = meta.query_advice(self.gamma, Rotation::cur());
+            // δ = inv0(y_p + y_q) if x_q = x_p, 0 otherwise
+            let delta = meta.query_advice(self.delta, Rotation::cur());
+
+            // Useful composite expressions
+            // α ⋅(x_q - x_p)
+            let if_alpha = (x_q.clone() - x_p.clone()) * alpha;
+            // β ⋅ x_p
+            let if_beta = x_p.clone() * beta;
+            // γ ⋅ x_q
+            let if_gamma = x_q.clone() * gamma;
+            // δ ⋅(y_p + y_q)
+            let if_delta = (y_q.clone() + y_p.clone()) * delta;
+
+            // Useful constants
+            let one = Expression::Constant(pallas::Base::one());
+            let two = Expression::Constant(pallas::Base::from_u64(2));
+            let three = Expression::Constant(pallas::Base::from_u64(3));
+
+            // (x_q − x_p)⋅((x_q − x_p)⋅λ − (y_q−y_p)) = 0
+            let poly1 = {
+                let x_q_minus_x_p = x_q.clone() - x_p.clone(); // (x_q − x_p)
+
+                let y_q_minus_y_p = y_q.clone() - y_p.clone(); // (y_q − y_p)
+                let incomplete = x_q_minus_x_p.clone() * lambda.clone() - y_q_minus_y_p; // (x_q − x_p)⋅λ − (y_q−y_p)
+
+                // q_add ⋅(x_q − x_p)⋅((x_q − x_p)⋅λ − (y_q−y_p))
+                x_q_minus_x_p * incomplete
+            };
+
+            // (1 - (x_q - x_p)⋅α)⋅(2y_p ⋅λ - 3x_p^2) = 0
+            let poly2 = {
+                let three_x_p_sq = three * x_p.clone().square(); // 3x_p^2
+                let two_y_p = two * y_p.clone(); // 2y_p
+                let tangent_line = two_y_p * lambda.clone() - three_x_p_sq; // (2y_p ⋅λ - 3x_p^2)
+
+                // q_add ⋅(1 - (x_q - x_p)⋅α)⋅(2y_p ⋅λ - 3x_p^2)
+                (one.clone() - if_alpha.clone()) * tangent_line
+            };
+
+            // x_p⋅x_q⋅(x_q - x_p)⋅(λ^2 - x_p - x_q - x_r) = 0
+            let secant_line = lambda.clone().square() - x_p.clone() - x_q.clone() - x_r.clone(); // (λ^2 - x_p - x_q - x_r)
+            let poly3 = {
+                let x_q_minus_x_p = x_q.clone() - x_p.clone(); // (x_q - x_p)
+
+                // x_p⋅x_q⋅(x_q - x_p)⋅(λ^2 - x_p - x_q - x_r)
+                x_p.clone() * x_q.clone() * x_q_minus_x_p * secant_line.clone()
+            };
+
+            // x_p⋅x_q⋅(x_q - x_p)⋅(λ ⋅(x_p - x_r) - y_p - y_r) = 0
+            let poly4 = {
+                let x_q_minus_x_p = x_q.clone() - x_p.clone(); // (x_q - x_p)
+                let x_p_minus_x_r = x_p.clone() - x_r.clone(); // (x_p - x_r)
+
+                // x_p⋅x_q⋅(x_q - x_p)⋅(λ ⋅(x_p - x_r) - y_p - y_r)
+                x_p.clone()
+                    * x_q.clone()
+                    * x_q_minus_x_p
+                    * (lambda.clone() * x_p_minus_x_r - y_p.clone() - y_r.clone())
+            };
+
+            // x_p⋅x_q⋅(y_q + y_p)⋅(λ^2 - x_p - x_q - x_r) = 0
+            let poly5 = {
+                let y_q_plus_y_p = y_q.clone() + y_p.clone(); // (y_q + y_p)
+
+                // x_p⋅x_q⋅(y_q + y_p)⋅(λ^2 - x_p - x_q - x_r)
+                x_p.clone() * x_q.clone() * y_q_plus_y_p * secant_line
+            };
+
+            // x_p⋅x_q⋅(y_q + y_p)⋅(λ ⋅(x_p - x_r) - y_p - y_r) = 0
+            let poly6 = {
+                let y_q_plus_y_p = y_q.clone() + y_p.clone(); // (y_q + y_p)
+                let x_p_minus_x_r = x_p.clone() - x_r.clone(); // (x_p - x_r)
+
+                // x_p⋅x_q⋅(y_q + y_p)⋅(λ ⋅(x_p - x_r) - y_p - y_r)
+                x_p.clone()
+                    * x_q.clone()
+                    * y_q_plus_y_p
+                    * (lambda * x_p_minus_x_r - y_p.clone() - y_r.clone())
+            };
+
+            // (1 - x_p * β) * (x_r - x_q) = 0
+            let poly7 = (one.clone() - if_beta.clone()) * (x_r.clone() - x_q);
+
+            // (1 - x_p * β) * (y_r - y_q) = 0
+            let poly8 = (one.clone() - if_beta) * (y_r.clone() - y_q);
+
+            // (1 - x_q * γ) * (x_r - x_p) = 0
+            let poly9 = (one.clone() - if_gamma.clone()) * (x_r.clone() - x_p);
+
+            // (1 - x_q * γ) * (y_r - y_p) = 0
+            let poly10 = (one.clone() - if_gamma) * (y_r.clone() - y_p);
+
+            // ((1 - (x_q - x_p) * α - (y_q + y_p) * δ)) * x_r
+            let poly11 = (one.clone() - if_alpha.clone() - if_delta.clone()) * x_r;
+
+            // ((1 - (x_q - x_p) * α - (y_q + y_p) * δ)) * y_r
+            let poly12 = (one - if_alpha - if_delta) * y_r;
+
+            array::IntoIter::new([
+                poly1, poly2, poly3, poly4, poly5, poly6, poly7, poly8, poly9, poly10, poly11,
+                poly12,
+            ])
+            .map(move |poly| q_add.clone() * poly)
+        });
+    }
+
+    pub(super) fn assign_region(
+        &self,
+        p: &EccPoint,
+        q: &EccPoint,
+        offset: usize,
+        region: &mut Region<'_, pallas::Base>,
+    ) -> Result<EccPoint, Error> {
+        // Enable `q_add` selector
+        self.q_add.enable(region, offset)?;
+
+        // Copy point `p` into `x_p`, `y_p` columns
+        copy(region, || "x_p", self.x_p, offset, &p.x)?;
+        copy(region, || "y_p", self.y_p, offset, &p.y)?;
+
+        // Copy point `q` into `x_qr`, `y_qr` columns
+        copy(region, || "x_q", self.x_qr, offset, &q.x)?;
+        copy(region, || "y_q", self.y_qr, offset, &q.y)?;
+
+        let (x_p, y_p) = (p.x.value(), p.y.value());
+        let (x_q, y_q) = (q.x.value(), q.y.value());
+
+        //   [alpha, beta, gamma, delta]
+        // = [inv0(x_q - x_p), inv0(x_p), inv0(x_q), inv0(y_q + y_p)]
+        // where inv0(x) = 0 if x = 0, 1/x otherwise.
+        //
+        let (alpha, beta, gamma, delta) = {
+            let inverses = x_p
+                .zip(x_q)
+                .zip(y_p)
+                .zip(y_q)
+                .map(|(((x_p, x_q), y_p), y_q)| {
+                    let alpha = x_q - x_p;
+                    let beta = x_p;
+                    let gamma = x_q;
+                    let delta = y_q + y_p;
+
+                    let mut inverses = [alpha, beta, gamma, delta];
+                    inverses.batch_invert();
+                    inverses
+                });
+
+            if let Some([alpha, beta, gamma, delta]) = inverses {
+                (Some(alpha), Some(beta), Some(gamma), Some(delta))
+            } else {
+                (None, None, None, None)
+            }
+        };
+
+        // Assign α = inv0(x_q - x_p)
+        region.assign_advice(
+            || "α",
+            self.alpha,
+            offset,
+            || alpha.ok_or(Error::SynthesisError),
+        )?;
+
+        // Assign β = inv0(x_p)
+        region.assign_advice(
+            || "β",
+            self.beta,
+            offset,
+            || beta.ok_or(Error::SynthesisError),
+        )?;
+
+        // Assign γ = inv0(x_q)
+        region.assign_advice(
+            || "γ",
+            self.gamma,
+            offset,
+            || gamma.ok_or(Error::SynthesisError),
+        )?;
+
+        // Assign δ = inv0(y_q + y_p) if x_q = x_p, 0 otherwise
+        region.assign_advice(
+            || "δ",
+            self.delta,
+            offset,
+            || {
+                let x_p = x_p.ok_or(Error::SynthesisError)?;
+                let x_q = x_q.ok_or(Error::SynthesisError)?;
+
+                if x_q == x_p {
+                    delta.ok_or(Error::SynthesisError)
+                } else {
+                    Ok(pallas::Base::zero())
+                }
+            },
+        )?;
+
+        #[allow(clippy::collapsible_else_if)]
+        // Assign lambda
+        let lambda =
+            x_p.zip(y_p)
+                .zip(x_q)
+                .zip(y_q)
+                .zip(alpha)
+                .map(|((((x_p, y_p), x_q), y_q), alpha)| {
+                    if x_q != x_p {
+                        // λ = (y_q - y_p)/(x_q - x_p)
+                        // Here, alpha = inv0(x_q - x_p), which suffices since we
+                        // know that x_q != x_p in this branch.
+                        (y_q - y_p) * alpha
+                    } else {
+                        if y_p != pallas::Base::zero() {
+                            // 3(x_p)^2
+                            let three_x_p_sq = pallas::Base::from_u64(3) * x_p.square();
+                            // 1 / 2(y_p)
+                            let inv_two_y_p = y_p.invert().unwrap() * pallas::Base::TWO_INV;
+                            // λ = 3(x_p)^2 / 2(y_p)
+                            three_x_p_sq * inv_two_y_p
+                        } else {
+                            pallas::Base::zero()
+                        }
+                    }
+                });
+        region.assign_advice(
+            || "λ",
+            self.lambda,
+            offset,
+            || lambda.ok_or(Error::SynthesisError),
+        )?;
+
+        // Calculate (x_r, y_r)
+        let r =
+            x_p.zip(y_p)
+                .zip(x_q)
+                .zip(y_q)
+                .zip(lambda)
+                .map(|((((x_p, y_p), x_q), y_q), lambda)| {
+                    {
+                        if x_p == pallas::Base::zero() {
+                            // 0 + Q = Q
+                            (x_q, y_q)
+                        } else if x_q == pallas::Base::zero() {
+                            // P + 0 = P
+                            (x_p, y_p)
+                        } else if (x_q == x_p) && (y_q == -y_p) {
+                            // P + (-P) maps to (0,0)
+                            (pallas::Base::zero(), pallas::Base::zero())
+                        } else {
+                            // x_r = λ^2 - x_p - x_q
+                            let x_r = lambda.square() - x_p - x_q;
+                            // y_r = λ(x_p - x_r) - y_p
+                            let y_r = lambda * (x_p - x_r) - y_p;
+                            (x_r, y_r)
+                        }
+                    }
+                });
+
+        // Assign x_r
+        let x_r = r.map(|r| r.0);
+        let x_r_cell = region.assign_advice(
+            || "x_r",
+            self.x_qr,
+            offset + 1,
+            || x_r.ok_or(Error::SynthesisError),
+        )?;
+
+        // Assign y_r
+        let y_r = r.map(|r| r.1);
+        let y_r_cell = region.assign_advice(
+            || "y_r",
+            self.y_qr,
+            offset + 1,
+            || y_r.ok_or(Error::SynthesisError),
+        )?;
+
+        let result = EccPoint {
+            x: CellValue::<pallas::Base>::new(x_r_cell, x_r),
+            y: CellValue::<pallas::Base>::new(y_r_cell, y_r),
+        };
+
+        #[cfg(test)]
+        // Check that the correct sum is obtained.
+        {
+            use group::Curve;
+
+            let p = p.point();
+            let q = q.point();
+            let real_sum = p.zip(q).map(|(p, q)| p + q);
+            let result = result.point();
+
+            if let (Some(real_sum), Some(result)) = (real_sum, result) {
+                assert_eq!(real_sum.to_affine(), result);
+            }
+        }
+
+        Ok(result)
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+    use group::{prime::PrimeCurveAffine, Curve};
+    use halo2::{circuit::Layouter, plonk::Error};
+    use pasta_curves::{arithmetic::CurveExt, pallas};
+
+    use crate::circuit::gadget::ecc::{EccInstructions, Point};
+
+    #[allow(clippy::too_many_arguments)]
+    pub fn test_add<EccChip: EccInstructions<pallas::Affine> + Clone + Eq + std::fmt::Debug>(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+        zero: &Point<pallas::Affine, EccChip>,
+        p_val: pallas::Affine,
+        p: &Point<pallas::Affine, EccChip>,
+        q_val: pallas::Affine,
+        q: &Point<pallas::Affine, EccChip>,
+        p_neg: &Point<pallas::Affine, EccChip>,
+    ) -> Result<(), Error> {
+        // Make sure P and Q are not the same point.
+        assert_ne!(p_val, q_val);
+
+        // Check complete addition P + (-P)
+        {
+            let result = p.add(layouter.namespace(|| "P + (-P)"), p_neg)?;
+            result.constrain_equal(layouter.namespace(|| "P + (-P) = 𝒪"), zero)?;
+        }
+
+        // Check complete addition 𝒪 + 𝒪
+        {
+            let result = zero.add(layouter.namespace(|| "𝒪 + 𝒪"), zero)?;
+            result.constrain_equal(layouter.namespace(|| "𝒪 + 𝒪 = 𝒪"), zero)?;
+        }
+
+        // Check P + Q
+        {
+            let result = p.add(layouter.namespace(|| "P + Q"), q)?;
+            let witnessed_result = Point::new(
+                chip.clone(),
+                layouter.namespace(|| "witnessed P + Q"),
+                Some((p_val + q_val).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain P + Q"), &witnessed_result)?;
+        }
+
+        // P + P
+        {
+            let result = p.add(layouter.namespace(|| "P + P"), p)?;
+            let witnessed_result = Point::new(
+                chip.clone(),
+                layouter.namespace(|| "witnessed P + P"),
+                Some((p_val + p_val).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain P + P"), &witnessed_result)?;
+        }
+
+        // P + 𝒪
+        {
+            let result = p.add(layouter.namespace(|| "P + 𝒪"), zero)?;
+            result.constrain_equal(layouter.namespace(|| "P + 𝒪 = P"), p)?;
+        }
+
+        // 𝒪 + P
+        {
+            let result = zero.add(layouter.namespace(|| "𝒪 + P"), p)?;
+            result.constrain_equal(layouter.namespace(|| "𝒪 + P = P"), p)?;
+        }
+
+        // (x, y) + (ζx, y) should behave like normal P + Q.
+        let endo_p = p_val.to_curve().endo();
+        let endo_p = Point::new(
+            chip.clone(),
+            layouter.namespace(|| "endo(P)"),
+            Some(endo_p.to_affine()),
+        )?;
+        p.add(layouter.namespace(|| "P + endo(P)"), &endo_p)?;
+
+        // (x, y) + (ζx, -y) should also behave like normal P + Q.
+        let endo_p_neg = (-p_val).to_curve().endo();
+        let endo_p_neg = Point::new(
+            chip.clone(),
+            layouter.namespace(|| "endo(-P)"),
+            Some(endo_p_neg.to_affine()),
+        )?;
+        p.add(layouter.namespace(|| "P + endo(-P)"), &endo_p_neg)?;
+
+        // (x, y) + ((ζ^2)x, y)
+        let endo_2_p = p_val.to_curve().endo().endo();
+        let endo_2_p = Point::new(
+            chip.clone(),
+            layouter.namespace(|| "endo^2(P)"),
+            Some(endo_2_p.to_affine()),
+        )?;
+        p.add(layouter.namespace(|| "P + endo^2(P)"), &endo_2_p)?;
+
+        // (x, y) + ((ζ^2)x, -y)
+        let endo_2_p_neg = (-p_val).to_curve().endo().endo();
+        let endo_2_p_neg = Point::new(
+            chip,
+            layouter.namespace(|| "endo^2(-P)"),
+            Some(endo_2_p_neg.to_affine()),
+        )?;
+        p.add(layouter.namespace(|| "P + endo^2(-P)"), &endo_2_p_neg)?;
+
+        Ok(())
+    }
+}

+ 199 - 0
examples/halo2/src/circuit/gadget/ecc/chip/add_incomplete.rs

@@ -0,0 +1,199 @@
+use std::{array, collections::HashSet};
+
+use super::{copy, CellValue, EccConfig, EccPoint, Var};
+use group::Curve;
+use halo2::{
+    circuit::Region,
+    plonk::{Advice, Column, ConstraintSystem, Error, Selector},
+    poly::Rotation,
+};
+use pasta_curves::{arithmetic::CurveAffine, pallas};
+
+#[derive(Clone, Debug)]
+pub struct Config {
+    q_add_incomplete: Selector,
+    // x-coordinate of P in P + Q = R
+    pub x_p: Column<Advice>,
+    // y-coordinate of P in P + Q = R
+    pub y_p: Column<Advice>,
+    // x-coordinate of Q or R in P + Q = R
+    pub x_qr: Column<Advice>,
+    // y-coordinate of Q or R in P + Q = R
+    pub y_qr: Column<Advice>,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(ecc_config: &EccConfig) -> Self {
+        Self {
+            q_add_incomplete: ecc_config.q_add_incomplete,
+            x_p: ecc_config.advices[0],
+            y_p: ecc_config.advices[1],
+            x_qr: ecc_config.advices[2],
+            y_qr: ecc_config.advices[3],
+        }
+    }
+}
+
+impl Config {
+    pub(crate) fn advice_columns(&self) -> HashSet<Column<Advice>> {
+        core::array::IntoIter::new([self.x_p, self.y_p, self.x_qr, self.y_qr]).collect()
+    }
+
+    pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate("incomplete addition gates", |meta| {
+            let q_add_incomplete = meta.query_selector(self.q_add_incomplete);
+            let x_p = meta.query_advice(self.x_p, Rotation::cur());
+            let y_p = meta.query_advice(self.y_p, Rotation::cur());
+            let x_q = meta.query_advice(self.x_qr, Rotation::cur());
+            let y_q = meta.query_advice(self.y_qr, Rotation::cur());
+            let x_r = meta.query_advice(self.x_qr, Rotation::next());
+            let y_r = meta.query_advice(self.y_qr, Rotation::next());
+
+            // (x_r + x_q + x_p)⋅(x_p − x_q)^2 − (y_p − y_q)^2 = 0
+            let poly1 = {
+                (x_r.clone() + x_q.clone() + x_p.clone())
+                    * (x_p.clone() - x_q.clone())
+                    * (x_p.clone() - x_q.clone())
+                    - (y_p.clone() - y_q.clone()).square()
+            };
+
+            // (y_r + y_q)(x_p − x_q) − (y_p − y_q)(x_q − x_r) = 0
+            let poly2 = (y_r + y_q.clone()) * (x_p - x_q.clone()) - (y_p - y_q) * (x_q - x_r);
+
+            array::IntoIter::new([poly1, poly2]).map(move |poly| q_add_incomplete.clone() * poly)
+        });
+    }
+
+    pub(super) fn assign_region(
+        &self,
+        p: &EccPoint,
+        q: &EccPoint,
+        offset: usize,
+        region: &mut Region<'_, pallas::Base>,
+    ) -> Result<EccPoint, Error> {
+        // Enable `q_add_incomplete` selector
+        self.q_add_incomplete.enable(region, offset)?;
+
+        // Handle exceptional cases
+        let (x_p, y_p) = (p.x.value(), p.y.value());
+        let (x_q, y_q) = (q.x.value(), q.y.value());
+        x_p.zip(y_p)
+            .zip(x_q)
+            .zip(y_q)
+            .map(|(((x_p, y_p), x_q), y_q)| {
+                // P is point at infinity
+                if (x_p == pallas::Base::zero() && y_p == pallas::Base::zero())
+                // Q is point at infinity
+                || (x_q == pallas::Base::zero() && y_q == pallas::Base::zero())
+                // x_p = x_q
+                || (x_p == x_q)
+                {
+                    Err(Error::SynthesisError)
+                } else {
+                    Ok(())
+                }
+            })
+            .transpose()?;
+
+        // Copy point `p` into `x_p`, `y_p` columns
+        copy(region, || "x_p", self.x_p, offset, &p.x)?;
+        copy(region, || "y_p", self.y_p, offset, &p.y)?;
+
+        // Copy point `q` into `x_qr`, `y_qr` columns
+        copy(region, || "x_q", self.x_qr, offset, &q.x)?;
+        copy(region, || "y_q", self.y_qr, offset, &q.y)?;
+
+        // Compute the sum `P + Q = R`
+        let r = {
+            let p = p.point();
+            let q = q.point();
+            let r = p
+                .zip(q)
+                .map(|(p, q)| (p + q).to_affine().coordinates().unwrap());
+            let r_x = r.map(|r| *r.x());
+            let r_y = r.map(|r| *r.y());
+
+            (r_x, r_y)
+        };
+
+        // Assign the sum to `x_qr`, `y_qr` columns in the next row
+        let x_r = r.0;
+        let x_r_var = region.assign_advice(
+            || "x_r",
+            self.x_qr,
+            offset + 1,
+            || x_r.ok_or(Error::SynthesisError),
+        )?;
+
+        let y_r = r.1;
+        let y_r_var = region.assign_advice(
+            || "y_r",
+            self.y_qr,
+            offset + 1,
+            || y_r.ok_or(Error::SynthesisError),
+        )?;
+
+        let result = EccPoint {
+            x: CellValue::<pallas::Base>::new(x_r_var, x_r),
+            y: CellValue::<pallas::Base>::new(y_r_var, y_r),
+        };
+
+        Ok(result)
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+    use group::Curve;
+    use halo2::{circuit::Layouter, plonk::Error};
+    use pasta_curves::pallas;
+
+    use crate::circuit::gadget::ecc::{EccInstructions, Point};
+
+    #[allow(clippy::too_many_arguments)]
+    pub fn test_add_incomplete<
+        EccChip: EccInstructions<pallas::Affine> + Clone + Eq + std::fmt::Debug,
+    >(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+        zero: &Point<pallas::Affine, EccChip>,
+        p_val: pallas::Affine,
+        p: &Point<pallas::Affine, EccChip>,
+        q_val: pallas::Affine,
+        q: &Point<pallas::Affine, EccChip>,
+        p_neg: &Point<pallas::Affine, EccChip>,
+    ) -> Result<(), Error> {
+        // P + Q
+        {
+            let result = p.add_incomplete(layouter.namespace(|| "P + Q"), q)?;
+            let witnessed_result = Point::new(
+                chip,
+                layouter.namespace(|| "witnessed P + Q"),
+                Some((p_val + q_val).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain P + Q"), &witnessed_result)?;
+        }
+
+        // P + P should return an error
+        p.add_incomplete(layouter.namespace(|| "P + P"), p)
+            .expect_err("P + P should return an error");
+
+        // P + (-P) should return an error
+        p.add_incomplete(layouter.namespace(|| "P + (-P)"), p_neg)
+            .expect_err("P + (-P) should return an error");
+
+        // P + 𝒪 should return an error
+        p.add_incomplete(layouter.namespace(|| "P + 𝒪"), zero)
+            .expect_err("P + 0 should return an error");
+
+        // 𝒪 + P should return an error
+        zero.add_incomplete(layouter.namespace(|| "𝒪 + P"), p)
+            .expect_err("0 + P should return an error");
+
+        // 𝒪 + 𝒪 should return an error
+        zero.add_incomplete(layouter.namespace(|| "𝒪 + 𝒪"), zero)
+            .expect_err("𝒪 + 𝒪 should return an error");
+
+        Ok(())
+    }
+}

+ 551 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul.rs

@@ -0,0 +1,551 @@
+use super::{add, CellValue, EccConfig, EccPoint, Var};
+use crate::{circuit::gadget::utilities::copy, constants::T_Q};
+use std::ops::{Deref, Range};
+
+use bigint::U256;
+use ff::PrimeField;
+use halo2::{
+    arithmetic::FieldExt,
+    circuit::{Layouter, Region},
+    plonk::{ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+
+use pasta_curves::pallas;
+
+mod complete;
+mod incomplete;
+mod overflow;
+
+/// Number of bits for which complete addition needs to be used in variable-base
+/// scalar multiplication
+const NUM_COMPLETE_BITS: usize = 3;
+
+// Bits used in incomplete addition. k_{254} to k_{4} inclusive
+const INCOMPLETE_LEN: usize = pallas::Scalar::NUM_BITS as usize - 1 - NUM_COMPLETE_BITS;
+const INCOMPLETE_RANGE: Range<usize> = 0..INCOMPLETE_LEN;
+
+// Bits k_{254} to k_{4} inclusive are used in incomplete addition.
+// The `hi` half is k_{254} to k_{130} inclusive (length 125 bits).
+// (It is a coincidence that k_{130} matches the boundary of the
+// overflow check described in [the book](https://zcash.github.io/halo2/design/gadgets/ecc/var-base-scalar-mul.html#overflow-check).)
+const INCOMPLETE_HI_RANGE: Range<usize> = 0..(INCOMPLETE_LEN / 2);
+
+// Bits k_{254} to k_{4} inclusive are used in incomplete addition.
+// The `lo` half is k_{129} to k_{4} inclusive (length 126 bits).
+const INCOMPLETE_LO_RANGE: Range<usize> = (INCOMPLETE_LEN / 2)..INCOMPLETE_LEN;
+
+// Bits k_{3} to k_{1} inclusive are used in complete addition.
+// Bit k_{0} is handled separately.
+const COMPLETE_RANGE: Range<usize> = INCOMPLETE_LEN..(INCOMPLETE_LEN + NUM_COMPLETE_BITS);
+
+pub struct Config {
+    // Selector used to check switching logic on LSB
+    q_mul_lsb: Selector,
+    // Configuration used in complete addition
+    add_config: add::Config,
+    // Configuration used for `hi` bits of the scalar
+    hi_config: incomplete::HiConfig,
+    // Configuration used for `lo` bits of the scalar
+    lo_config: incomplete::LoConfig,
+    // Configuration used for complete addition part of double-and-add algorithm
+    complete_config: complete::Config,
+    // Configuration used to check for overflow
+    overflow_config: overflow::Config,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(ecc_config: &EccConfig) -> Self {
+        let config = Self {
+            q_mul_lsb: ecc_config.q_mul_lsb,
+            add_config: ecc_config.into(),
+            hi_config: ecc_config.into(),
+            lo_config: ecc_config.into(),
+            complete_config: ecc_config.into(),
+            overflow_config: ecc_config.into(),
+        };
+
+        assert_eq!(
+            config.hi_config.x_p, config.lo_config.x_p,
+            "x_p is shared across hi and lo halves."
+        );
+        assert_eq!(
+            config.hi_config.y_p, config.lo_config.y_p,
+            "y_p is shared across hi and lo halves."
+        );
+
+        // For both hi_config and lo_config:
+        // z and lambda1 are assigned on the same row as the add_config output.
+        // Therefore, z and lambda1 must not overlap with add_config.x_qr, add_config.y_qr.
+        let add_config_outputs = config.add_config.output_columns();
+        for config in [&(*config.hi_config), &(*config.lo_config)].iter() {
+            assert!(
+                !add_config_outputs.contains(&config.z),
+                "incomplete config z cannot overlap with complete addition columns."
+            );
+            assert!(
+                !add_config_outputs.contains(&config.lambda1),
+                "incomplete config lambda1 cannot overlap with complete addition columns."
+            );
+        }
+
+        config
+    }
+}
+
+impl Config {
+    pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        // If `lsb` is 0, (x, y) = (x_p, -y_p). If `lsb` is 1, (x, y) = (0,0).
+        meta.create_gate("LSB check", |meta| {
+            let q_mul_lsb = meta.query_selector(self.q_mul_lsb);
+
+            let z_1 = meta.query_advice(self.complete_config.z_complete, Rotation::prev());
+            let z_0 = meta.query_advice(self.complete_config.z_complete, Rotation::cur());
+            let x_p = meta.query_advice(self.add_config.x_p, Rotation::prev());
+            let y_p = meta.query_advice(self.add_config.y_p, Rotation::prev());
+            let base_x = meta.query_advice(self.add_config.x_p, Rotation::cur());
+            let base_y = meta.query_advice(self.add_config.y_p, Rotation::cur());
+
+            //    z_0 = 2 * z_1 + k_0
+            // => k_0 = z_0 - 2 * z_1
+            let lsb = z_0 - z_1 * pallas::Base::from_u64(2);
+            let one_minus_lsb = Expression::Constant(pallas::Base::one()) - lsb.clone();
+
+            let bool_check = lsb.clone() * one_minus_lsb.clone();
+
+            // `lsb` = 0 => (x_p, y_p) = (x, -y)
+            // `lsb` = 1 => (x_p, y_p) = (0,0)
+            let lsb_x = (lsb.clone() * x_p.clone()) + one_minus_lsb.clone() * (x_p - base_x);
+            let lsb_y = (lsb * y_p.clone()) + one_minus_lsb * (y_p + base_y);
+
+            std::array::IntoIter::new([bool_check, lsb_x, lsb_y])
+                .map(move |poly| q_mul_lsb.clone() * poly)
+        });
+
+        self.hi_config.create_gate(meta);
+        self.lo_config.create_gate(meta);
+        self.complete_config.create_gate(meta);
+        self.overflow_config.create_gate(meta);
+    }
+
+    pub(super) fn assign(
+        &self,
+        mut layouter: impl Layouter<pallas::Base>,
+        alpha: CellValue<pallas::Base>,
+        base: &EccPoint,
+    ) -> Result<(EccPoint, CellValue<pallas::Base>), Error> {
+        let (result, zs): (EccPoint, Vec<Z<pallas::Base>>) = layouter.assign_region(
+            || "variable-base scalar mul",
+            |mut region| {
+                let offset = 0;
+                // Decompose `k = alpha + t_q` bitwise (big-endian bit order).
+                let bits = decompose_for_scalar_mul(alpha.value());
+
+                // Define ranges for each part of the algorithm.
+                let bits_incomplete_hi = &bits[INCOMPLETE_HI_RANGE];
+                let bits_incomplete_lo = &bits[INCOMPLETE_LO_RANGE];
+                let lsb = bits[pallas::Scalar::NUM_BITS as usize - 1];
+
+                // Initialize the accumulator `acc = [2]base`
+                let acc = self
+                    .add_config
+                    .assign_region(base, base, offset, &mut region)?;
+
+                // Increase the offset by 1 after complete addition.
+                let offset = offset + 1;
+
+                // Initialize the running sum for scalar decomposition to zero
+                let z_init = {
+                    let z_init_cell = region.assign_advice_from_constant(
+                        || "z_init = 0",
+                        self.hi_config.z,
+                        offset,
+                        pallas::Base::zero(),
+                    )?;
+
+                    Z(CellValue::new(z_init_cell, Some(pallas::Base::zero())))
+                };
+
+                // Double-and-add (incomplete addition) for the `hi` half of the scalar decomposition
+                let (x_a, y_a, zs_incomplete_hi) = self.hi_config.double_and_add(
+                    &mut region,
+                    offset,
+                    base,
+                    bits_incomplete_hi,
+                    (X(acc.x), Y(acc.y), z_init),
+                )?;
+
+                // Double-and-add (incomplete addition) for the `lo` half of the scalar decomposition
+                let z = zs_incomplete_hi.last().expect("should not be empty");
+                let (x_a, y_a, zs_incomplete_lo) = self.lo_config.double_and_add(
+                    &mut region,
+                    offset,
+                    base,
+                    bits_incomplete_lo,
+                    (x_a, y_a, *z),
+                )?;
+
+                // Move from incomplete addition to complete addition.
+                // Inside incomplete::double_and_add, the offset was increased once after initialization
+                // of the running sum.
+                // Then, the final assignment of double-and-add was made on row + offset + 1.
+                // Outside of incomplete addition, we must account for these offset increases by adding
+                // 2 to the incomplete addition length.
+                let offset = offset + INCOMPLETE_LO_RANGE.len() + 2;
+
+                // Complete addition
+                let (acc, zs_complete) = {
+                    let z = zs_incomplete_lo.last().expect("should not be empty");
+                    // Bits used in complete addition. k_{3} to k_{1} inclusive
+                    // The LSB k_{0} is handled separately.
+                    let bits_complete = &bits[COMPLETE_RANGE];
+                    self.complete_config.assign_region(
+                        &mut region,
+                        offset,
+                        bits_complete,
+                        base,
+                        x_a,
+                        y_a,
+                        *z,
+                    )?
+                };
+
+                // Each iteration of the complete addition uses two rows.
+                let offset = offset + COMPLETE_RANGE.len() * 2;
+
+                // Process the least significant bit
+                let z_1 = zs_complete.last().unwrap();
+                let (result, z_0) = self.process_lsb(&mut region, offset, base, acc, *z_1, lsb)?;
+
+                #[cfg(test)]
+                // Check that the correct multiple is obtained.
+                {
+                    use group::Curve;
+
+                    let base = base.point();
+                    let alpha = alpha
+                        .value()
+                        .map(|alpha| pallas::Scalar::from_bytes(&alpha.to_bytes()).unwrap());
+                    let real_mul = base.zip(alpha).map(|(base, alpha)| base * alpha);
+                    let result = result.point();
+
+                    if let (Some(real_mul), Some(result)) = (real_mul, result) {
+                        assert_eq!(real_mul.to_affine(), result);
+                    }
+                }
+
+                let zs = {
+                    let mut zs = std::iter::empty()
+                        .chain(Some(z_init))
+                        .chain(zs_incomplete_hi.into_iter())
+                        .chain(zs_incomplete_lo.into_iter())
+                        .chain(zs_complete.into_iter())
+                        .chain(Some(z_0))
+                        .collect::<Vec<_>>();
+                    assert_eq!(zs.len(), pallas::Scalar::NUM_BITS as usize + 1);
+
+                    // This reverses zs to give us [z_0, z_1, ..., z_{254}, z_{255}].
+                    zs.reverse();
+                    zs
+                };
+
+                Ok((result, zs))
+            },
+        )?;
+
+        self.overflow_config
+            .overflow_check(layouter.namespace(|| "overflow check"), alpha, &zs)?;
+
+        Ok((result, alpha))
+    }
+
+    /// Processes the final scalar bit `k_0`.
+    ///
+    /// Assumptions for this sub-region:
+    /// - `acc_x` and `acc_y` are assigned in row `offset` by the previous complete
+    ///   addition. They will be copied into themselves.
+    /// - `z_1 is assigned in row `offset` by the mul::complete region assignment. We only
+    ///   use its value here.
+    ///
+    /// `x_p` and `y_p` are assigned here, and then copied into themselves by the complete
+    /// addition subregion.
+    ///
+    /// ```text
+    /// | x_p  | y_p  | acc_x | acc_y | complete addition  | z_1 |
+    /// |base_x|base_y| res_x | res_y |   |   |    |   |   | z_0 | q_mul_lsb = 1
+    /// ```
+    fn process_lsb(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        base: &EccPoint,
+        acc: EccPoint,
+        z_1: Z<pallas::Base>,
+        lsb: Option<bool>,
+    ) -> Result<(EccPoint, Z<pallas::Base>), Error> {
+        // Enforce switching logic on LSB using a custom gate
+        self.q_mul_lsb.enable(region, offset + 1)?;
+
+        // z_1 has been assigned at (z_complete, offset).
+        // Assign z_0 = 2⋅z_1 + k_0
+        let z_0 = {
+            let z_0_val = z_1.value().zip(lsb).map(|(z_1, lsb)| {
+                let lsb = pallas::Base::from_u64(lsb as u64);
+                z_1 * pallas::Base::from_u64(2) + lsb
+            });
+            let z_0_cell = region.assign_advice(
+                || "z_0",
+                self.complete_config.z_complete,
+                offset + 1,
+                || z_0_val.ok_or(Error::SynthesisError),
+            )?;
+
+            Z(CellValue::new(z_0_cell, z_0_val))
+        };
+
+        // Copy in `base_x`, `base_y` to use in the LSB gate
+        copy(
+            region,
+            || "copy base_x",
+            self.add_config.x_p,
+            offset + 1,
+            &base.x(),
+        )?;
+        copy(
+            region,
+            || "copy base_y",
+            self.add_config.y_p,
+            offset + 1,
+            &base.y(),
+        )?;
+
+        // If `lsb` is 0, return `Acc + (-P)`. If `lsb` is 1, simply return `Acc + 0`.
+        let x = if let Some(lsb) = lsb {
+            if !lsb {
+                base.x.value()
+            } else {
+                Some(pallas::Base::zero())
+            }
+        } else {
+            None
+        };
+
+        let y = if let Some(lsb) = lsb {
+            if !lsb {
+                base.y.value().map(|y_p| -y_p)
+            } else {
+                Some(pallas::Base::zero())
+            }
+        } else {
+            None
+        };
+
+        let x_cell = region.assign_advice(
+            || "x",
+            self.add_config.x_p,
+            offset,
+            || x.ok_or(Error::SynthesisError),
+        )?;
+
+        let y_cell = region.assign_advice(
+            || "y",
+            self.add_config.y_p,
+            offset,
+            || y.ok_or(Error::SynthesisError),
+        )?;
+
+        let p = EccPoint {
+            x: CellValue::<pallas::Base>::new(x_cell, x),
+            y: CellValue::<pallas::Base>::new(y_cell, y),
+        };
+
+        // Return the result of the final complete addition as `[scalar]B`
+        let result = self.add_config.assign_region(&p, &acc, offset, region)?;
+
+        Ok((result, z_0))
+    }
+}
+
+#[derive(Clone, Debug)]
+// `x`-coordinate of the accumulator.
+struct X<F: FieldExt>(CellValue<F>);
+impl<F: FieldExt> Deref for X<F> {
+    type Target = CellValue<F>;
+
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+
+#[derive(Copy, Clone, Debug)]
+// `y`-coordinate of the accumulator.
+struct Y<F: FieldExt>(CellValue<F>);
+impl<F: FieldExt> Deref for Y<F> {
+    type Target = CellValue<F>;
+
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+
+#[derive(Copy, Clone, Debug)]
+// Cumulative sum `z` used to decompose the scalar.
+struct Z<F: FieldExt>(CellValue<F>);
+impl<F: FieldExt> Deref for Z<F> {
+    type Target = CellValue<F>;
+
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+
+fn decompose_for_scalar_mul(scalar: Option<pallas::Base>) -> Vec<Option<bool>> {
+    let bitstring = scalar.map(|scalar| {
+        // We use `k = scalar + t_q` in the double-and-add algorithm, where
+        // the scalar field `F_q = 2^254 + t_q`.
+        // Note that the addition `scalar + t_q` is not reduced.
+        //
+        let scalar = U256::from_little_endian(&scalar.to_bytes());
+        let t_q = U256::from_little_endian(&T_Q.to_le_bytes());
+        let k = scalar + t_q;
+
+        // Big-endian bit representation of `k`.
+        let bitstring: Vec<bool> = {
+            let mut le_bytes = [0u8; 32];
+            k.to_little_endian(&mut le_bytes);
+            le_bytes.iter().fold(Vec::new(), |mut bitstring, byte| {
+                let bits = (0..8)
+                    .map(|shift| (byte >> shift) % 2 == 1)
+                    .collect::<Vec<_>>();
+                bitstring.extend_from_slice(&bits);
+                bitstring
+            })
+        };
+
+        // Take the first 255 bits.
+        let mut bitstring = bitstring[0..pallas::Scalar::NUM_BITS as usize].to_vec();
+        bitstring.reverse();
+        bitstring
+    });
+
+    if let Some(bitstring) = bitstring {
+        bitstring.into_iter().map(Some).collect()
+    } else {
+        vec![None; pallas::Scalar::NUM_BITS as usize]
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+    use group::Curve;
+    use halo2::{
+        circuit::{Chip, Layouter},
+        plonk::Error,
+    };
+    use pasta_curves::{arithmetic::FieldExt, pallas};
+
+    use crate::circuit::gadget::{
+        ecc::{chip::EccChip, EccInstructions, Point},
+        utilities::UtilitiesInstructions,
+    };
+
+    pub fn test_mul(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+        zero: &Point<pallas::Affine, EccChip>,
+        p: &Point<pallas::Affine, EccChip>,
+        p_val: pallas::Affine,
+    ) -> Result<(), Error> {
+        let column = chip.config().advices[0];
+
+        fn constrain_equal<
+            EccChip: EccInstructions<pallas::Affine> + Clone + Eq + std::fmt::Debug,
+        >(
+            chip: EccChip,
+            mut layouter: impl Layouter<pallas::Base>,
+            base_val: pallas::Affine,
+            scalar_val: pallas::Base,
+            result: Point<pallas::Affine, EccChip>,
+        ) -> Result<(), Error> {
+            // Move scalar from base field into scalar field (which always fits
+            // for Pallas).
+            let scalar = pallas::Scalar::from_bytes(&scalar_val.to_bytes()).unwrap();
+            let expected = Point::new(
+                chip,
+                layouter.namespace(|| "expected point"),
+                Some((base_val * scalar).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain result"), &expected)
+        }
+
+        // [a]B
+        {
+            let scalar_val = pallas::Base::rand();
+            let (result, _) = {
+                let scalar = chip.load_private(
+                    layouter.namespace(|| "random scalar"),
+                    column,
+                    Some(scalar_val),
+                )?;
+                p.mul(layouter.namespace(|| "random [a]B"), &scalar)?
+            };
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "random [a]B"),
+                p_val,
+                scalar_val,
+                result,
+            )?;
+        }
+
+        // [a]𝒪 should return an error since variable-base scalar multiplication
+        // uses incomplete addition at the beginning of its double-and-add.
+        {
+            let scalar_val = pallas::Base::rand();
+            let scalar = chip.load_private(
+                layouter.namespace(|| "random scalar"),
+                column,
+                Some(scalar_val),
+            )?;
+            zero.mul(layouter.namespace(|| "[a]𝒪"), &scalar)
+                .expect_err("[a]𝒪 should return an error");
+        }
+
+        // [0]B should return (0,0) since variable-base scalar multiplication
+        // uses complete addition for the final bits of the scalar.
+        {
+            let scalar_val = pallas::Base::zero();
+            let (result, _) = {
+                let scalar =
+                    chip.load_private(layouter.namespace(|| "zero"), column, Some(scalar_val))?;
+                p.mul(layouter.namespace(|| "[0]B"), &scalar)?
+            };
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "[0]B"),
+                p_val,
+                scalar_val,
+                result,
+            )?;
+        }
+
+        // [-1]B (the largest possible base field element)
+        {
+            let scalar_val = -pallas::Base::one();
+            let (result, _) = {
+                let scalar =
+                    chip.load_private(layouter.namespace(|| "-1"), column, Some(scalar_val))?;
+                p.mul(layouter.namespace(|| "[-1]B"), &scalar)?
+            };
+            constrain_equal(
+                chip,
+                layouter.namespace(|| "[-1]B"),
+                p_val,
+                scalar_val,
+                result,
+            )?;
+        }
+
+        Ok(())
+    }
+}

+ 181 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul/complete.rs

@@ -0,0 +1,181 @@
+use super::super::{add, copy, CellValue, EccConfig, EccPoint, Var};
+use super::{COMPLETE_RANGE, X, Y, Z};
+
+use halo2::{
+    circuit::Region,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+
+use pasta_curves::{arithmetic::FieldExt, pallas};
+
+pub struct Config {
+    // Selector used to constrain the cells used in complete addition.
+    q_mul_decompose_var: Selector,
+    // Advice column used to decompose scalar in complete addition.
+    pub z_complete: Column<Advice>,
+    // Configuration used in complete addition
+    add_config: add::Config,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(ecc_config: &EccConfig) -> Self {
+        let config = Self {
+            q_mul_decompose_var: ecc_config.q_mul_decompose_var,
+            z_complete: ecc_config.advices[9],
+            add_config: ecc_config.into(),
+        };
+
+        let add_config_advices = config.add_config.advice_columns();
+        assert!(
+            !add_config_advices.contains(&config.z_complete),
+            "z_complete cannot overlap with complete addition columns."
+        );
+
+        config
+    }
+}
+
+impl Config {
+    /// Gate used to check scalar decomposition is correct.
+    /// This is used to check the bits used in complete addition, since the incomplete
+    /// addition gate (controlled by `q_mul`) already checks scalar decomposition for
+    /// the other bits.
+    pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate(
+            "Decompose scalar for complete bits of variable-base mul",
+            |meta| {
+                let q_mul_decompose_var = meta.query_selector(self.q_mul_decompose_var);
+                // z_{i + 1}
+                let z_prev = meta.query_advice(self.z_complete, Rotation::prev());
+                // z_i
+                let z_next = meta.query_advice(self.z_complete, Rotation::next());
+
+                // k_{i} = z_{i} - 2⋅z_{i+1}
+                let k = z_next - Expression::Constant(pallas::Base::from_u64(2)) * z_prev;
+                let k_minus_one = k.clone() - Expression::Constant(pallas::Base::one());
+                // (k_i) ⋅ (k_i - 1) = 0
+                let bool_check = k.clone() * k_minus_one.clone();
+
+                // base_y
+                let base_y = meta.query_advice(self.z_complete, Rotation::cur());
+                // y_p
+                let y_p = meta.query_advice(self.add_config.y_p, Rotation::prev());
+
+                // k_i = 0 => y_p = -base_y
+                // k_i = 1 => y_p = base_y
+                let y_switch = k_minus_one * (base_y.clone() + y_p.clone()) + k * (base_y - y_p);
+
+                std::array::IntoIter::new([("bool_check", bool_check), ("y_switch", y_switch)])
+                    .map(move |(name, poly)| (name, q_mul_decompose_var.clone() * poly))
+            },
+        );
+    }
+
+    #[allow(clippy::type_complexity)]
+    #[allow(non_snake_case)]
+    #[allow(clippy::too_many_arguments)]
+    pub(super) fn assign_region(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        bits: &[Option<bool>],
+        base: &EccPoint,
+        x_a: X<pallas::Base>,
+        y_a: Y<pallas::Base>,
+        z: Z<pallas::Base>,
+    ) -> Result<(EccPoint, Vec<Z<pallas::Base>>), Error> {
+        // Make sure we have the correct number of bits for the complete addition
+        // part of variable-base scalar mul.
+        assert_eq!(bits.len(), COMPLETE_RANGE.len());
+
+        // Enable selectors for complete range
+        for row in 0..COMPLETE_RANGE.len() {
+            // Each iteration uses 2 rows (two complete additions)
+            let row = 2 * row;
+            // Check scalar decomposition for each iteration. Since the gate enabled by
+            // `q_mul_decompose_var` queries the previous row, we enable the selector on
+            // `row + offset + 1` (instead of `row + offset`).
+            self.q_mul_decompose_var.enable(region, row + offset + 1)?;
+        }
+
+        // Use x_a, y_a output from incomplete addition
+        let mut acc = EccPoint { x: *x_a, y: *y_a };
+
+        // Copy running sum `z` from incomplete addition
+        let mut z = {
+            let z = copy(
+                region,
+                || "Copy `z` running sum from incomplete addition",
+                self.z_complete,
+                offset,
+                &z,
+            )?;
+            Z(z)
+        };
+
+        // Store interstitial running sum `z`s in vector
+        let mut zs: Vec<Z<pallas::Base>> = Vec::with_capacity(bits.len());
+
+        // Complete addition
+        for (iter, k) in bits.iter().enumerate() {
+            // Each iteration uses 2 rows (two complete additions)
+            let row = 2 * iter;
+
+            // Update `z`.
+            z = {
+                // z_next = z_cur * 2 + k_next
+                let z_val = z.value().zip(k.as_ref()).map(|(z_val, k)| {
+                    pallas::Base::from_u64(2) * z_val + pallas::Base::from_u64(*k as u64)
+                });
+                let z_cell = region.assign_advice(
+                    || "z",
+                    self.z_complete,
+                    row + offset + 2,
+                    || z_val.ok_or(Error::SynthesisError),
+                )?;
+                Z(CellValue::new(z_cell, z_val))
+            };
+            zs.push(z);
+
+            // Assign `y_p` for complete addition.
+            let y_p = {
+                let base_y = copy(
+                    region,
+                    || "Copy `base.y`",
+                    self.z_complete,
+                    row + offset + 1,
+                    &base.y,
+                )?;
+
+                // If the bit is set, use `y`; if the bit is not set, use `-y`
+                let y_p = base_y
+                    .value()
+                    .zip(k.as_ref())
+                    .map(|(base_y, k)| if !k { -base_y } else { base_y });
+
+                let y_p_cell = region.assign_advice(
+                    || "y_p",
+                    self.add_config.y_p,
+                    row + offset,
+                    || y_p.ok_or(Error::SynthesisError),
+                )?;
+                CellValue::<pallas::Base>::new(y_p_cell, y_p)
+            };
+
+            // U = P if the bit is set; U = -P is the bit is not set.
+            let U = EccPoint { x: base.x, y: y_p };
+
+            // Acc + U
+            let tmp_acc = self
+                .add_config
+                .assign_region(&U, &acc, row + offset, region)?;
+
+            // Acc + U + Acc
+            acc = self
+                .add_config
+                .assign_region(&acc, &tmp_acc, row + offset + 1, region)?;
+        }
+        Ok((acc, zs))
+    }
+}

+ 370 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul/incomplete.rs

@@ -0,0 +1,370 @@
+use std::ops::Deref;
+
+use super::super::{copy, CellValue, EccConfig, EccPoint, Var};
+use super::{INCOMPLETE_HI_RANGE, INCOMPLETE_LO_RANGE, X, Y, Z};
+use ff::Field;
+use halo2::{
+    circuit::Region,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector, VirtualCells},
+    poly::Rotation,
+};
+
+use pasta_curves::{arithmetic::FieldExt, pallas};
+
+#[derive(Copy, Clone)]
+pub(super) struct Config {
+    // Number of bits covered by this incomplete range.
+    num_bits: usize,
+    // Selectors used to constrain the cells used in incomplete addition.
+    pub(super) q_mul: (Selector, Selector, Selector),
+    // Cumulative sum used to decompose the scalar.
+    pub(super) z: Column<Advice>,
+    // x-coordinate of the accumulator in each double-and-add iteration.
+    pub(super) x_a: Column<Advice>,
+    // x-coordinate of the point being added in each double-and-add iteration.
+    pub(super) x_p: Column<Advice>,
+    // y-coordinate of the point being added in each double-and-add iteration.
+    pub(super) y_p: Column<Advice>,
+    // lambda1 in each double-and-add iteration.
+    pub(super) lambda1: Column<Advice>,
+    // lambda2 in each double-and-add iteration.
+    pub(super) lambda2: Column<Advice>,
+}
+
+// Columns used in processing the `hi` bits of the scalar.
+// `x_p, y_p` are shared across the `hi` and `lo` halves.
+pub(super) struct HiConfig(Config);
+impl From<&EccConfig> for HiConfig {
+    fn from(ecc_config: &EccConfig) -> Self {
+        let config = Config {
+            num_bits: INCOMPLETE_HI_RANGE.len(),
+            q_mul: ecc_config.q_mul_hi,
+            x_p: ecc_config.advices[0],
+            y_p: ecc_config.advices[1],
+            z: ecc_config.advices[9],
+            x_a: ecc_config.advices[3],
+            lambda1: ecc_config.advices[4],
+            lambda2: ecc_config.advices[5],
+        };
+        Self(config)
+    }
+}
+impl Deref for HiConfig {
+    type Target = Config;
+
+    fn deref(&self) -> &Config {
+        &self.0
+    }
+}
+
+// Columns used in processing the `lo` bits of the scalar.
+// `x_p, y_p` are shared across the `hi` and `lo` halves.
+pub(super) struct LoConfig(Config);
+impl From<&EccConfig> for LoConfig {
+    fn from(ecc_config: &EccConfig) -> Self {
+        let config = Config {
+            num_bits: INCOMPLETE_LO_RANGE.len(),
+            q_mul: ecc_config.q_mul_lo,
+            x_p: ecc_config.advices[0],
+            y_p: ecc_config.advices[1],
+            z: ecc_config.advices[6],
+            x_a: ecc_config.advices[7],
+            lambda1: ecc_config.advices[8],
+            lambda2: ecc_config.advices[2],
+        };
+        Self(config)
+    }
+}
+impl Deref for LoConfig {
+    type Target = Config;
+
+    fn deref(&self) -> &Config {
+        &self.0
+    }
+}
+
+impl Config {
+    // Gate for incomplete addition part of variable-base scalar multiplication.
+    pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        // Closure to compute x_{R,i} = λ_{1,i}^2 - x_{A,i} - x_{P,i}
+        let x_r = |meta: &mut VirtualCells<pallas::Base>, rotation: Rotation| {
+            let x_a = meta.query_advice(self.x_a, rotation);
+            let x_p = meta.query_advice(self.x_p, rotation);
+            let lambda_1 = meta.query_advice(self.lambda1, rotation);
+            lambda_1.square() - x_a - x_p
+        };
+
+        // Closure to compute y_{A,i} = (λ_{1,i} + λ_{2,i}) * (x_{A,i} - x_{R,i}) / 2
+        let y_a = |meta: &mut VirtualCells<pallas::Base>, rotation: Rotation| {
+            let x_a = meta.query_advice(self.x_a, rotation);
+            let lambda_1 = meta.query_advice(self.lambda1, rotation);
+            let lambda_2 = meta.query_advice(self.lambda2, rotation);
+
+            (lambda_1 + lambda_2) * (x_a - x_r(meta, rotation)) * pallas::Base::TWO_INV
+        };
+
+        // Constraints used for q_mul_{2, 3} == 1
+        let for_loop = |meta: &mut VirtualCells<pallas::Base>,
+                        q_mul: Expression<pallas::Base>,
+                        y_a_next: Expression<pallas::Base>| {
+            let one = Expression::Constant(pallas::Base::one());
+
+            // z_i
+            let z_cur = meta.query_advice(self.z, Rotation::cur());
+            // z_{i+1}
+            let z_prev = meta.query_advice(self.z, Rotation::prev());
+            // x_{A,i}
+            let x_a_cur = meta.query_advice(self.x_a, Rotation::cur());
+            // x_{A,i-1}
+            let x_a_next = meta.query_advice(self.x_a, Rotation::next());
+            // x_{P,i}
+            let x_p_cur = meta.query_advice(self.x_p, Rotation::cur());
+            // y_{P,i}
+            let y_p_cur = meta.query_advice(self.y_p, Rotation::cur());
+            // λ_{1,i}
+            let lambda1_cur = meta.query_advice(self.lambda1, Rotation::cur());
+            // λ_{2,i}
+            let lambda2_cur = meta.query_advice(self.lambda2, Rotation::cur());
+
+            let y_a_cur = y_a(meta, Rotation::cur());
+
+            // The current bit in the scalar decomposition, k_i = z_i - 2⋅z_{i+1}.
+            // Recall that we assigned the cumulative variable `z_i` in descending order,
+            // i from n down to 0. So z_{i+1} corresponds to the `z_prev` query.
+            let k = z_cur - z_prev * pallas::Base::from_u64(2);
+            // Check booleanity of decomposition.
+            let bool_check = k.clone() * (one.clone() - k.clone());
+
+            // λ_{1,i}⋅(x_{A,i} − x_{P,i}) − y_{A,i} + (2k_i - 1) y_{P,i} = 0
+            let gradient_1 = lambda1_cur * (x_a_cur.clone() - x_p_cur) - y_a_cur.clone()
+                + (k * pallas::Base::from_u64(2) - one) * y_p_cur;
+
+            // λ_{2,i}^2 − x_{A,i-1} − x_{R,i} − x_{A,i} = 0
+            let secant_line = lambda2_cur.clone().square()
+                - x_a_next.clone()
+                - x_r(meta, Rotation::cur())
+                - x_a_cur.clone();
+
+            // λ_{2,i}⋅(x_{A,i} − x_{A,i-1}) − y_{A,i} − y_{A,i-1} = 0
+            let gradient_2 = lambda2_cur * (x_a_cur - x_a_next) - y_a_cur - y_a_next;
+
+            std::iter::empty()
+                .chain(Some(("bool_check", q_mul.clone() * bool_check)))
+                .chain(Some(("gradient_1", q_mul.clone() * gradient_1)))
+                .chain(Some(("secant_line", q_mul.clone() * secant_line)))
+                .chain(Some(("gradient_2", q_mul * gradient_2)))
+        };
+
+        // q_mul_1 == 1 checks
+        meta.create_gate("q_mul_1 == 1 checks", |meta| {
+            let q_mul_1 = meta.query_selector(self.q_mul.0);
+
+            let y_a_next = y_a(meta, Rotation::next());
+            let y_a_witnessed = meta.query_advice(self.lambda1, Rotation::cur());
+            vec![("init y_a", q_mul_1 * (y_a_witnessed - y_a_next))]
+        });
+
+        // q_mul_2 == 1 checks
+        meta.create_gate("q_mul_2 == 1 checks", |meta| {
+            let q_mul_2 = meta.query_selector(self.q_mul.1);
+
+            let y_a_next = y_a(meta, Rotation::next());
+
+            // x_{P,i}
+            let x_p_cur = meta.query_advice(self.x_p, Rotation::cur());
+            // x_{P,i-1}
+            let x_p_next = meta.query_advice(self.x_p, Rotation::next());
+            // y_{P,i}
+            let y_p_cur = meta.query_advice(self.y_p, Rotation::cur());
+            // y_{P,i-1}
+            let y_p_next = meta.query_advice(self.y_p, Rotation::next());
+
+            // The base used in double-and-add remains constant. We check that its
+            // x- and y- coordinates are the same throughout.
+            let x_p_check = x_p_cur - x_p_next;
+            let y_p_check = y_p_cur - y_p_next;
+
+            std::iter::empty()
+                .chain(Some(("x_p_check", q_mul_2.clone() * x_p_check)))
+                .chain(Some(("y_p_check", q_mul_2.clone() * y_p_check)))
+                .chain(for_loop(meta, q_mul_2, y_a_next))
+        });
+
+        // q_mul_3 == 1 checks
+        meta.create_gate("q_mul_3 == 1 checks", |meta| {
+            let q_mul_3 = meta.query_selector(self.q_mul.2);
+            let y_a_final = meta.query_advice(self.lambda1, Rotation::next());
+            for_loop(meta, q_mul_3, y_a_final)
+        });
+    }
+
+    // We perform incomplete addition on all but the last three bits of the
+    // decomposed scalar.
+    // We split the bits in the incomplete addition range into "hi" and "lo"
+    // halves and process them side by side, using the same rows but with
+    // non-overlapping columns.
+    // Returns (x, y, z).
+    #[allow(clippy::type_complexity)]
+    pub(super) fn double_and_add(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        base: &EccPoint,
+        bits: &[Option<bool>],
+        acc: (X<pallas::Base>, Y<pallas::Base>, Z<pallas::Base>),
+    ) -> Result<(X<pallas::Base>, Y<pallas::Base>, Vec<Z<pallas::Base>>), Error> {
+        // Check that we have the correct number of bits for this double-and-add.
+        assert_eq!(bits.len(), self.num_bits);
+
+        // Handle exceptional cases
+        let (x_p, y_p) = (base.x.value(), base.y.value());
+        let (x_a, y_a) = (acc.0.value(), acc.1.value());
+
+        if let (Some(x_a), Some(y_a), Some(x_p), Some(y_p)) = (x_a, y_a, x_p, y_p) {
+            // A is point at infinity
+            if (x_p == pallas::Base::zero() && y_p == pallas::Base::zero())
+            // Q is point at infinity
+            || (x_a == pallas::Base::zero() && y_a == pallas::Base::zero())
+            // x_p = x_a
+            || (x_p == x_a)
+            {
+                return Err(Error::SynthesisError);
+            }
+        }
+
+        // Set q_mul values
+        {
+            // q_mul_1 = 1 on offset 0
+            self.q_mul.0.enable(region, offset)?;
+
+            let offset = offset + 1;
+            // q_mul_2 = 1 on all rows after offset 0, excluding the last row.
+            for idx in 0..(self.num_bits - 1) {
+                self.q_mul.1.enable(region, offset + idx)?;
+            }
+
+            // q_mul_3 = 1 on the last row.
+            self.q_mul.2.enable(region, offset + self.num_bits - 1)?;
+        }
+
+        // Initialise double-and-add
+        let (mut x_a, mut y_a, mut z) = {
+            // Initialise the running `z` sum for the scalar bits.
+            let z = copy(region, || "starting z", self.z, offset, &acc.2)?;
+
+            // Initialise acc
+            let x_a = copy(region, || "starting x_a", self.x_a, offset + 1, &acc.0)?;
+            let y_a = copy(region, || "starting y_a", self.lambda1, offset, &acc.1)?;
+
+            (x_a, y_a.value(), z)
+        };
+
+        // Increase offset by 1; we used row 0 for initializing `z`.
+        let offset = offset + 1;
+
+        // Initialise vector to store all interstitial `z` running sum values.
+        let mut zs: Vec<Z<pallas::Base>> = Vec::with_capacity(bits.len());
+
+        // Incomplete addition
+        for (row, k) in bits.iter().enumerate() {
+            // z_{i} = 2 * z_{i+1} + k_i
+            let z_val = z.value().zip(k.as_ref()).map(|(z_val, k)| {
+                pallas::Base::from_u64(2) * z_val + pallas::Base::from_u64(*k as u64)
+            });
+            let z_cell = region.assign_advice(
+                || "z",
+                self.z,
+                row + offset,
+                || z_val.ok_or(Error::SynthesisError),
+            )?;
+            z = CellValue::new(z_cell, z_val);
+            zs.push(Z(z));
+
+            // Assign `x_p`, `y_p`
+            region.assign_advice(
+                || "x_p",
+                self.x_p,
+                row + offset,
+                || x_p.ok_or(Error::SynthesisError),
+            )?;
+            region.assign_advice(
+                || "y_p",
+                self.y_p,
+                row + offset,
+                || y_p.ok_or(Error::SynthesisError),
+            )?;
+
+            // If the bit is set, use `y`; if the bit is not set, use `-y`
+            let y_p = y_p
+                .zip(k.as_ref())
+                .map(|(y_p, k)| if !k { -y_p } else { y_p });
+
+            // Compute and assign λ1⋅(x_A − x_P) = y_A − y_P
+            let lambda1 = y_a
+                .zip(y_p)
+                .zip(x_a.value())
+                .zip(x_p)
+                .map(|(((y_a, y_p), x_a), x_p)| (y_a - y_p) * (x_a - x_p).invert().unwrap());
+            region.assign_advice(
+                || "lambda1",
+                self.lambda1,
+                row + offset,
+                || lambda1.ok_or(Error::SynthesisError),
+            )?;
+
+            // x_R = λ1^2 - x_A - x_P
+            let x_r = lambda1
+                .zip(x_a.value())
+                .zip(x_p)
+                .map(|((lambda1, x_a), x_p)| lambda1 * lambda1 - x_a - x_p);
+
+            // λ2 = (2(y_A) / (x_A - x_R)) - λ1
+            let lambda2 =
+                lambda1
+                    .zip(y_a)
+                    .zip(x_a.value())
+                    .zip(x_r)
+                    .map(|(((lambda1, y_a), x_a), x_r)| {
+                        pallas::Base::from_u64(2) * y_a * (x_a - x_r).invert().unwrap() - lambda1
+                    });
+            region.assign_advice(
+                || "lambda2",
+                self.lambda2,
+                row + offset,
+                || lambda2.ok_or(Error::SynthesisError),
+            )?;
+
+            // Compute and assign `x_a` for the next row
+            let x_a_new = lambda2
+                .zip(x_a.value())
+                .zip(x_r)
+                .map(|((lambda2, x_a), x_r)| lambda2.square() - x_a - x_r);
+            y_a = lambda2
+                .zip(x_a.value())
+                .zip(x_a_new)
+                .zip(y_a)
+                .map(|(((lambda2, x_a), x_a_new), y_a)| lambda2 * (x_a - x_a_new) - y_a);
+            let x_a_val = x_a_new;
+            let x_a_cell = region.assign_advice(
+                || "x_a",
+                self.x_a,
+                row + offset + 1,
+                || x_a_val.ok_or(Error::SynthesisError),
+            )?;
+            x_a = CellValue::new(x_a_cell, x_a_val);
+        }
+
+        // Witness final y_a
+        let y_a = {
+            let cell = region.assign_advice(
+                || "y_a",
+                self.lambda1,
+                offset + self.num_bits,
+                || y_a.ok_or(Error::SynthesisError),
+            )?;
+            CellValue::new(cell, y_a)
+        };
+
+        Ok((X(x_a), Y(y_a), zs))
+    }
+}

+ 223 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul/overflow.rs

@@ -0,0 +1,223 @@
+use super::super::{copy, CellValue, EccConfig, Var};
+use super::Z;
+use crate::{
+    circuit::gadget::utilities::lookup_range_check::LookupRangeCheckConfig, constants::T_Q,
+    primitives::sinsemilla,
+};
+use halo2::{
+    circuit::Layouter,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+
+use ff::Field;
+use pasta_curves::{arithmetic::FieldExt, pallas};
+
+use std::iter;
+
+pub struct Config {
+    // Selector to check z_0 = alpha + t_q (mod p)
+    q_mul_overflow: Selector,
+    // 10-bit lookup table
+    lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
+    // Advice columns
+    advices: [Column<Advice>; 3],
+}
+
+impl From<&EccConfig> for Config {
+    fn from(ecc_config: &EccConfig) -> Self {
+        Self {
+            q_mul_overflow: ecc_config.q_mul_overflow,
+            lookup_config: ecc_config.lookup_config.clone(),
+            // Use advice columns that don't conflict with the either the incomplete
+            // additions in fixed-base scalar mul, or the lookup range checks.
+            advices: [
+                ecc_config.advices[6],
+                ecc_config.advices[7],
+                ecc_config.advices[8],
+            ],
+        }
+    }
+}
+
+impl Config {
+    pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate("overflow checks", |meta| {
+            let q_mul_overflow = meta.query_selector(self.q_mul_overflow);
+
+            // Constant expressions
+            let one = Expression::Constant(pallas::Base::one());
+            let two_pow_124 = Expression::Constant(pallas::Base::from_u128(1 << 124));
+            let two_pow_130 =
+                two_pow_124.clone() * Expression::Constant(pallas::Base::from_u128(1 << 6));
+
+            let z_0 = meta.query_advice(self.advices[0], Rotation::prev());
+            let z_130 = meta.query_advice(self.advices[0], Rotation::cur());
+            let eta = meta.query_advice(self.advices[0], Rotation::next());
+
+            let k_254 = meta.query_advice(self.advices[1], Rotation::prev());
+            let alpha = meta.query_advice(self.advices[1], Rotation::cur());
+
+            // s_minus_lo_130 = s - sum_{i = 0}^{129} 2^i ⋅ s_i
+            let s_minus_lo_130 = meta.query_advice(self.advices[1], Rotation::next());
+
+            let s = meta.query_advice(self.advices[2], Rotation::cur());
+            let s_check = s - (alpha.clone() + k_254.clone() * two_pow_130);
+
+            // q = 2^254 + t_q is the Pallas scalar field modulus.
+            // We cast t_q into the base field to check alpha + t_q (mod p).
+            let t_q = Expression::Constant(pallas::Base::from_u128(T_Q));
+
+            // z_0 - alpha - t_q = 0 (mod p)
+            let recovery = z_0 - alpha - t_q;
+
+            // k_254 * (z_130 - 2^124) = 0
+            let lo_zero = k_254.clone() * (z_130.clone() - two_pow_124);
+
+            // k_254 * s_minus_lo_130 = 0
+            let s_minus_lo_130_check = k_254.clone() * s_minus_lo_130.clone();
+
+            // (1 - k_254) * (1 - z_130 * eta) * s_minus_lo_130 = 0
+            let canonicity = (one.clone() - k_254) * (one - z_130 * eta) * s_minus_lo_130;
+
+            iter::empty()
+                .chain(Some(s_check))
+                .chain(Some(recovery))
+                .chain(Some(lo_zero))
+                .chain(Some(s_minus_lo_130_check))
+                .chain(Some(canonicity))
+                .map(|poly| q_mul_overflow.clone() * poly)
+                .collect::<Vec<_>>()
+        });
+    }
+
+    pub(super) fn overflow_check(
+        &self,
+        mut layouter: impl Layouter<pallas::Base>,
+        alpha: CellValue<pallas::Base>,
+        zs: &[Z<pallas::Base>], // [z_0, z_1, ..., z_{254}, z_{255}]
+    ) -> Result<(), Error> {
+        // s = alpha + k_254 ⋅ 2^130 is witnessed here, and then copied into
+        // the decomposition as well as the overflow check gate.
+        // In the overflow check gate, we check that s is properly derived
+        // from alpha and k_254.
+        let s = {
+            let k_254 = *zs[254];
+            let s_val = alpha
+                .value()
+                .zip(k_254.value())
+                .map(|(alpha, k_254)| alpha + k_254 * pallas::Base::from_u128(1 << 65).square());
+
+            layouter.assign_region(
+                || "s = alpha + k_254 ⋅ 2^130",
+                |mut region| {
+                    let s_cell = region.assign_advice(
+                        || "s = alpha + k_254 ⋅ 2^130",
+                        self.advices[0],
+                        0,
+                        || s_val.ok_or(Error::SynthesisError),
+                    )?;
+                    Ok(CellValue::new(s_cell, s_val))
+                },
+            )?
+        };
+
+        // Subtract the first 130 low bits of s = alpha + k_254 ⋅ 2^130
+        // using thirteen 10-bit lookups, s_{0..=129}
+        let s_minus_lo_130 =
+            self.s_minus_lo_130(layouter.namespace(|| "decompose s_{0..=129}"), s)?;
+
+        layouter.assign_region(
+            || "overflow check",
+            |mut region| {
+                let offset = 0;
+
+                // Enable overflow check gate
+                self.q_mul_overflow.enable(&mut region, offset + 1)?;
+
+                // Copy `z_0`
+                copy(&mut region, || "copy z_0", self.advices[0], offset, &*zs[0])?;
+
+                // Copy `z_130`
+                copy(
+                    &mut region,
+                    || "copy z_130",
+                    self.advices[0],
+                    offset + 1,
+                    &*zs[130],
+                )?;
+
+                // Witness η = inv0(z_130), where inv0(x) = 0 if x = 0, 1/x otherwise
+                {
+                    let eta = zs[130].value().map(|z_130| {
+                        if z_130 == pallas::Base::zero() {
+                            pallas::Base::zero()
+                        } else {
+                            z_130.invert().unwrap()
+                        }
+                    });
+                    region.assign_advice(
+                        || "η = inv0(z_130)",
+                        self.advices[0],
+                        offset + 2,
+                        || eta.ok_or(Error::SynthesisError),
+                    )?;
+                }
+
+                // Copy `k_254` = z_254
+                copy(
+                    &mut region,
+                    || "copy k_254",
+                    self.advices[1],
+                    offset,
+                    &*zs[254],
+                )?;
+
+                // Copy original alpha
+                copy(
+                    &mut region,
+                    || "copy original alpha",
+                    self.advices[1],
+                    offset + 1,
+                    &alpha,
+                )?;
+
+                // Copy weighted sum of the decomposition of s = alpha + k_254 ⋅ 2^130.
+                copy(
+                    &mut region,
+                    || "copy s_minus_lo_130",
+                    self.advices[1],
+                    offset + 2,
+                    &s_minus_lo_130,
+                )?;
+
+                // Copy witnessed s to check that it was properly derived from alpha and k_254.
+                copy(&mut region, || "copy s", self.advices[2], offset + 1, &s)?;
+
+                Ok(())
+            },
+        )?;
+
+        Ok(())
+    }
+
+    fn s_minus_lo_130(
+        &self,
+        mut layouter: impl Layouter<pallas::Base>,
+        s: CellValue<pallas::Base>,
+    ) -> Result<CellValue<pallas::Base>, Error> {
+        // Number of k-bit words we can use in the lookup decomposition.
+        let num_words = 130 / sinsemilla::K;
+        assert!(num_words * sinsemilla::K == 130);
+
+        // Decompose the low 130 bits of `s` using thirteen 10-bit lookups.
+        let zs = self.lookup_config.copy_check(
+            layouter.namespace(|| "Decompose low 130 bits of s"),
+            s,
+            num_words,
+            false,
+        )?;
+        // (s - (2^0 s_0 + 2^1 s_1 + ... + 2^129 s_129)) / 2^130
+        Ok(zs[zs.len() - 1])
+    }
+}

+ 544 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed.rs

@@ -0,0 +1,544 @@
+use super::{
+    add, add_incomplete, CellValue, EccBaseFieldElemFixed, EccConfig, EccPoint, EccScalarFixed,
+    EccScalarFixedShort, Var,
+};
+use crate::constants::{
+    self,
+    load::{NullifierK, OrchardFixedBase, OrchardFixedBasesFull, ValueCommitV, WindowUs},
+};
+
+use group::Curve;
+use halo2::{
+    circuit::Region,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Fixed, Selector, VirtualCells},
+    poly::Rotation,
+};
+use lazy_static::lazy_static;
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+pub mod base_field_elem;
+pub mod full_width;
+pub mod short;
+
+lazy_static! {
+    static ref TWO_SCALAR: pallas::Scalar = pallas::Scalar::from_u64(2);
+    // H = 2^3 (3-bit window)
+    static ref H_SCALAR: pallas::Scalar = pallas::Scalar::from_u64(constants::H as u64);
+    static ref H_BASE: pallas::Base = pallas::Base::from_u64(constants::H as u64);
+}
+
+// A sum type for both full-width and short bases. This enables us to use the
+// shared functionality of full-width and short fixed-base scalar multiplication.
+#[derive(Copy, Clone, Debug)]
+enum OrchardFixedBases {
+    Full(OrchardFixedBasesFull),
+    NullifierK,
+    ValueCommitV,
+}
+
+impl From<OrchardFixedBasesFull> for OrchardFixedBases {
+    fn from(full_width_base: OrchardFixedBasesFull) -> Self {
+        Self::Full(full_width_base)
+    }
+}
+
+impl From<ValueCommitV> for OrchardFixedBases {
+    fn from(_value_commit_v: ValueCommitV) -> Self {
+        Self::ValueCommitV
+    }
+}
+
+impl From<NullifierK> for OrchardFixedBases {
+    fn from(_nullifier_k: NullifierK) -> Self {
+        Self::NullifierK
+    }
+}
+
+impl OrchardFixedBases {
+    pub fn generator(self) -> pallas::Affine {
+        match self {
+            Self::ValueCommitV => constants::value_commit_v::generator(),
+            Self::NullifierK => constants::nullifier_k::generator(),
+            Self::Full(base) => base.generator(),
+        }
+    }
+
+    pub fn u(self) -> Vec<WindowUs> {
+        match self {
+            Self::ValueCommitV => ValueCommitV::get().u_short.0.as_ref().to_vec(),
+            Self::NullifierK => NullifierK.u().0.as_ref().to_vec(),
+            Self::Full(base) => base.u().0.as_ref().to_vec(),
+        }
+    }
+}
+
+#[derive(Clone, Debug)]
+pub struct Config<const NUM_WINDOWS: usize> {
+    q_mul_fixed_running_sum: Selector,
+    // The fixed Lagrange interpolation coefficients for `x_p`.
+    lagrange_coeffs: [Column<Fixed>; constants::H],
+    // The fixed `z` for each window such that `y + z = u^2`.
+    fixed_z: Column<Fixed>,
+    // Decomposition of an `n-1`-bit scalar into `k`-bit windows:
+    // a = a_0 + 2^k(a_1) + 2^{2k}(a_2) + ... + 2^{(n-1)k}(a_{n-1})
+    window: Column<Advice>,
+    // x-coordinate of the multiple of the fixed base at the current window.
+    x_p: Column<Advice>,
+    // y-coordinate of the multiple of the fixed base at the current window.
+    y_p: Column<Advice>,
+    // y-coordinate of accumulator (only used in the final row).
+    u: Column<Advice>,
+    // Configuration for `add`
+    add_config: add::Config,
+    // Configuration for `add_incomplete`
+    add_incomplete_config: add_incomplete::Config,
+}
+
+impl<const NUM_WINDOWS: usize> From<&EccConfig> for Config<NUM_WINDOWS> {
+    fn from(ecc_config: &EccConfig) -> Self {
+        let config = Self {
+            q_mul_fixed_running_sum: ecc_config.q_mul_fixed_running_sum,
+            lagrange_coeffs: ecc_config.lagrange_coeffs,
+            fixed_z: ecc_config.fixed_z,
+            x_p: ecc_config.advices[0],
+            y_p: ecc_config.advices[1],
+            window: ecc_config.advices[4],
+            u: ecc_config.advices[5],
+            add_config: ecc_config.into(),
+            add_incomplete_config: ecc_config.into(),
+        };
+
+        // Check relationships between this config and `add_config`.
+        assert_eq!(
+            config.x_p, config.add_config.x_p,
+            "add is used internally in mul_fixed."
+        );
+        assert_eq!(
+            config.y_p, config.add_config.y_p,
+            "add is used internally in mul_fixed."
+        );
+
+        // Check relationships between this config and `add_incomplete_config`.
+        assert_eq!(
+            config.x_p, config.add_incomplete_config.x_p,
+            "add_incomplete is used internally in mul_fixed."
+        );
+        assert_eq!(
+            config.y_p, config.add_incomplete_config.y_p,
+            "add_incomplete is used internally in mul_fixed."
+        );
+        for advice in [config.x_p, config.y_p, config.window, config.u].iter() {
+            assert_ne!(
+                *advice, config.add_config.x_qr,
+                "Do not overlap with output columns of add."
+            );
+            assert_ne!(
+                *advice, config.add_config.y_qr,
+                "Do not overlap with output columns of add."
+            );
+        }
+
+        config
+    }
+}
+
+impl<const NUM_WINDOWS: usize> Config<NUM_WINDOWS> {
+    /// Check that each window in the running sum decomposition uses the correct y_p
+    /// and interpolated x_p.
+    ///
+    /// This gate is used both in the mul_fixed::base_field_elem and mul_fixed::short
+    /// helpers, which decompose the scalar using a running sum.
+    ///
+    /// This gate is not used in the mul_fixed::full_width helper, since the full-width
+    /// scalar is witnessed directly as three-bit windows instead of being decomposed
+    /// via a running sum.
+    pub(crate) fn running_sum_coords_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate("Running sum coordinates check", |meta| {
+            let q_mul_fixed_running_sum = meta.query_selector(self.q_mul_fixed_running_sum);
+
+            let z_cur = meta.query_advice(self.window, Rotation::cur());
+            let z_next = meta.query_advice(self.window, Rotation::next());
+
+            //    z_{i+1} = (z_i - a_i) / 2^3
+            // => a_i = z_i - z_{i+1} * 2^3
+            let word = z_cur - z_next * pallas::Base::from_u64(constants::H as u64);
+
+            self.coords_check(meta, q_mul_fixed_running_sum, word)
+        });
+    }
+
+    #[allow(clippy::op_ref)]
+    fn coords_check(
+        &self,
+        meta: &mut VirtualCells<'_, pallas::Base>,
+        toggle: Expression<pallas::Base>,
+        window: Expression<pallas::Base>,
+    ) -> Vec<(&'static str, Expression<pallas::Base>)> {
+        let y_p = meta.query_advice(self.y_p, Rotation::cur());
+        let x_p = meta.query_advice(self.x_p, Rotation::cur());
+        let z = meta.query_fixed(self.fixed_z, Rotation::cur());
+        let u = meta.query_advice(self.u, Rotation::cur());
+
+        let window_pow: Vec<Expression<pallas::Base>> = (0..constants::H)
+            .map(|pow| {
+                (0..pow).fold(Expression::Constant(pallas::Base::one()), |acc, _| {
+                    acc * window.clone()
+                })
+            })
+            .collect();
+
+        let interpolated_x = window_pow.iter().zip(self.lagrange_coeffs.iter()).fold(
+            Expression::Constant(pallas::Base::zero()),
+            |acc, (window_pow, coeff)| {
+                acc + (window_pow.clone() * meta.query_fixed(*coeff, Rotation::cur()))
+            },
+        );
+
+        // Check interpolation of x-coordinate
+        let x_check = interpolated_x - x_p.clone();
+        // Check that `y + z = u^2`, where `z` is fixed and `u`, `y` are witnessed
+        let y_check = u.square() - y_p.clone() - z;
+        // Check that (x, y) is on the curve
+        let on_curve =
+            y_p.square() - x_p.clone().square() * x_p - Expression::Constant(pallas::Affine::b());
+
+        vec![
+            ("check x", toggle.clone() * x_check),
+            ("check y", toggle.clone() * y_check),
+            ("on-curve", toggle * on_curve),
+        ]
+    }
+
+    #[allow(clippy::type_complexity)]
+    fn assign_region_inner(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        scalar: &ScalarFixed,
+        base: OrchardFixedBases,
+        coords_check_toggle: Selector,
+    ) -> Result<(EccPoint, EccPoint), Error> {
+        // Assign fixed columns for given fixed base
+        self.assign_fixed_constants(region, offset, base, coords_check_toggle)?;
+
+        // Initialize accumulator
+        let acc = self.initialize_accumulator(region, offset, base, scalar)?;
+
+        // Process all windows excluding least and most significant windows
+        let acc = self.add_incomplete(region, offset, acc, base, scalar)?;
+
+        // Process most significant window using complete addition
+        let mul_b = self.process_msb(region, offset, base, scalar)?;
+
+        Ok((acc, mul_b))
+    }
+
+    fn assign_fixed_constants(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        base: OrchardFixedBases,
+        coords_check_toggle: Selector,
+    ) -> Result<(), Error> {
+        let mut constants = None;
+
+        let build_constants = || match base {
+            OrchardFixedBases::ValueCommitV => {
+                assert_eq!(NUM_WINDOWS, constants::NUM_WINDOWS_SHORT);
+                let base = ValueCommitV::get();
+                (
+                    base.lagrange_coeffs_short.0.as_ref().to_vec(),
+                    base.z_short.0.as_ref().to_vec(),
+                )
+            }
+            OrchardFixedBases::Full(base) => {
+                assert_eq!(NUM_WINDOWS, constants::NUM_WINDOWS);
+                let base: OrchardFixedBase = base.into();
+                (
+                    base.lagrange_coeffs.0.as_ref().to_vec(),
+                    base.z.0.as_ref().to_vec(),
+                )
+            }
+            OrchardFixedBases::NullifierK => {
+                assert_eq!(NUM_WINDOWS, constants::NUM_WINDOWS);
+                let base: OrchardFixedBase = NullifierK.into();
+                (
+                    base.lagrange_coeffs.0.as_ref().to_vec(),
+                    base.z.0.as_ref().to_vec(),
+                )
+            }
+        };
+
+        // Assign fixed columns for given fixed base
+        for window in 0..NUM_WINDOWS {
+            coords_check_toggle.enable(region, window + offset)?;
+
+            // Assign x-coordinate Lagrange interpolation coefficients
+            for k in 0..(constants::H) {
+                region.assign_fixed(
+                    || {
+                        format!(
+                            "Lagrange interpolation coeff for window: {:?}, k: {:?}",
+                            window, k
+                        )
+                    },
+                    self.lagrange_coeffs[k],
+                    window + offset,
+                    || {
+                        if constants.as_ref().is_none() {
+                            constants = Some(build_constants());
+                        }
+                        let lagrange_coeffs = &constants.as_ref().unwrap().0;
+                        Ok(lagrange_coeffs[window].0[k])
+                    },
+                )?;
+            }
+
+            // Assign z-values for each window
+            region.assign_fixed(
+                || format!("z-value for window: {:?}", window),
+                self.fixed_z,
+                window + offset,
+                || {
+                    let z = &constants.as_ref().unwrap().1;
+                    Ok(z[window])
+                },
+            )?;
+        }
+
+        Ok(())
+    }
+
+    fn process_window(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        w: usize,
+        k: Option<pallas::Scalar>,
+        k_usize: Option<usize>,
+        base: OrchardFixedBases,
+    ) -> Result<EccPoint, Error> {
+        let base_value = base.generator();
+        let base_u = base.u();
+
+        // Compute [(k_w + 2) ⋅ 8^w]B
+        let mul_b = {
+            let mul_b =
+                k.map(|k| base_value * (k + *TWO_SCALAR) * H_SCALAR.pow(&[w as u64, 0, 0, 0]));
+            let mul_b = mul_b.map(|mul_b| mul_b.to_affine().coordinates().unwrap());
+
+            let x = mul_b.map(|mul_b| *mul_b.x());
+            let x_cell = region.assign_advice(
+                || format!("mul_b_x, window {}", w),
+                self.x_p,
+                offset + w,
+                || x.ok_or(Error::SynthesisError),
+            )?;
+            let x = CellValue::new(x_cell, x);
+
+            let y = mul_b.map(|mul_b| *mul_b.y());
+            let y_cell = region.assign_advice(
+                || format!("mul_b_y, window {}", w),
+                self.y_p,
+                offset + w,
+                || y.ok_or(Error::SynthesisError),
+            )?;
+            let y = CellValue::new(y_cell, y);
+
+            EccPoint { x, y }
+        };
+
+        // Assign u = (y_p + z_w).sqrt()
+        let u_val = k_usize.map(|k| base_u[w].0[k]);
+        region.assign_advice(
+            || "u",
+            self.u,
+            offset + w,
+            || u_val.ok_or(Error::SynthesisError),
+        )?;
+
+        Ok(mul_b)
+    }
+
+    fn initialize_accumulator(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        base: OrchardFixedBases,
+        scalar: &ScalarFixed,
+    ) -> Result<EccPoint, Error> {
+        // Recall that the message at each window `w` is represented as
+        // `m_w = [(k_w + 2) ⋅ 8^w]B`.
+        // When `w = 0`, we have `m_0 = [(k_0 + 2)]B`.
+        let w = 0;
+        let k0 = scalar.windows_field()[0];
+        let k0_usize = scalar.windows_usize()[0];
+        self.process_window(region, offset, w, k0, k0_usize, base)
+    }
+
+    fn add_incomplete(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        mut acc: EccPoint,
+        base: OrchardFixedBases,
+        scalar: &ScalarFixed,
+    ) -> Result<EccPoint, Error> {
+        let scalar_windows_field = scalar.windows_field();
+        let scalar_windows_usize = scalar.windows_usize();
+
+        for (w, (k, k_usize)) in scalar_windows_field[..(scalar_windows_field.len() - 1)]
+            .iter()
+            .zip(scalar_windows_usize[..(scalar_windows_field.len() - 1)].iter())
+            .enumerate()
+            // Skip k_0 (already processed).
+            .skip(1)
+        {
+            // Compute [(k_w + 2) ⋅ 8^w]B
+            let mul_b = self.process_window(region, offset, w, *k, *k_usize, base)?;
+
+            // Add to the accumulator
+            acc = self
+                .add_incomplete_config
+                .assign_region(&mul_b, &acc, offset + w, region)?;
+        }
+        Ok(acc)
+    }
+
+    fn process_msb(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        base: OrchardFixedBases,
+        scalar: &ScalarFixed,
+    ) -> Result<EccPoint, Error> {
+        // Assign u = (y_p + z_w).sqrt() for the most significant window
+        {
+            let u_val =
+                scalar.windows_usize()[NUM_WINDOWS - 1].map(|k| base.u()[NUM_WINDOWS - 1].0[k]);
+            region.assign_advice(
+                || "u",
+                self.u,
+                offset + NUM_WINDOWS - 1,
+                || u_val.ok_or(Error::SynthesisError),
+            )?;
+        }
+
+        // offset_acc = \sum_{j = 0}^{NUM_WINDOWS - 2} 2^{FIXED_BASE_WINDOW_SIZE*j + 1}
+        let offset_acc = (0..(NUM_WINDOWS - 1)).fold(pallas::Scalar::zero(), |acc, w| {
+            acc + (*TWO_SCALAR).pow(&[
+                constants::FIXED_BASE_WINDOW_SIZE as u64 * w as u64 + 1,
+                0,
+                0,
+                0,
+            ])
+        });
+
+        // `scalar = [k * 8^84 - offset_acc]`, where `offset_acc = \sum_{j = 0}^{83} 2^{FIXED_BASE_WINDOW_SIZE*j + 1}`.
+        let scalar = scalar.windows_field()[scalar.windows_field().len() - 1]
+            .map(|k| k * (*H_SCALAR).pow(&[(NUM_WINDOWS - 1) as u64, 0, 0, 0]) - offset_acc);
+
+        let mul_b = {
+            let mul_b = scalar.map(|scalar| base.generator() * scalar);
+            let mul_b = mul_b.map(|mul_b| mul_b.to_affine().coordinates().unwrap());
+
+            let x = mul_b.map(|mul_b| *mul_b.x());
+            let x_cell = region.assign_advice(
+                || format!("mul_b_x, window {}", NUM_WINDOWS - 1),
+                self.x_p,
+                offset + NUM_WINDOWS - 1,
+                || x.ok_or(Error::SynthesisError),
+            )?;
+            let x = CellValue::new(x_cell, x);
+
+            let y = mul_b.map(|mul_b| *mul_b.y());
+            let y_cell = region.assign_advice(
+                || format!("mul_b_y, window {}", NUM_WINDOWS - 1),
+                self.y_p,
+                offset + NUM_WINDOWS - 1,
+                || y.ok_or(Error::SynthesisError),
+            )?;
+            let y = CellValue::new(y_cell, y);
+
+            EccPoint { x, y }
+        };
+
+        Ok(mul_b)
+    }
+}
+
+enum ScalarFixed {
+    FullWidth(EccScalarFixed),
+    Short(EccScalarFixedShort),
+    BaseFieldElem(EccBaseFieldElemFixed),
+}
+
+impl From<&EccScalarFixed> for ScalarFixed {
+    fn from(scalar_fixed: &EccScalarFixed) -> Self {
+        Self::FullWidth(scalar_fixed.clone())
+    }
+}
+
+impl From<&EccScalarFixedShort> for ScalarFixed {
+    fn from(scalar_fixed: &EccScalarFixedShort) -> Self {
+        Self::Short(scalar_fixed.clone())
+    }
+}
+
+impl From<&EccBaseFieldElemFixed> for ScalarFixed {
+    fn from(base_field_elem: &EccBaseFieldElemFixed) -> Self {
+        Self::BaseFieldElem(base_field_elem.clone())
+    }
+}
+
+impl ScalarFixed {
+    // The scalar decomposition was done in the base field. For computation
+    // outside the circuit, we now convert them back into the scalar field.
+    fn windows_field(&self) -> Vec<Option<pallas::Scalar>> {
+        let running_sum_to_windows = |zs: Vec<CellValue<pallas::Base>>| {
+            (0..(zs.len() - 1))
+                .map(|idx| {
+                    let z_cur = zs[idx].value();
+                    let z_next = zs[idx + 1].value();
+                    let word = z_cur
+                        .zip(z_next)
+                        .map(|(z_cur, z_next)| z_cur - z_next * *H_BASE);
+                    word.map(|word| pallas::Scalar::from_bytes(&word.to_bytes()).unwrap())
+                })
+                .collect::<Vec<_>>()
+        };
+        match self {
+            Self::BaseFieldElem(scalar) => running_sum_to_windows(scalar.running_sum.to_vec()),
+            Self::Short(scalar) => running_sum_to_windows(scalar.running_sum.to_vec()),
+            Self::FullWidth(scalar) => scalar
+                .windows
+                .iter()
+                .map(|bits| {
+                    bits.value()
+                        .map(|value| pallas::Scalar::from_bytes(&value.to_bytes()).unwrap())
+                })
+                .collect::<Vec<_>>(),
+        }
+    }
+
+    // The scalar decomposition is guaranteed to be in three-bit windows,
+    // so we also cast the least significant 4 bytes in their serialisation
+    // into usize for convenient indexing into `u`-values
+    fn windows_usize(&self) -> Vec<Option<usize>> {
+        self.windows_field()
+            .iter()
+            .map(|window| {
+                if let Some(window) = window {
+                    let window = window.get_lower_32() as usize;
+                    assert!(window < constants::H);
+                    Some(window)
+                } else {
+                    None
+                }
+            })
+            .collect::<Vec<_>>()
+    }
+}

+ 520 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed/base_field_elem.rs

@@ -0,0 +1,520 @@
+use super::super::{EccBaseFieldElemFixed, EccConfig, EccPoint, NullifierK};
+use super::H_BASE;
+
+use crate::{
+    circuit::gadget::utilities::{
+        bitrange_subset, copy, decompose_running_sum::RunningSumConfig,
+        lookup_range_check::LookupRangeCheckConfig, range_check, CellValue, Var,
+    },
+    constants::{self, T_P},
+    primitives::sinsemilla,
+};
+use halo2::{
+    circuit::Layouter,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+use pasta_curves::{arithmetic::FieldExt, pallas};
+
+use std::convert::TryInto;
+
+pub struct Config {
+    q_mul_fixed_running_sum: Selector,
+    q_mul_fixed_base_field: Selector,
+    canon_advices: [Column<Advice>; 3],
+    lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
+    running_sum_config: RunningSumConfig<pallas::Base, { constants::FIXED_BASE_WINDOW_SIZE }>,
+    super_config: super::Config<{ constants::NUM_WINDOWS }>,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(config: &EccConfig) -> Self {
+        let config = Self {
+            q_mul_fixed_running_sum: config.q_mul_fixed_running_sum,
+            q_mul_fixed_base_field: config.q_mul_fixed_base_field,
+            canon_advices: [config.advices[6], config.advices[7], config.advices[8]],
+            lookup_config: config.lookup_config.clone(),
+            running_sum_config: config.running_sum_config.clone(),
+            super_config: config.into(),
+        };
+
+        let add_incomplete_advices = config.super_config.add_incomplete_config.advice_columns();
+        for canon_advice in config.canon_advices.iter() {
+            assert!(
+                !add_incomplete_advices.contains(canon_advice),
+                "Deconflict canon_advice columns with incomplete addition columns."
+            );
+        }
+
+        assert_eq!(config.running_sum_config.z, config.super_config.window);
+
+        config
+    }
+}
+
+impl Config {
+    pub fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        // Check that the base field element is canonical.
+        meta.create_gate("Canonicity checks", |meta| {
+            let q_mul_fixed_base_field = meta.query_selector(self.q_mul_fixed_base_field);
+
+            let alpha = meta.query_advice(self.canon_advices[0], Rotation::prev());
+            // The last three bits of α.
+            let z_84_alpha = meta.query_advice(self.canon_advices[2], Rotation::prev());
+
+            // Decompose α into three pieces, in little-endian order:
+            //            α = α_0 (252 bits)  || α_1 (2 bits) || α_2 (1 bit).
+            //
+            // α_0 is derived, not witnessed.
+            let alpha_0 = {
+                let two_pow_252 = pallas::Base::from_u128(1 << 126).square();
+                alpha - (z_84_alpha.clone() * two_pow_252)
+            };
+            let alpha_1 = meta.query_advice(self.canon_advices[1], Rotation::cur());
+            let alpha_2 = meta.query_advice(self.canon_advices[2], Rotation::cur());
+
+            let alpha_0_prime = meta.query_advice(self.canon_advices[0], Rotation::cur());
+            let z_13_alpha_0_prime = meta.query_advice(self.canon_advices[0], Rotation::next());
+            let z_44_alpha = meta.query_advice(self.canon_advices[1], Rotation::next());
+            let z_43_alpha = meta.query_advice(self.canon_advices[2], Rotation::next());
+
+            let decomposition_checks = {
+                // Range-constrain α_1 to be 2 bits
+                let alpha_1_range_check = range_check(alpha_1.clone(), 1 << 2);
+                // Boolean-constrain α_2
+                let alpha_2_range_check = range_check(alpha_2.clone(), 1 << 1);
+                // Check that α_1 + 2^2 α_2 = z_84_alpha
+                let z_84_alpha_check = z_84_alpha.clone()
+                    - (alpha_1.clone() + alpha_2.clone() * pallas::Base::from_u64(1 << 2));
+
+                std::iter::empty()
+                    .chain(Some(("alpha_1_range_check", alpha_1_range_check)))
+                    .chain(Some(("alpha_2_range_check", alpha_2_range_check)))
+                    .chain(Some(("z_84_alpha_check", z_84_alpha_check)))
+            };
+
+            // Check α_0_prime = α_0 + 2^130 - t_p
+            let alpha_0_prime_check = {
+                let two_pow_130 = Expression::Constant(pallas::Base::from_u128(1 << 65).square());
+                let t_p = Expression::Constant(pallas::Base::from_u128(T_P));
+                alpha_0_prime - (alpha_0 + two_pow_130 - t_p)
+            };
+
+            // We want to enforce canonicity of a 255-bit base field element, α.
+            // That is, we want to check that 0 ≤ α < p, where p is Pallas base
+            // field modulus p = 2^254 + t_p
+            //                 = 2^254 + 45560315531419706090280762371685220353.
+            // Note that t_p < 2^130.
+            //
+            // α has been decomposed into three pieces in little-endian order:
+            //            α = α_0 (252 bits)  || α_1 (2 bits) || α_2 (1 bit).
+            //              = α_0 + 2^252 α_1 + 2^254 α_2.
+            //
+            // If the MSB α_2 = 1, then:
+            //      - α_2 = 1 => α_1 = 0, and
+            //      - α_2 = 1 => α_0 < t_p. To enforce this:
+            //          - α_2 = 1 => 0 ≤ α_0 < 2^130
+            //                - alpha_0_hi_120 = 0 (constrain α_0 to be 132 bits)
+            //                - a_43 = 0 or 1 (constrain α_0[130..=131] to be 0)
+            //          - α_2 = 1 => 0 ≤ α_0 + 2^130 - t_p < 2^130
+            //                    => 13 ten-bit lookups of α_0 + 2^130 - t_p
+            //                    => z_13_alpha_0_prime = 0
+            //
+            let canon_checks = {
+                // alpha_0_hi_120 = z_44 - 2^120 z_84
+                let alpha_0_hi_120 = {
+                    let two_pow_120 =
+                        Expression::Constant(pallas::Base::from_u128(1 << 60).square());
+                    z_44_alpha.clone() - z_84_alpha * two_pow_120
+                };
+                // a_43 = z_43 - (2^3)z_44
+                let a_43 = z_43_alpha - z_44_alpha * *H_BASE;
+
+                std::iter::empty()
+                    .chain(Some(("MSB = 1 => alpha_1 = 0", alpha_2.clone() * alpha_1)))
+                    .chain(Some((
+                        "MSB = 1 => alpha_0_hi_120 = 0",
+                        alpha_2.clone() * alpha_0_hi_120,
+                    )))
+                    .chain(Some((
+                        "MSB = 1 => a_43 = 0 or 1",
+                        alpha_2.clone() * range_check(a_43, 2),
+                    )))
+                    .chain(Some((
+                        "MSB = 1 => z_13_alpha_0_prime = 0",
+                        alpha_2 * z_13_alpha_0_prime,
+                    )))
+            };
+
+            canon_checks
+                .chain(decomposition_checks)
+                .chain(Some(("alpha_0_prime check", alpha_0_prime_check)))
+                .map(move |(name, poly)| (name, q_mul_fixed_base_field.clone() * poly))
+        });
+    }
+
+    pub fn assign(
+        &self,
+        mut layouter: impl Layouter<pallas::Base>,
+        scalar: CellValue<pallas::Base>,
+        base: NullifierK,
+    ) -> Result<EccPoint, Error> {
+        let (scalar, acc, mul_b) = layouter.assign_region(
+            || "Base-field elem fixed-base mul (incomplete addition)",
+            |mut region| {
+                let offset = 0;
+
+                // Decompose scalar
+                let scalar = {
+                    let running_sum = self.running_sum_config.copy_decompose(
+                        &mut region,
+                        offset,
+                        scalar,
+                        true,
+                        constants::L_ORCHARD_BASE,
+                        constants::NUM_WINDOWS,
+                    )?;
+                    EccBaseFieldElemFixed {
+                        base_field_elem: running_sum[0],
+                        running_sum: (*running_sum).as_slice().try_into().unwrap(),
+                    }
+                };
+
+                let (acc, mul_b) = self.super_config.assign_region_inner(
+                    &mut region,
+                    offset,
+                    &(&scalar).into(),
+                    base.into(),
+                    self.q_mul_fixed_running_sum,
+                )?;
+
+                Ok((scalar, acc, mul_b))
+            },
+        )?;
+
+        // Add to the accumulator and return the final result as `[scalar]B`.
+        let result = layouter.assign_region(
+            || "Base-field elem fixed-base mul (complete addition)",
+            |mut region| {
+                self.super_config
+                    .add_config
+                    .assign_region(&mul_b, &acc, 0, &mut region)
+            },
+        )?;
+
+        #[cfg(test)]
+        // Check that the correct multiple is obtained.
+        {
+            use group::Curve;
+
+            let base: super::OrchardFixedBases = base.into();
+            let scalar = &scalar
+                .base_field_elem()
+                .value()
+                .map(|scalar| pallas::Scalar::from_bytes(&scalar.to_bytes()).unwrap());
+            let real_mul = scalar.map(|scalar| base.generator() * scalar);
+            let result = result.point();
+
+            if let (Some(real_mul), Some(result)) = (real_mul, result) {
+                assert_eq!(real_mul.to_affine(), result);
+            }
+        }
+
+        // We want to enforce canonicity of a 255-bit base field element, α.
+        // That is, we want to check that 0 ≤ α < p, where p is Pallas base
+        // field modulus p = 2^254 + t_p
+        //                 = 2^254 + 45560315531419706090280762371685220353.
+        // Note that t_p < 2^130.
+        //
+        // α has been decomposed into three pieces in little-endian order:
+        //            α = α_0 (252 bits)  || α_1 (2 bits) || α_2 (1 bit).
+        //              = α_0 + 2^252 α_1 + 2^254 α_2.
+        //
+        // If the MSB α_2 = 1, then:
+        //      - α_2 = 1 => α_1 = 0, and
+        //      - α_2 = 1 => α_0 < t_p. To enforce this:
+        //      - α_2 = 1 => 0 ≤ α_0 < 2^130
+        //                => 13 ten-bit lookups of α_0
+        //      - α_2 = 1 => 0 ≤ α_0 + 2^130 - t_p < 2^130
+        //                => 13 ten-bit lookups of α_0 + 2^130 - t_p
+        //                => z_13_alpha_0_prime = 0
+        //
+        let (alpha, running_sum) = (scalar.base_field_elem, &scalar.running_sum);
+        let z_43_alpha = running_sum[43];
+        let z_44_alpha = running_sum[44];
+        let z_84_alpha = running_sum[84];
+
+        // α_0 = α - z_84_alpha * 2^252
+        let alpha_0 = alpha
+            .value()
+            .zip(z_84_alpha.value())
+            .map(|(alpha, z_84_alpha)| {
+                let two_pow_252 = pallas::Base::from_u128(1 << 126).square();
+                alpha - z_84_alpha * two_pow_252
+            });
+
+        let (alpha_0_prime, z_13_alpha_0_prime) = {
+            // alpha_0_prime = alpha + 2^130 - t_p.
+            let alpha_0_prime = alpha_0.map(|alpha_0| {
+                let two_pow_130 = pallas::Base::from_u128(1 << 65).square();
+                let t_p = pallas::Base::from_u128(T_P);
+                alpha_0 + two_pow_130 - t_p
+            });
+            let zs = self.lookup_config.witness_check(
+                layouter.namespace(|| "Lookup range check alpha_0 + 2^130 - t_p"),
+                alpha_0_prime,
+                13,
+                false,
+            )?;
+            let alpha_0_prime = zs[0];
+
+            (alpha_0_prime, zs[13])
+        };
+
+        layouter.assign_region(
+            || "Canonicity checks",
+            |mut region| {
+                // Activate canonicity check gate
+                self.q_mul_fixed_base_field.enable(&mut region, 1)?;
+
+                // Offset 0
+                {
+                    let offset = 0;
+
+                    // Copy α
+                    copy(
+                        &mut region,
+                        || "Copy α",
+                        self.canon_advices[0],
+                        offset,
+                        &alpha,
+                    )?;
+
+                    // z_84_alpha = the top three bits of alpha.
+                    copy(
+                        &mut region,
+                        || "Copy z_84_alpha",
+                        self.canon_advices[2],
+                        offset,
+                        &z_84_alpha,
+                    )?;
+                }
+
+                // Offset 1
+                {
+                    let offset = 1;
+                    // Copy alpha_0_prime = alpha_0 + 2^130 - t_p.
+                    // We constrain this in the custom gate to be derived correctly.
+                    copy(
+                        &mut region,
+                        || "Copy α_0 + 2^130 - t_p",
+                        self.canon_advices[0],
+                        offset,
+                        &alpha_0_prime,
+                    )?;
+
+                    // Decompose α into three pieces,
+                    //     α = α_0 (252 bits)  || α_1 (2 bits) || α_2 (1 bit).
+                    // We only need to witness α_1 and α_2. α_0 is derived in the gate.
+                    // Witness α_1 = α[252..=253]
+                    let alpha_1 = alpha.value().map(|alpha| bitrange_subset(alpha, 252..254));
+                    region.assign_advice(
+                        || "α_1 = α[252..=253]",
+                        self.canon_advices[1],
+                        offset,
+                        || alpha_1.ok_or(Error::SynthesisError),
+                    )?;
+
+                    // Witness the MSB α_2 = α[254]
+                    let alpha_2 = alpha.value().map(|alpha| bitrange_subset(alpha, 254..255));
+                    region.assign_advice(
+                        || "α_2 = α[254]",
+                        self.canon_advices[2],
+                        offset,
+                        || alpha_2.ok_or(Error::SynthesisError),
+                    )?;
+                }
+
+                // Offset 2
+                {
+                    let offset = 2;
+                    // Copy z_13_alpha_0_prime
+                    copy(
+                        &mut region,
+                        || "Copy z_13_alpha_0_prime",
+                        self.canon_advices[0],
+                        offset,
+                        &z_13_alpha_0_prime,
+                    )?;
+
+                    // Copy z_44_alpha
+                    copy(
+                        &mut region,
+                        || "Copy z_44_alpha",
+                        self.canon_advices[1],
+                        offset,
+                        &z_44_alpha,
+                    )?;
+
+                    // Copy z_43_alpha
+                    copy(
+                        &mut region,
+                        || "Copy z_43_alpha",
+                        self.canon_advices[2],
+                        offset,
+                        &z_43_alpha,
+                    )?;
+                }
+
+                Ok(())
+            },
+        )?;
+
+        Ok(result)
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+    use group::Curve;
+    use halo2::{
+        circuit::{Chip, Layouter},
+        plonk::Error,
+    };
+    use pasta_curves::{arithmetic::FieldExt, pallas};
+
+    use crate::circuit::gadget::{
+        ecc::{
+            chip::{EccChip, NullifierK},
+            FixedPointBaseField, Point,
+        },
+        utilities::UtilitiesInstructions,
+    };
+    use crate::constants;
+
+    pub fn test_mul_fixed_base_field(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+    ) -> Result<(), Error> {
+        // nullifier_k
+        let nullifier_k = NullifierK;
+        test_single_base(
+            chip.clone(),
+            layouter.namespace(|| "nullifier_k"),
+            FixedPointBaseField::from_inner(chip, nullifier_k),
+            nullifier_k.generator(),
+        )
+    }
+
+    #[allow(clippy::op_ref)]
+    fn test_single_base(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+        base: FixedPointBaseField<pallas::Affine, EccChip>,
+        base_val: pallas::Affine,
+    ) -> Result<(), Error> {
+        let column = chip.config().advices[0];
+
+        fn constrain_equal(
+            chip: EccChip,
+            mut layouter: impl Layouter<pallas::Base>,
+            base_val: pallas::Affine,
+            scalar_val: pallas::Base,
+            result: Point<pallas::Affine, EccChip>,
+        ) -> Result<(), Error> {
+            // Move scalar from base field into scalar field (which always fits for Pallas).
+            let scalar = pallas::Scalar::from_bytes(&scalar_val.to_bytes()).unwrap();
+            let expected = Point::new(
+                chip,
+                layouter.namespace(|| "expected point"),
+                Some((base_val * scalar).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain result"), &expected)
+        }
+
+        // [a]B
+        {
+            let scalar_fixed = pallas::Base::rand();
+            let result = {
+                let scalar_fixed = chip.load_private(
+                    layouter.namespace(|| "random base field element"),
+                    column,
+                    Some(scalar_fixed),
+                )?;
+                base.mul(layouter.namespace(|| "random [a]B"), scalar_fixed)?
+            };
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "random [a]B"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        // There is a single canonical sequence of window values for which a doubling occurs on the last step:
+        // 1333333333333333333333333333333333333333333333333333333333333333333333333333333333334 in octal.
+        // (There is another *non-canonical* sequence
+        // 5333333333333333333333333333333333333333332711161673731021062440252244051273333333333 in octal.)
+        {
+            let h = pallas::Base::from_u64(constants::H as u64);
+            let scalar_fixed = "1333333333333333333333333333333333333333333333333333333333333333333333333333333333334"
+                        .chars()
+                        .fold(pallas::Base::zero(), |acc, c| {
+                            acc * &h + &pallas::Base::from_u64(c.to_digit(8).unwrap().into())
+                        });
+            let result = {
+                let scalar_fixed = chip.load_private(
+                    layouter.namespace(|| "mul with double"),
+                    column,
+                    Some(scalar_fixed),
+                )?;
+                base.mul(layouter.namespace(|| "mul with double"), scalar_fixed)?
+            };
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "mul with double"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        // [0]B should return (0,0) since it uses complete addition
+        // on the last step.
+        {
+            let scalar_fixed = pallas::Base::zero();
+            let result = {
+                let scalar_fixed =
+                    chip.load_private(layouter.namespace(|| "zero"), column, Some(scalar_fixed))?;
+                base.mul(layouter.namespace(|| "mul by zero"), scalar_fixed)?
+            };
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "mul by zero"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        // [-1]B is the largest base field element
+        {
+            let scalar_fixed = -pallas::Base::one();
+            let result = {
+                let scalar_fixed =
+                    chip.load_private(layouter.namespace(|| "-1"), column, Some(scalar_fixed))?;
+                base.mul(layouter.namespace(|| "mul by -1"), scalar_fixed)?
+            };
+            constrain_equal(
+                chip,
+                layouter.namespace(|| "mul by -1"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        Ok(())
+    }
+}

+ 310 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed/full_width.rs

@@ -0,0 +1,310 @@
+use super::super::{EccConfig, EccPoint, EccScalarFixed, OrchardFixedBasesFull};
+
+use crate::{
+    circuit::gadget::utilities::{range_check, CellValue, Var},
+    constants::{self, util, L_ORCHARD_SCALAR, NUM_WINDOWS},
+};
+use arrayvec::ArrayVec;
+use halo2::{
+    circuit::{Layouter, Region},
+    plonk::{ConstraintSystem, Error, Selector},
+    poly::Rotation,
+};
+use pasta_curves::{arithmetic::FieldExt, pallas};
+
+pub struct Config {
+    q_mul_fixed_full: Selector,
+    super_config: super::Config<NUM_WINDOWS>,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(config: &EccConfig) -> Self {
+        Self {
+            q_mul_fixed_full: config.q_mul_fixed_full,
+            super_config: config.into(),
+        }
+    }
+}
+
+impl Config {
+    pub fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        // Check that each window `k` is within 3 bits
+        meta.create_gate("Full-width fixed-base scalar mul", |meta| {
+            let q_mul_fixed_full = meta.query_selector(self.q_mul_fixed_full);
+            let window = meta.query_advice(self.super_config.window, Rotation::cur());
+
+            self.super_config
+                .coords_check(meta, q_mul_fixed_full.clone(), window.clone())
+                .into_iter()
+                // Constrain each window to a 3-bit value:
+                // 1 * (window - 0) * (window - 1) * ... * (window - 7)
+                .chain(Some((
+                    "window range check",
+                    q_mul_fixed_full * range_check(window, constants::H),
+                )))
+        });
+    }
+
+    /// Witnesses the given scalar as `NUM_WINDOWS` 3-bit windows.
+    ///
+    /// The scalar is allowed to be non-canonical.
+    fn witness(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        scalar: Option<pallas::Scalar>,
+    ) -> Result<EccScalarFixed, Error> {
+        let windows = self.decompose_scalar_fixed::<L_ORCHARD_SCALAR>(scalar, offset, region)?;
+
+        Ok(EccScalarFixed {
+            value: scalar,
+            windows,
+        })
+    }
+
+    /// Witnesses the given scalar as `NUM_WINDOWS` 3-bit windows.
+    ///
+    /// The scalar is allowed to be non-canonical.
+    fn decompose_scalar_fixed<const SCALAR_NUM_BITS: usize>(
+        &self,
+        scalar: Option<pallas::Scalar>,
+        offset: usize,
+        region: &mut Region<'_, pallas::Base>,
+    ) -> Result<ArrayVec<CellValue<pallas::Base>, NUM_WINDOWS>, Error> {
+        // Enable `q_mul_fixed_full` selector
+        for idx in 0..NUM_WINDOWS {
+            self.q_mul_fixed_full.enable(region, offset + idx)?;
+        }
+
+        // Decompose scalar into `k-bit` windows
+        let scalar_windows: Option<Vec<u8>> = scalar.map(|scalar| {
+            util::decompose_word::<pallas::Scalar>(
+                scalar,
+                SCALAR_NUM_BITS,
+                constants::FIXED_BASE_WINDOW_SIZE,
+            )
+        });
+
+        // Store the scalar decomposition
+        let mut windows: ArrayVec<CellValue<pallas::Base>, NUM_WINDOWS> = ArrayVec::new();
+
+        let scalar_windows: Vec<Option<pallas::Base>> = if let Some(windows) = scalar_windows {
+            assert_eq!(windows.len(), NUM_WINDOWS);
+            windows
+                .into_iter()
+                .map(|window| Some(pallas::Base::from_u64(window as u64)))
+                .collect()
+        } else {
+            vec![None; NUM_WINDOWS]
+        };
+
+        for (idx, window) in scalar_windows.into_iter().enumerate() {
+            let window_cell = region.assign_advice(
+                || format!("k[{:?}]", offset + idx),
+                self.super_config.window,
+                offset + idx,
+                || window.ok_or(Error::SynthesisError),
+            )?;
+            windows.push(CellValue::new(window_cell, window));
+        }
+
+        Ok(windows)
+    }
+
+    pub fn assign(
+        &self,
+        mut layouter: impl Layouter<pallas::Base>,
+        scalar: Option<pallas::Scalar>,
+        base: OrchardFixedBasesFull,
+    ) -> Result<(EccPoint, EccScalarFixed), Error> {
+        let (scalar, acc, mul_b) = layouter.assign_region(
+            || "Full-width fixed-base mul (incomplete addition)",
+            |mut region| {
+                let offset = 0;
+
+                let scalar = self.witness(&mut region, offset, scalar)?;
+
+                let (acc, mul_b) = self.super_config.assign_region_inner(
+                    &mut region,
+                    offset,
+                    &(&scalar).into(),
+                    base.into(),
+                    self.q_mul_fixed_full,
+                )?;
+
+                Ok((scalar, acc, mul_b))
+            },
+        )?;
+
+        // Add to the accumulator and return the final result as `[scalar]B`.
+        let result = layouter.assign_region(
+            || "Full-width fixed-base mul (last window, complete addition)",
+            |mut region| {
+                self.super_config
+                    .add_config
+                    .assign_region(&mul_b, &acc, 0, &mut region)
+            },
+        )?;
+
+        #[cfg(test)]
+        // Check that the correct multiple is obtained.
+        {
+            use group::Curve;
+
+            let base: super::OrchardFixedBases = base.into();
+            let real_mul = scalar.value.map(|scalar| base.generator() * scalar);
+            let result = result.point();
+
+            if let (Some(real_mul), Some(result)) = (real_mul, result) {
+                assert_eq!(real_mul.to_affine(), result);
+            }
+        }
+
+        Ok((result, scalar))
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+    use group::Curve;
+    use halo2::{circuit::Layouter, plonk::Error};
+    use pasta_curves::{arithmetic::FieldExt, pallas};
+
+    use crate::circuit::gadget::ecc::{
+        chip::{EccChip, OrchardFixedBasesFull},
+        FixedPoint, Point,
+    };
+    use crate::constants;
+
+    pub fn test_mul_fixed(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+    ) -> Result<(), Error> {
+        // commit_ivk_r
+        let commit_ivk_r = OrchardFixedBasesFull::CommitIvkR;
+        test_single_base(
+            chip.clone(),
+            layouter.namespace(|| "commit_ivk_r"),
+            FixedPoint::from_inner(chip.clone(), commit_ivk_r),
+            commit_ivk_r.generator(),
+        )?;
+
+        // note_commit_r
+        let note_commit_r = OrchardFixedBasesFull::NoteCommitR;
+        test_single_base(
+            chip.clone(),
+            layouter.namespace(|| "note_commit_r"),
+            FixedPoint::from_inner(chip.clone(), note_commit_r),
+            note_commit_r.generator(),
+        )?;
+
+        // value_commit_r
+        let value_commit_r = OrchardFixedBasesFull::ValueCommitR;
+        test_single_base(
+            chip.clone(),
+            layouter.namespace(|| "value_commit_r"),
+            FixedPoint::from_inner(chip.clone(), value_commit_r),
+            value_commit_r.generator(),
+        )?;
+
+        // spend_auth_g
+        let spend_auth_g = OrchardFixedBasesFull::SpendAuthG;
+        test_single_base(
+            chip.clone(),
+            layouter.namespace(|| "spend_auth_g"),
+            FixedPoint::from_inner(chip, spend_auth_g),
+            spend_auth_g.generator(),
+        )?;
+
+        Ok(())
+    }
+
+    #[allow(clippy::op_ref)]
+    fn test_single_base(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+        base: FixedPoint<pallas::Affine, EccChip>,
+        base_val: pallas::Affine,
+    ) -> Result<(), Error> {
+        fn constrain_equal(
+            chip: EccChip,
+            mut layouter: impl Layouter<pallas::Base>,
+            base_val: pallas::Affine,
+            scalar_val: pallas::Scalar,
+            result: Point<pallas::Affine, EccChip>,
+        ) -> Result<(), Error> {
+            let expected = Point::new(
+                chip,
+                layouter.namespace(|| "expected point"),
+                Some((base_val * scalar_val).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain result"), &expected)
+        }
+
+        // [a]B
+        {
+            let scalar_fixed = pallas::Scalar::rand();
+
+            let (result, _) = base.mul(layouter.namespace(|| "random [a]B"), Some(scalar_fixed))?;
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "random [a]B"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        // There is a single canonical sequence of window values for which a doubling occurs on the last step:
+        // 1333333333333333333333333333333333333333333333333333333333333333333333333333333333334 in octal.
+        // (There is another *non-canonical* sequence
+        // 5333333333333333333333333333333333333333332711161673731021062440252244051273333333333 in octal.)
+        {
+            let h = pallas::Scalar::from_u64(constants::H as u64);
+            let scalar_fixed = "1333333333333333333333333333333333333333333333333333333333333333333333333333333333334"
+                        .chars()
+                        .fold(pallas::Scalar::zero(), |acc, c| {
+                            acc * &h + &pallas::Scalar::from_u64(c.to_digit(8).unwrap().into())
+                        });
+            let (result, _) =
+                base.mul(layouter.namespace(|| "mul with double"), Some(scalar_fixed))?;
+
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "mul with double"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        // [0]B should return (0,0) since it uses complete addition
+        // on the last step.
+        {
+            let scalar_fixed = pallas::Scalar::zero();
+            let (result, _) = base.mul(layouter.namespace(|| "mul by zero"), Some(scalar_fixed))?;
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| "mul by zero"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        // [-1]B is the largest scalar field element.
+        {
+            let scalar_fixed = -pallas::Scalar::one();
+            let (result, _) = base.mul(layouter.namespace(|| "mul by -1"), Some(scalar_fixed))?;
+            constrain_equal(
+                chip,
+                layouter.namespace(|| "mul by -1"),
+                base_val,
+                scalar_fixed,
+                result,
+            )?;
+        }
+
+        Ok(())
+    }
+}

+ 541 - 0
examples/halo2/src/circuit/gadget/ecc/chip/mul_fixed/short.rs

@@ -0,0 +1,541 @@
+use std::{array, convert::TryInto};
+
+use super::super::{EccConfig, EccPoint, EccScalarFixedShort};
+use crate::{
+    circuit::gadget::utilities::{copy, decompose_running_sum::RunningSumConfig, CellValue, Var},
+    constants::{ValueCommitV, FIXED_BASE_WINDOW_SIZE, L_VALUE, NUM_WINDOWS_SHORT},
+};
+
+use halo2::{
+    circuit::{Layouter, Region},
+    plonk::{ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+use pasta_curves::pallas;
+
+#[derive(Clone)]
+pub struct Config {
+    // Selector used for fixed-base scalar mul with short signed exponent.
+    q_mul_fixed_short: Selector,
+    q_mul_fixed_running_sum: Selector,
+    running_sum_config: RunningSumConfig<pallas::Base, { FIXED_BASE_WINDOW_SIZE }>,
+    super_config: super::Config<NUM_WINDOWS_SHORT>,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(config: &EccConfig) -> Self {
+        Self {
+            q_mul_fixed_short: config.q_mul_fixed_short,
+            q_mul_fixed_running_sum: config.q_mul_fixed_running_sum,
+            running_sum_config: config.running_sum_config.clone(),
+            super_config: config.into(),
+        }
+    }
+}
+
+impl Config {
+    pub(crate) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate("Short fixed-base mul gate", |meta| {
+            let q_mul_fixed_short = meta.query_selector(self.q_mul_fixed_short);
+            let y_p = meta.query_advice(self.super_config.y_p, Rotation::cur());
+            let y_a = meta.query_advice(self.super_config.add_config.y_qr, Rotation::cur());
+            // z_21
+            let last_window = meta.query_advice(self.super_config.u, Rotation::cur());
+            let sign = meta.query_advice(self.super_config.window, Rotation::cur());
+
+            let one = Expression::Constant(pallas::Base::one());
+
+            // Check that last window is either 0 or 1.
+            let last_window_check = last_window.clone() * (one.clone() - last_window);
+            // Check that sign is either 1 or -1.
+            let sign_check = sign.clone() * sign.clone() - one;
+
+            // `(x_a, y_a)` is the result of `[m]B`, where `m` is the magnitude.
+            // We conditionally negate this result using `y_p = y_a * s`, where `s` is the sign.
+
+            // Check that the final `y_p = y_a` or `y_p = -y_a`
+            let y_check = (y_p.clone() - y_a.clone()) * (y_p.clone() + y_a.clone());
+
+            // Check that the correct sign is witnessed s.t. sign * y_p = y_a
+            let negation_check = sign * y_p - y_a;
+
+            array::IntoIter::new([
+                ("last_window_check", last_window_check),
+                ("sign_check", sign_check),
+                ("y_check", y_check),
+                ("negation_check", negation_check),
+            ])
+            .map(move |(name, poly)| (name, q_mul_fixed_short.clone() * poly))
+        });
+    }
+
+    fn decompose(
+        &self,
+        region: &mut Region<'_, pallas::Base>,
+        offset: usize,
+        magnitude_sign: (CellValue<pallas::Base>, CellValue<pallas::Base>),
+    ) -> Result<EccScalarFixedShort, Error> {
+        let (magnitude, sign) = magnitude_sign;
+
+        // Decompose magnitude
+        let running_sum = self.running_sum_config.copy_decompose(
+            region,
+            offset,
+            magnitude,
+            true,
+            L_VALUE,
+            NUM_WINDOWS_SHORT,
+        )?;
+
+        Ok(EccScalarFixedShort {
+            magnitude,
+            sign,
+            running_sum: (*running_sum).as_slice().try_into().unwrap(),
+        })
+    }
+
+    pub fn assign(
+        &self,
+        mut layouter: impl Layouter<pallas::Base>,
+        magnitude_sign: (CellValue<pallas::Base>, CellValue<pallas::Base>),
+        base: &ValueCommitV,
+    ) -> Result<(EccPoint, EccScalarFixedShort), Error> {
+        let (scalar, acc, mul_b) = layouter.assign_region(
+            || "Short fixed-base mul (incomplete addition)",
+            |mut region| {
+                let offset = 0;
+
+                // Decompose the scalar
+                let scalar = self.decompose(&mut region, offset, magnitude_sign)?;
+
+                let (acc, mul_b) = self.super_config.assign_region_inner(
+                    &mut region,
+                    offset,
+                    &(&scalar).into(),
+                    base.clone().into(),
+                    self.q_mul_fixed_running_sum,
+                )?;
+
+                Ok((scalar, acc, mul_b))
+            },
+        )?;
+
+        // Last window
+        let result = layouter.assign_region(
+            || "Short fixed-base mul (most significant word)",
+            |mut region| {
+                let offset = 0;
+                // Add to the cumulative sum to get `[magnitude]B`.
+                let magnitude_mul = self.super_config.add_config.assign_region(
+                    &mul_b,
+                    &acc,
+                    offset,
+                    &mut region,
+                )?;
+
+                // Increase offset by 1 after complete addition
+                let offset = offset + 1;
+
+                // Copy sign to `window` column
+                let sign = copy(
+                    &mut region,
+                    || "sign",
+                    self.super_config.window,
+                    offset,
+                    &scalar.sign,
+                )?;
+
+                // Copy last window to `u` column.
+                // (Although the last window is not a `u` value; we are copying it into the `u`
+                // column because there is an available cell there.)
+                let z_21 = scalar.running_sum[21];
+                copy(
+                    &mut region,
+                    || "last_window",
+                    self.super_config.u,
+                    offset,
+                    &z_21,
+                )?;
+
+                // Conditionally negate `y`-coordinate
+                let y_val = if let Some(sign) = sign.value() {
+                    if sign == -pallas::Base::one() {
+                        magnitude_mul.y.value().map(|y: pallas::Base| -y)
+                    } else {
+                        magnitude_mul.y.value()
+                    }
+                } else {
+                    None
+                };
+
+                // Enable mul_fixed_short selector on final row
+                self.q_mul_fixed_short.enable(&mut region, offset)?;
+
+                // Assign final `y` to `y_p` column and return final point
+                let y_var = region.assign_advice(
+                    || "y_var",
+                    self.super_config.y_p,
+                    offset,
+                    || y_val.ok_or(Error::SynthesisError),
+                )?;
+
+                Ok(EccPoint {
+                    x: magnitude_mul.x,
+                    y: CellValue::new(y_var, y_val),
+                })
+            },
+        )?;
+
+        #[cfg(test)]
+        // Check that the correct multiple is obtained.
+        // This inlined test is only done for valid 64-bit magnitudes
+        // and valid +/- 1 signs.
+        // Invalid values result in constraint failures which are
+        // tested at the circuit-level.
+        {
+            use group::Curve;
+            use pasta_curves::arithmetic::FieldExt;
+
+            if let (Some(magnitude), Some(sign)) = (scalar.magnitude.value(), scalar.sign.value()) {
+                let magnitude_is_valid =
+                    magnitude <= pallas::Base::from_u64(0xFFFF_FFFF_FFFF_FFFFu64);
+                let sign_is_valid = sign * sign == pallas::Base::one();
+                if magnitude_is_valid && sign_is_valid {
+                    let base: super::OrchardFixedBases = base.clone().into();
+
+                    let scalar = scalar.magnitude.value().zip(scalar.sign.value()).map(
+                        |(magnitude, sign)| {
+                            // Move magnitude from base field into scalar field (which always fits
+                            // for Pallas).
+                            let magnitude =
+                                pallas::Scalar::from_bytes(&magnitude.to_bytes()).unwrap();
+
+                            let sign = if sign == pallas::Base::one() {
+                                pallas::Scalar::one()
+                            } else {
+                                -pallas::Scalar::one()
+                            };
+
+                            magnitude * sign
+                        },
+                    );
+                    let real_mul = scalar.map(|scalar| base.generator() * scalar);
+
+                    let result = result.point();
+
+                    if let (Some(real_mul), Some(result)) = (real_mul, result) {
+                        assert_eq!(real_mul.to_affine(), result);
+                    }
+                }
+            }
+        }
+
+        Ok((result, scalar))
+    }
+}
+
+#[cfg(test)]
+pub mod tests {
+    use group::Curve;
+    use halo2::{
+        circuit::{Chip, Layouter},
+        plonk::{Any, Error},
+    };
+    use pasta_curves::{arithmetic::FieldExt, pallas};
+
+    use crate::circuit::gadget::{
+        ecc::{chip::EccChip, FixedPointShort, Point},
+        utilities::{lookup_range_check::LookupRangeCheckConfig, CellValue, UtilitiesInstructions},
+    };
+    use crate::constants::load::ValueCommitV;
+
+    #[allow(clippy::op_ref)]
+    pub fn test_mul_fixed_short(
+        chip: EccChip,
+        mut layouter: impl Layouter<pallas::Base>,
+    ) -> Result<(), Error> {
+        // value_commit_v
+        let value_commit_v = ValueCommitV::get();
+        let base_val = value_commit_v.generator;
+        let value_commit_v = FixedPointShort::from_inner(chip.clone(), value_commit_v);
+
+        fn load_magnitude_sign(
+            chip: EccChip,
+            mut layouter: impl Layouter<pallas::Base>,
+            magnitude: pallas::Base,
+            sign: pallas::Base,
+        ) -> Result<(CellValue<pallas::Base>, CellValue<pallas::Base>), Error> {
+            let column = chip.config().advices[0];
+            let magnitude =
+                chip.load_private(layouter.namespace(|| "magnitude"), column, Some(magnitude))?;
+            let sign = chip.load_private(layouter.namespace(|| "sign"), column, Some(sign))?;
+
+            Ok((magnitude, sign))
+        }
+
+        fn constrain_equal(
+            chip: EccChip,
+            mut layouter: impl Layouter<pallas::Base>,
+            base_val: pallas::Affine,
+            scalar_val: pallas::Scalar,
+            result: Point<pallas::Affine, EccChip>,
+        ) -> Result<(), Error> {
+            let expected = Point::new(
+                chip,
+                layouter.namespace(|| "expected point"),
+                Some((base_val * scalar_val).to_affine()),
+            )?;
+            result.constrain_equal(layouter.namespace(|| "constrain result"), &expected)
+        }
+
+        let magnitude_signs = [
+            ("mul by +zero", pallas::Base::zero(), pallas::Base::one()),
+            ("mul by -zero", pallas::Base::zero(), -pallas::Base::one()),
+            (
+                "random [a]B",
+                pallas::Base::from_u64(rand::random::<u64>()),
+                {
+                    let mut random_sign = pallas::Base::one();
+                    if rand::random::<bool>() {
+                        random_sign = -random_sign;
+                    }
+                    random_sign
+                },
+            ),
+            (
+                "[2^64 - 1]B",
+                pallas::Base::from_u64(0xFFFF_FFFF_FFFF_FFFFu64),
+                pallas::Base::one(),
+            ),
+            (
+                "-[2^64 - 1]B",
+                pallas::Base::from_u64(0xFFFF_FFFF_FFFF_FFFFu64),
+                -pallas::Base::one(),
+            ),
+            // There is a single canonical sequence of window values for which a doubling occurs on the last step:
+            // 1333333333333333333334 in octal.
+            // [0xB6DB_6DB6_DB6D_B6DC] B
+            (
+                "mul_with_double",
+                pallas::Base::from_u64(0xB6DB_6DB6_DB6D_B6DCu64),
+                pallas::Base::one(),
+            ),
+            (
+                "mul_with_double negative",
+                pallas::Base::from_u64(0xB6DB_6DB6_DB6D_B6DCu64),
+                -pallas::Base::one(),
+            ),
+        ];
+
+        for (name, magnitude, sign) in magnitude_signs.iter() {
+            let (result, _) = {
+                let magnitude_sign = load_magnitude_sign(
+                    chip.clone(),
+                    layouter.namespace(|| *name),
+                    *magnitude,
+                    *sign,
+                )?;
+                value_commit_v.mul(layouter.namespace(|| *name), magnitude_sign)?
+            };
+            // Move from base field into scalar field
+            let scalar = {
+                let magnitude = pallas::Scalar::from_bytes(&magnitude.to_bytes()).unwrap();
+                let sign = if *sign == pallas::Base::one() {
+                    pallas::Scalar::one()
+                } else {
+                    -pallas::Scalar::one()
+                };
+                magnitude * sign
+            };
+            constrain_equal(
+                chip.clone(),
+                layouter.namespace(|| *name),
+                base_val,
+                scalar,
+                result,
+            )?;
+        }
+
+        Ok(())
+    }
+
+    #[test]
+    fn invalid_magnitude_sign() {
+        use crate::circuit::gadget::{
+            ecc::chip::EccConfig,
+            utilities::{CellValue, UtilitiesInstructions},
+        };
+        use halo2::{
+            circuit::{Layouter, SimpleFloorPlanner},
+            dev::{MockProver, VerifyFailure},
+            plonk::{Circuit, ConstraintSystem, Error},
+        };
+
+        #[derive(Default)]
+        struct MyCircuit {
+            magnitude: Option<pallas::Base>,
+            sign: Option<pallas::Base>,
+        }
+
+        impl UtilitiesInstructions<pallas::Base> for MyCircuit {
+            type Var = CellValue<pallas::Base>;
+        }
+
+        impl Circuit<pallas::Base> for MyCircuit {
+            type Config = EccConfig;
+            type FloorPlanner = SimpleFloorPlanner;
+
+            fn without_witnesses(&self) -> Self {
+                Self::default()
+            }
+
+            fn configure(meta: &mut ConstraintSystem<pallas::Base>) -> Self::Config {
+                let advices = [
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                    meta.advice_column(),
+                ];
+                let lookup_table = meta.lookup_table_column();
+                let lagrange_coeffs = [
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                    meta.fixed_column(),
+                ];
+
+                // Shared fixed column for loading constants
+                let constants = meta.fixed_column();
+                meta.enable_constant(constants);
+
+                let range_check = LookupRangeCheckConfig::configure(meta, advices[9], lookup_table);
+                EccChip::configure(meta, advices, lagrange_coeffs, range_check)
+            }
+
+            fn synthesize(
+                &self,
+                config: Self::Config,
+                mut layouter: impl Layouter<pallas::Base>,
+            ) -> Result<(), Error> {
+                let column = config.advices[0];
+
+                let short_config: super::Config = (&config).into();
+                let magnitude_sign = {
+                    let magnitude = self.load_private(
+                        layouter.namespace(|| "load magnitude"),
+                        column,
+                        self.magnitude,
+                    )?;
+                    let sign =
+                        self.load_private(layouter.namespace(|| "load sign"), column, self.sign)?;
+                    (magnitude, sign)
+                };
+
+                short_config.assign(layouter, magnitude_sign, &ValueCommitV::get())?;
+
+                Ok(())
+            }
+        }
+
+        // Magnitude larger than 64 bits should fail
+        {
+            let circuits = [
+                // 2^64
+                MyCircuit {
+                    magnitude: Some(pallas::Base::from_u128(1 << 64)),
+                    sign: Some(pallas::Base::one()),
+                },
+                // -2^64
+                MyCircuit {
+                    magnitude: Some(pallas::Base::from_u128(1 << 64)),
+                    sign: Some(-pallas::Base::one()),
+                },
+                // 2^66
+                MyCircuit {
+                    magnitude: Some(pallas::Base::from_u128(1 << 66)),
+                    sign: Some(pallas::Base::one()),
+                },
+                // -2^66
+                MyCircuit {
+                    magnitude: Some(pallas::Base::from_u128(1 << 66)),
+                    sign: Some(-pallas::Base::one()),
+                },
+                // 2^254
+                MyCircuit {
+                    magnitude: Some(pallas::Base::from_u128(1 << 127).square()),
+                    sign: Some(pallas::Base::one()),
+                },
+                // -2^254
+                MyCircuit {
+                    magnitude: Some(pallas::Base::from_u128(1 << 127).square()),
+                    sign: Some(-pallas::Base::one()),
+                },
+            ];
+
+            for circuit in circuits.iter() {
+                let prover = MockProver::<pallas::Base>::run(11, circuit, vec![]).unwrap();
+                assert_eq!(
+                    prover.verify(),
+                    Err(vec![
+                        VerifyFailure::ConstraintNotSatisfied {
+                            constraint: (
+                                (16, "Short fixed-base mul gate").into(),
+                                0,
+                                "last_window_check"
+                            )
+                                .into(),
+                            row: 26
+                        },
+                        VerifyFailure::Permutation {
+                            column: (Any::Fixed, 9).into(),
+                            row: 0
+                        },
+                        VerifyFailure::Permutation {
+                            column: (Any::Advice, 4).into(),
+                            row: 24
+                        }
+                    ])
+                );
+            }
+        }
+
+        // Sign that is not +/- 1 should fail
+        {
+            let circuit = MyCircuit {
+                magnitude: Some(pallas::Base::from_u64(rand::random::<u64>())),
+                sign: Some(pallas::Base::zero()),
+            };
+
+            let prover = MockProver::<pallas::Base>::run(11, &circuit, vec![]).unwrap();
+            assert_eq!(
+                prover.verify(),
+                Err(vec![
+                    VerifyFailure::ConstraintNotSatisfied {
+                        constraint: ((16, "Short fixed-base mul gate").into(), 1, "sign_check")
+                            .into(),
+                        row: 26
+                    },
+                    VerifyFailure::ConstraintNotSatisfied {
+                        constraint: (
+                            (16, "Short fixed-base mul gate").into(),
+                            3,
+                            "negation_check"
+                        )
+                            .into(),
+                        row: 26
+                    }
+                ])
+            );
+        }
+    }
+}

+ 96 - 0
examples/halo2/src/circuit/gadget/ecc/chip/witness_point.rs

@@ -0,0 +1,96 @@
+use super::{CellValue, EccConfig, EccPoint, Var};
+
+use group::prime::PrimeCurveAffine;
+
+use halo2::{
+    circuit::Region,
+    plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector},
+    poly::Rotation,
+};
+use pasta_curves::{arithmetic::CurveAffine, pallas};
+
+#[derive(Clone, Debug)]
+pub struct Config {
+    q_point: Selector,
+    // x-coordinate
+    pub x: Column<Advice>,
+    // y-coordinate
+    pub y: Column<Advice>,
+}
+
+impl From<&EccConfig> for Config {
+    fn from(ecc_config: &EccConfig) -> Self {
+        Self {
+            q_point: ecc_config.q_point,
+            x: ecc_config.advices[0],
+            y: ecc_config.advices[1],
+        }
+    }
+}
+
+impl Config {
+    pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
+        meta.create_gate("witness point", |meta| {
+            // Check that either the point being witness is either:
+            // - the identity, which is mapped to (0, 0) in affine coordinates; or
+            // - a valid curve point y^2 = x^3 + b, where b = 5 in the Pallas equation
+
+            let q_point = meta.query_selector(self.q_point);
+            let x = meta.query_advice(self.x, Rotation::cur());
+            let y = meta.query_advice(self.y, Rotation::cur());
+
+            // y^2 = x^3 + b
+            let curve_eqn = y.clone().square()
+                - (x.clone().square() * x.clone())
+                - Expression::Constant(pallas::Affine::b());
+
+            vec![
+                q_point.clone() * x * curve_eqn.clone(),
+                q_point * y * curve_eqn,
+            ]
+        });
+    }
+
+    pub(super) fn assign_region(
+        &self,
+        value: Option<pallas::Affine>,
+        offset: usize,
+        region: &mut Region<'_, pallas::Base>,
+    ) -> Result<EccPoint, Error> {
+        // Enable `q_point` selector
+        self.q_point.enable(region, offset)?;
+
+        let value = value.map(|value| {
+            // Map the identity to (0, 0).
+            if value == pallas::Affine::identity() {
+                (pallas::Base::zero(), pallas::Base::zero())
+            } else {
+                let value = value.coordinates().unwrap();
+                (*value.x(), *value.y())
+            }
+        });
+
+        // Assign `x` value
+        let x_val = value.map(|value| value.0);
+        let x_var = region.assign_advice(
+            || "x",
+            self.x,
+            offset,
+            || x_val.ok_or(Error::SynthesisError),
+        )?;
+
+        // Assign `y` value
+        let y_val = value.map(|value| value.1);
+        let y_var = region.assign_advice(
+            || "y",
+            self.y,
+            offset,
+            || y_val.ok_or(Error::SynthesisError),
+        )?;
+
+        Ok(EccPoint {
+            x: CellValue::<pallas::Base>::new(x_var, x_val),
+            y: CellValue::<pallas::Base>::new(y_var, y_val),
+        })
+    }
+}

+ 310 - 0
examples/halo2/src/constants.rs

@@ -0,0 +1,310 @@
+//! Constants used in the Orchard protocol.
+use arrayvec::ArrayVec;
+use ff::{Field, PrimeField};
+use group::Curve;
+use halo2::arithmetic::lagrange_interpolate;
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+pub mod commit_ivk_r;
+pub mod note_commit_r;
+pub mod nullifier_k;
+pub mod spend_auth_g;
+pub mod value_commit_r;
+pub mod value_commit_v;
+
+pub mod load;
+pub mod util;
+
+pub use load::{NullifierK, OrchardFixedBase, OrchardFixedBasesFull, ValueCommitV};
+
+/// The Pallas scalar field modulus is $q = 2^{254} + \mathsf{t_q}$.
+/// <https://github.com/zcash/pasta>
+pub(crate) const T_Q: u128 = 45560315531506369815346746415080538113;
+
+/// The Pallas base field modulus is $p = 2^{254} + \mathsf{t_p}$.
+/// <https://github.com/zcash/pasta>
+pub(crate) const T_P: u128 = 45560315531419706090280762371685220353;
+
+/// $\mathsf{MerkleDepth^{Orchard}}$
+pub(crate) const MERKLE_DEPTH_ORCHARD: usize = 32;
+
+/// $\ell^\mathsf{Orchard}_\mathsf{Merkle}$
+pub(crate) const L_ORCHARD_MERKLE: usize = 255;
+
+/// $\ell^\mathsf{Orchard}_\mathsf{base}$
+pub(crate) const L_ORCHARD_BASE: usize = 255;
+
+/// $\ell^\mathsf{Orchard}_\mathsf{scalar}$
+pub(crate) const L_ORCHARD_SCALAR: usize = 255;
+
+/// $\ell_\mathsf{value}$
+pub(crate) const L_VALUE: usize = 64;
+
+/// T_PRIME_BITS is the smallest multiple of 10 such that 2^T_PRIME_BITS
+/// is larger than t_P. t_P is defined in q_P = 2^254 + t_P for the
+/// Pallas base field.
+pub(crate) const PALLAS_T_PRIME_BITS: usize = 130;
+
+/// SWU hash-to-curve personalization for the spending key base point and
+/// the nullifier base point K^Orchard
+pub const ORCHARD_PERSONALIZATION: &str = "z.cash:Orchard";
+
+/// SWU hash-to-curve personalization for the group hash for key diversification
+pub const KEY_DIVERSIFICATION_PERSONALIZATION: &str = "z.cash:Orchard-gd";
+
+/// SWU hash-to-curve personalization for the value commitment generator
+pub const VALUE_COMMITMENT_PERSONALIZATION: &str = "z.cash:Orchard-cv";
+
+/// SWU hash-to-curve value for the value commitment generator
+pub const VALUE_COMMITMENT_V_BYTES: [u8; 1] = *b"v";
+
+/// SWU hash-to-curve value for the value commitment generator
+pub const VALUE_COMMITMENT_R_BYTES: [u8; 1] = *b"r";
+
+/// SWU hash-to-curve personalization for the note commitment generator
+pub const NOTE_COMMITMENT_PERSONALIZATION: &str = "z.cash:Orchard-NoteCommit";
+
+/// SWU hash-to-curve personalization for the IVK commitment generator
+pub const COMMIT_IVK_PERSONALIZATION: &str = "z.cash:Orchard-CommitIvk";
+
+/// SWU hash-to-curve personalization for the Merkle CRH generator
+pub const MERKLE_CRH_PERSONALIZATION: &str = "z.cash:Orchard-MerkleCRH";
+
+/// Window size for fixed-base scalar multiplication
+pub const FIXED_BASE_WINDOW_SIZE: usize = 3;
+
+/// $2^{`FIXED_BASE_WINDOW_SIZE`}$
+pub const H: usize = 1 << FIXED_BASE_WINDOW_SIZE;
+
+/// Number of windows for a full-width scalar
+pub const NUM_WINDOWS: usize =
+    (pallas::Base::NUM_BITS as usize + FIXED_BASE_WINDOW_SIZE - 1) / FIXED_BASE_WINDOW_SIZE;
+
+/// Number of windows for a short signed scalar
+pub const NUM_WINDOWS_SHORT: usize =
+    (L_VALUE + FIXED_BASE_WINDOW_SIZE - 1) / FIXED_BASE_WINDOW_SIZE;
+
+/// For each fixed base, we calculate its scalar multiples in three-bit windows.
+/// Each window will have $2^3 = 8$ points.
+fn compute_window_table<C: CurveAffine>(base: C, num_windows: usize) -> Vec<[C; H]> {
+    let mut window_table: Vec<[C; H]> = Vec::with_capacity(num_windows);
+
+    // Generate window table entries for all windows but the last.
+    // For these first `num_windows - 1` windows, we compute the multiple [(k+2)*(2^3)^w]B.
+    // Here, w ranges from [0..`num_windows - 1`)
+    for w in 0..(num_windows - 1) {
+        window_table.push(
+            (0..H)
+                .map(|k| {
+                    // scalar = (k+2)*(8^w)
+                    let scalar = C::ScalarExt::from_u64(k as u64 + 2)
+                        * C::ScalarExt::from_u64(H as u64).pow(&[w as u64, 0, 0, 0]);
+                    (base * scalar).to_affine()
+                })
+                .collect::<ArrayVec<C, H>>()
+                .into_inner()
+                .unwrap(),
+        );
+    }
+
+    // Generate window table entries for the last window, w = `num_windows - 1`.
+    // For the last window, we compute [k * (2^3)^w - sum]B, where sum is defined
+    // as sum = \sum_{j = 0}^{`num_windows - 2`} 2^{3j+1}
+    let sum = (0..(num_windows - 1)).fold(C::ScalarExt::zero(), |acc, j| {
+        acc + C::ScalarExt::from_u64(2).pow(&[
+            FIXED_BASE_WINDOW_SIZE as u64 * j as u64 + 1,
+            0,
+            0,
+            0,
+        ])
+    });
+    window_table.push(
+        (0..H)
+            .map(|k| {
+                // scalar = k * (2^3)^w - sum, where w = `num_windows - 1`
+                let scalar = C::ScalarExt::from_u64(k as u64)
+                    * C::ScalarExt::from_u64(H as u64).pow(&[(num_windows - 1) as u64, 0, 0, 0])
+                    - sum;
+                (base * scalar).to_affine()
+            })
+            .collect::<ArrayVec<C, H>>()
+            .into_inner()
+            .unwrap(),
+    );
+
+    window_table
+}
+
+/// For each window, we interpolate the $x$-coordinate.
+/// Here, we pre-compute and store the coefficients of the interpolation polynomial.
+fn compute_lagrange_coeffs<C: CurveAffine>(base: C, num_windows: usize) -> Vec<[C::Base; H]> {
+    // We are interpolating over the 3-bit window, k \in [0..8)
+    let points: Vec<_> = (0..H).map(|i| C::Base::from_u64(i as u64)).collect();
+
+    let window_table = compute_window_table(base, num_windows);
+
+    window_table
+        .iter()
+        .map(|window_points| {
+            let x_window_points: Vec<_> = window_points
+                .iter()
+                .map(|point| *point.coordinates().unwrap().x())
+                .collect();
+            lagrange_interpolate(&points, &x_window_points)
+                .into_iter()
+                .collect::<ArrayVec<C::Base, H>>()
+                .into_inner()
+                .unwrap()
+        })
+        .collect()
+}
+
+/// For each window, $z$ is a field element such that for each point $(x, y)$ in the window:
+/// - $z + y = u^2$ (some square in the field); and
+/// - $z - y$ is not a square.
+/// If successful, return a vector of `(z: u64, us: [C::Base; H])` for each window.
+///
+/// This function was used to generate the `z`s and `u`s for the Orchard fixed
+/// bases. The outputs of this function have been stored as constants, and it
+/// is not called anywhere in this codebase. However, we keep this function here
+/// as a utility for those who wish to use it with different parameters.
+fn find_zs_and_us<C: CurveAffine>(base: C, num_windows: usize) -> Option<Vec<(u64, [C::Base; H])>> {
+    // Closure to find z and u's for one window
+    let find_z_and_us = |window_points: &[C]| {
+        assert_eq!(H, window_points.len());
+
+        let ys: Vec<_> = window_points
+            .iter()
+            .map(|point| *point.coordinates().unwrap().y())
+            .collect();
+        (0..(1000 * (1 << (2 * H)))).find_map(|z| {
+            ys.iter()
+                .map(|&y| {
+                    if (-y + C::Base::from_u64(z)).sqrt().is_none().into() {
+                        (y + C::Base::from_u64(z)).sqrt().into()
+                    } else {
+                        None
+                    }
+                })
+                .collect::<Option<ArrayVec<C::Base, H>>>()
+                .map(|us| (z, us.into_inner().unwrap()))
+        })
+    };
+
+    let window_table = compute_window_table(base, num_windows);
+    window_table
+        .iter()
+        .map(|window_points| find_z_and_us(window_points))
+        .collect()
+}
+
+#[cfg(test)]
+// Test that Lagrange interpolation coefficients reproduce the correct x-coordinate
+// for each fixed-base multiple in each window.
+fn test_lagrange_coeffs<C: CurveAffine>(base: C, num_windows: usize) {
+    let lagrange_coeffs = compute_lagrange_coeffs(base, num_windows);
+
+    // Check first 84 windows, i.e. `k_0, k_1, ..., k_83`
+    for (idx, coeffs) in lagrange_coeffs[0..(num_windows - 1)].iter().enumerate() {
+        // Test each three-bit chunk in this window.
+        for bits in 0..(1 << FIXED_BASE_WINDOW_SIZE) {
+            {
+                // Interpolate the x-coordinate using this window's coefficients
+                let interpolated_x = util::evaluate::<C>(bits, coeffs);
+
+                // Compute the actual x-coordinate of the multiple [(k+2)*(8^w)]B.
+                let point = base
+                    * C::Scalar::from_u64(bits as u64 + 2)
+                    * C::Scalar::from_u64(H as u64).pow(&[idx as u64, 0, 0, 0]);
+                let x = *point.to_affine().coordinates().unwrap().x();
+
+                // Check that the interpolated x-coordinate matches the actual one.
+                assert_eq!(x, interpolated_x);
+            }
+        }
+    }
+
+    // Check last window.
+    for bits in 0..(1 << FIXED_BASE_WINDOW_SIZE) {
+        // Interpolate the x-coordinate using the last window's coefficients
+        let interpolated_x = util::evaluate::<C>(bits, &lagrange_coeffs[num_windows - 1]);
+
+        // Compute the actual x-coordinate of the multiple [k * (8^84) - offset]B,
+        // where offset = \sum_{j = 0}^{83} 2^{3j+1}
+        let offset = (0..(num_windows - 1)).fold(C::Scalar::zero(), |acc, w| {
+            acc + C::Scalar::from_u64(2).pow(&[
+                FIXED_BASE_WINDOW_SIZE as u64 * w as u64 + 1,
+                0,
+                0,
+                0,
+            ])
+        });
+        let scalar = C::Scalar::from_u64(bits as u64)
+            * C::Scalar::from_u64(H as u64).pow(&[(num_windows - 1) as u64, 0, 0, 0])
+            - offset;
+        let point = base * scalar;
+        let x = *point.to_affine().coordinates().unwrap().x();
+
+        // Check that the interpolated x-coordinate matches the actual one.
+        assert_eq!(x, interpolated_x);
+    }
+}
+
+#[cfg(test)]
+// Test that the z-values and u-values satisfy the conditions:
+//      1. z + y = u^2,
+//      2. z - y is not a square
+// for the y-coordinate of each fixed-base multiple in each window.
+fn test_zs_and_us<C: CurveAffine>(base: C, z: &[u64], u: &[[[u8; 32]; H]], num_windows: usize) {
+    let window_table = compute_window_table(base, num_windows);
+
+    for ((u, z), window_points) in u.iter().zip(z.iter()).zip(window_table) {
+        for (u, point) in u.iter().zip(window_points.iter()) {
+            let y = *point.coordinates().unwrap().y();
+            let u = C::Base::from_bytes(u).unwrap();
+            assert_eq!(C::Base::from_u64(*z) + y, u * u); // allow either square root
+            assert!(bool::from((C::Base::from_u64(*z) - y).sqrt().is_none()));
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use ff::PrimeField;
+    use pasta_curves::{arithmetic::FieldExt, pallas};
+
+    #[test]
+    // Nodes in the Merkle tree are Pallas base field elements.
+    fn l_orchard_merkle() {
+        assert_eq!(super::L_ORCHARD_MERKLE, pallas::Base::NUM_BITS as usize);
+    }
+
+    #[test]
+    // Orchard uses the Pallas base field as its base field.
+    fn l_orchard_base() {
+        assert_eq!(super::L_ORCHARD_BASE, pallas::Base::NUM_BITS as usize);
+    }
+
+    #[test]
+    // Orchard uses the Pallas base field as its base field.
+    fn l_orchard_scalar() {
+        assert_eq!(super::L_ORCHARD_SCALAR, pallas::Scalar::NUM_BITS as usize);
+    }
+
+    #[test]
+    fn t_q() {
+        let t_q = pallas::Scalar::from_u128(super::T_Q);
+        let two_pow_254 = pallas::Scalar::from_u128(1 << 127).square();
+        assert_eq!(t_q + two_pow_254, pallas::Scalar::zero());
+    }
+
+    #[test]
+    fn t_p() {
+        let t_p = pallas::Base::from_u128(super::T_P);
+        let two_pow_254 = pallas::Base::from_u128(1 << 127).square();
+        assert_eq!(t_p + two_pow_254, pallas::Base::zero());
+    }
+}

+ 2965 - 0
examples/halo2/src/constants/commit_ivk_r.rs

@@ -0,0 +1,2965 @@
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+/// Generator used in SinsemillaCommit randomness for IVK commitment
+pub const GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        24, 161, 248, 95, 110, 72, 35, 152, 199, 237, 26, 211, 226, 127, 149, 2, 72, 137, 128, 64,
+        10, 41, 52, 22, 78, 19, 112, 80, 205, 44, 162, 37,
+    ],
+    [
+        169, 221, 127, 227, 179, 147, 231, 63, 199, 166, 88, 27, 251, 66, 68, 107, 148, 87, 75, 40,
+        196, 144, 200, 194, 235, 250, 162, 102, 153, 210, 207, 41,
+    ],
+);
+
+/// Full-width z-values for GENERATOR
+pub const Z: [u64; super::NUM_WINDOWS] = [
+    18172, 17390, 61749, 65182, 33835, 155942, 26189, 52444, 40096, 139582, 99218, 20669, 291337,
+    12465, 132211, 75527, 68003, 95835, 237325, 21348, 35494, 215451, 49456, 6332, 99036, 224845,
+    25324, 23649, 83567, 20531, 9280, 72505, 136089, 21180, 132741, 32676, 18421, 107173, 45630,
+    24851, 53914, 156083, 104170, 103364, 25728, 9482, 140699, 42185, 285585, 342, 78646, 326807,
+    68908, 10376, 335378, 138003, 41031, 105432, 37682, 15886, 9325, 42470, 27439, 11884, 13979,
+    214340, 53073, 76228, 67906, 44696, 178502, 130216, 4242, 142464, 211101, 13210, 66616, 103624,
+    7870, 143575, 13058, 27070, 30734, 41157, 2955,
+];
+
+/// Full-width u-values for GENERATOR
+pub const U: [[[u8; 32]; super::H]; super::NUM_WINDOWS] = [
+    [
+        [
+            38, 43, 235, 53, 200, 116, 153, 194, 47, 92, 18, 54, 194, 221, 170, 155, 205, 143, 92,
+            174, 249, 178, 182, 216, 217, 200, 148, 84, 184, 201, 111, 24,
+        ],
+        [
+            57, 210, 96, 16, 151, 52, 218, 250, 249, 5, 128, 232, 65, 231, 239, 167, 102, 8, 198,
+            79, 116, 245, 42, 45, 237, 3, 166, 7, 179, 115, 76, 47,
+        ],
+        [
+            148, 246, 234, 157, 72, 45, 221, 176, 144, 235, 23, 51, 13, 230, 80, 196, 122, 188, 56,
+            231, 230, 193, 9, 121, 49, 208, 79, 184, 14, 56, 178, 28,
+        ],
+        [
+            139, 148, 48, 95, 182, 176, 253, 110, 107, 242, 54, 21, 66, 103, 169, 9, 207, 182, 149,
+            92, 151, 154, 80, 129, 107, 53, 158, 194, 114, 17, 67, 9,
+        ],
+        [
+            194, 138, 153, 65, 192, 221, 4, 110, 115, 182, 50, 98, 165, 161, 49, 119, 63, 24, 149,
+            79, 48, 173, 90, 248, 95, 228, 20, 248, 76, 46, 207, 2,
+        ],
+        [
+            16, 137, 162, 110, 105, 192, 29, 133, 191, 64, 219, 94, 186, 194, 0, 7, 173, 221, 156,
+            4, 123, 86, 65, 138, 26, 16, 223, 218, 186, 247, 121, 47,
+        ],
+        [
+            247, 8, 62, 207, 128, 127, 80, 169, 185, 32, 34, 54, 198, 4, 121, 42, 44, 173, 233,
+            161, 24, 123, 170, 24, 37, 186, 147, 80, 34, 6, 65, 9,
+        ],
+        [
+            184, 197, 131, 138, 111, 145, 67, 140, 183, 100, 227, 73, 20, 230, 2, 163, 56, 202, 35,
+            231, 166, 47, 139, 177, 79, 128, 79, 50, 69, 94, 128, 11,
+        ],
+    ],
+    [
+        [
+            228, 55, 222, 252, 163, 143, 71, 34, 215, 169, 224, 143, 57, 193, 87, 79, 96, 233, 88,
+            62, 140, 245, 144, 229, 235, 154, 159, 134, 176, 74, 10, 13,
+        ],
+        [
+            203, 65, 45, 88, 76, 0, 165, 247, 212, 123, 12, 178, 115, 129, 81, 211, 5, 234, 61,
+            193, 134, 73, 14, 55, 219, 239, 40, 178, 81, 127, 137, 47,
+        ],
+        [
+            118, 42, 192, 222, 58, 225, 233, 65, 254, 82, 102, 94, 121, 192, 112, 149, 5, 80, 129,
+            239, 214, 4, 25, 194, 238, 75, 208, 226, 21, 125, 139, 21,
+        ],
+        [
+            12, 65, 189, 92, 187, 162, 133, 145, 218, 177, 133, 115, 1, 196, 23, 21, 197, 179, 85,
+            84, 108, 33, 144, 51, 214, 196, 130, 16, 7, 67, 46, 10,
+        ],
+        [
+            194, 202, 169, 139, 155, 118, 15, 169, 51, 217, 118, 205, 203, 108, 45, 37, 73, 184,
+            203, 217, 143, 127, 54, 171, 255, 88, 9, 116, 206, 71, 209, 47,
+        ],
+        [
+            15, 52, 133, 149, 237, 80, 61, 200, 227, 82, 203, 228, 135, 59, 240, 163, 219, 1, 185,
+            17, 13, 248, 85, 164, 159, 169, 73, 215, 117, 212, 30, 40,
+        ],
+        [
+            30, 200, 206, 82, 181, 95, 234, 33, 234, 33, 165, 40, 175, 71, 221, 104, 194, 48, 80,
+            67, 53, 13, 117, 131, 33, 22, 81, 190, 171, 25, 115, 24,
+        ],
+        [
+            163, 65, 127, 103, 209, 178, 109, 122, 8, 2, 239, 83, 7, 176, 66, 181, 240, 17, 213,
+            28, 162, 225, 177, 182, 94, 255, 64, 60, 88, 209, 168, 15,
+        ],
+    ],
+    [
+        [
+            201, 133, 116, 99, 229, 230, 38, 216, 86, 54, 178, 27, 247, 159, 97, 189, 201, 167, 43,
+            60, 241, 97, 140, 243, 94, 64, 91, 28, 229, 55, 135, 52,
+        ],
+        [
+            113, 170, 86, 193, 75, 222, 86, 137, 7, 231, 101, 244, 158, 115, 245, 209, 214, 66,
+            163, 228, 218, 85, 56, 43, 164, 132, 221, 237, 72, 184, 91, 37,
+        ],
+        [
+            131, 115, 214, 52, 233, 217, 201, 116, 101, 213, 199, 176, 74, 97, 217, 152, 232, 87,
+            103, 124, 132, 104, 134, 160, 61, 107, 131, 81, 105, 121, 76, 41,
+        ],
+        [
+            172, 44, 224, 71, 175, 155, 74, 150, 250, 191, 110, 29, 54, 146, 12, 247, 71, 51, 30,
+            163, 203, 51, 46, 255, 155, 118, 193, 185, 138, 20, 142, 10,
+        ],
+        [
+            228, 98, 86, 115, 115, 98, 150, 181, 175, 218, 75, 241, 35, 254, 191, 123, 237, 163,
+            215, 117, 6, 203, 219, 65, 245, 161, 225, 48, 67, 224, 161, 21,
+        ],
+        [
+            239, 23, 50, 140, 192, 70, 215, 235, 223, 250, 6, 174, 207, 249, 166, 70, 92, 226, 138,
+            237, 234, 146, 19, 108, 181, 80, 254, 80, 222, 78, 170, 13,
+        ],
+        [
+            105, 88, 220, 64, 178, 53, 69, 119, 203, 32, 253, 120, 201, 121, 5, 44, 163, 120, 62,
+            197, 13, 211, 222, 212, 161, 35, 191, 40, 81, 239, 98, 45,
+        ],
+        [
+            225, 167, 50, 48, 66, 64, 142, 173, 238, 171, 131, 2, 178, 131, 193, 75, 44, 33, 113,
+            143, 159, 81, 201, 165, 3, 132, 91, 69, 72, 122, 5, 34,
+        ],
+    ],
+    [
+        [
+            48, 191, 86, 130, 85, 144, 157, 35, 36, 188, 210, 224, 234, 51, 152, 200, 136, 137,
+            168, 97, 97, 189, 232, 39, 51, 165, 73, 68, 233, 37, 14, 0,
+        ],
+        [
+            6, 86, 175, 220, 24, 9, 216, 103, 64, 7, 180, 171, 14, 90, 234, 37, 65, 169, 198, 195,
+            250, 79, 151, 139, 35, 113, 228, 26, 127, 86, 124, 12,
+        ],
+        [
+            118, 194, 93, 189, 16, 152, 182, 130, 136, 79, 99, 200, 174, 187, 181, 234, 104, 247,
+            239, 41, 176, 229, 214, 219, 110, 234, 253, 107, 53, 222, 57, 12,
+        ],
+        [
+            159, 96, 55, 104, 236, 61, 119, 214, 121, 9, 146, 92, 89, 231, 232, 121, 66, 195, 105,
+            66, 174, 191, 212, 118, 92, 30, 223, 222, 54, 171, 24, 58,
+        ],
+        [
+            78, 244, 3, 237, 108, 152, 99, 240, 195, 201, 58, 149, 136, 57, 170, 126, 90, 168, 8,
+            145, 242, 28, 58, 135, 222, 98, 198, 255, 151, 192, 140, 59,
+        ],
+        [
+            4, 123, 44, 17, 130, 193, 135, 237, 165, 215, 129, 100, 179, 215, 150, 150, 49, 171,
+            181, 27, 231, 149, 64, 82, 184, 41, 59, 255, 227, 23, 132, 45,
+        ],
+        [
+            249, 11, 208, 25, 21, 210, 141, 96, 112, 168, 221, 247, 108, 62, 216, 218, 77, 3, 13,
+            218, 133, 242, 76, 40, 72, 115, 242, 250, 118, 60, 40, 53,
+        ],
+        [
+            18, 205, 34, 103, 209, 200, 230, 196, 181, 56, 100, 22, 64, 56, 135, 88, 22, 193, 121,
+            61, 158, 23, 86, 241, 129, 216, 243, 16, 137, 32, 59, 15,
+        ],
+    ],
+    [
+        [
+            67, 188, 36, 61, 110, 49, 190, 197, 209, 218, 102, 48, 19, 161, 118, 249, 7, 228, 251,
+            198, 69, 36, 45, 30, 122, 113, 228, 247, 161, 90, 215, 62,
+        ],
+        [
+            230, 163, 230, 185, 126, 85, 51, 224, 220, 60, 117, 31, 116, 82, 180, 90, 35, 181, 23,
+            207, 130, 176, 146, 246, 149, 100, 35, 41, 211, 116, 76, 21,
+        ],
+        [
+            104, 218, 189, 68, 148, 109, 54, 65, 126, 148, 202, 72, 11, 178, 190, 241, 252, 42, 57,
+            119, 160, 71, 9, 113, 164, 74, 107, 108, 230, 197, 56, 34,
+        ],
+        [
+            168, 67, 227, 161, 138, 101, 117, 205, 122, 79, 124, 156, 61, 254, 239, 74, 52, 246,
+            136, 119, 100, 235, 111, 76, 249, 228, 33, 181, 76, 48, 244, 8,
+        ],
+        [
+            57, 190, 34, 170, 85, 104, 175, 192, 138, 247, 198, 225, 120, 123, 182, 167, 155, 77,
+            185, 94, 189, 249, 189, 192, 116, 210, 42, 8, 39, 107, 228, 40,
+        ],
+        [
+            137, 250, 104, 160, 92, 133, 234, 253, 148, 230, 125, 116, 77, 156, 46, 97, 98, 93, 98,
+            162, 16, 246, 14, 156, 232, 142, 228, 184, 47, 18, 109, 51,
+        ],
+        [
+            181, 234, 243, 86, 130, 53, 164, 12, 44, 2, 138, 234, 32, 159, 29, 199, 83, 104, 6,
+            251, 157, 245, 119, 243, 192, 124, 83, 141, 84, 7, 253, 37,
+        ],
+        [
+            184, 204, 52, 142, 167, 35, 251, 253, 44, 239, 94, 43, 119, 65, 99, 140, 248, 55, 32,
+            41, 123, 37, 159, 252, 228, 94, 125, 9, 94, 123, 196, 11,
+        ],
+    ],
+    [
+        [
+            220, 27, 17, 56, 42, 160, 65, 249, 171, 103, 2, 144, 119, 111, 173, 243, 169, 246, 74,
+            94, 178, 136, 81, 131, 137, 145, 8, 199, 129, 187, 82, 40,
+        ],
+        [
+            15, 14, 95, 84, 183, 63, 5, 26, 28, 13, 152, 174, 134, 53, 110, 63, 236, 51, 115, 96,
+            128, 222, 243, 133, 220, 138, 207, 69, 248, 68, 163, 54,
+        ],
+        [
+            157, 113, 146, 113, 88, 59, 70, 92, 105, 214, 135, 187, 108, 247, 196, 101, 243, 124,
+            113, 202, 145, 193, 137, 12, 189, 232, 61, 152, 47, 0, 60, 46,
+        ],
+        [
+            121, 124, 78, 224, 66, 132, 151, 208, 89, 48, 210, 229, 250, 246, 187, 115, 132, 246,
+            165, 83, 116, 100, 176, 192, 157, 149, 229, 90, 164, 247, 106, 48,
+        ],
+        [
+            179, 178, 102, 86, 109, 190, 43, 234, 151, 18, 121, 247, 58, 220, 212, 196, 22, 102,
+            246, 146, 53, 145, 90, 244, 127, 11, 114, 56, 230, 49, 239, 3,
+        ],
+        [
+            151, 130, 174, 163, 229, 52, 14, 12, 85, 143, 129, 148, 137, 192, 85, 164, 198, 87,
+            204, 79, 250, 32, 221, 149, 48, 124, 96, 176, 121, 125, 189, 42,
+        ],
+        [
+            153, 91, 143, 221, 234, 183, 165, 196, 154, 195, 52, 111, 21, 112, 103, 209, 234, 104,
+            139, 132, 183, 44, 110, 33, 16, 107, 25, 181, 58, 37, 166, 25,
+        ],
+        [
+            47, 67, 89, 104, 59, 192, 183, 21, 49, 222, 239, 60, 234, 11, 121, 71, 117, 4, 106, 20,
+            226, 178, 1, 44, 19, 241, 180, 203, 241, 195, 228, 53,
+        ],
+    ],
+    [
+        [
+            123, 55, 47, 2, 155, 105, 127, 151, 194, 54, 66, 196, 200, 140, 171, 69, 209, 52, 213,
+            234, 88, 138, 177, 18, 190, 175, 136, 118, 192, 121, 3, 60,
+        ],
+        [
+            40, 147, 60, 109, 168, 148, 50, 213, 164, 67, 54, 126, 99, 78, 221, 27, 65, 208, 53,
+            147, 192, 130, 242, 63, 97, 75, 31, 131, 139, 114, 19, 54,
+        ],
+        [
+            18, 174, 193, 9, 97, 164, 97, 44, 90, 32, 54, 8, 223, 18, 97, 244, 115, 94, 114, 178,
+            66, 198, 193, 209, 161, 56, 189, 97, 138, 189, 172, 7,
+        ],
+        [
+            73, 30, 174, 174, 85, 131, 112, 210, 126, 211, 184, 128, 29, 229, 154, 14, 238, 77, 33,
+            219, 178, 24, 163, 22, 187, 213, 72, 13, 97, 249, 53, 35,
+        ],
+        [
+            194, 188, 159, 242, 52, 203, 166, 37, 70, 147, 45, 10, 253, 195, 93, 160, 97, 99, 166,
+            192, 248, 92, 6, 73, 85, 223, 58, 113, 183, 44, 39, 24,
+        ],
+        [
+            194, 181, 84, 60, 45, 220, 54, 229, 21, 95, 31, 114, 26, 125, 202, 172, 39, 215, 50,
+            55, 67, 247, 154, 124, 28, 205, 103, 132, 150, 24, 115, 7,
+        ],
+        [
+            58, 18, 125, 164, 3, 135, 144, 38, 72, 55, 238, 146, 28, 64, 157, 12, 194, 159, 47,
+            147, 152, 202, 216, 171, 147, 169, 147, 158, 15, 210, 190, 40,
+        ],
+        [
+            17, 195, 245, 108, 190, 67, 179, 94, 90, 53, 44, 36, 195, 149, 189, 61, 45, 129, 211,
+            47, 82, 12, 48, 12, 239, 162, 216, 173, 129, 242, 89, 41,
+        ],
+    ],
+    [
+        [
+            87, 63, 207, 4, 57, 122, 127, 205, 17, 114, 67, 49, 57, 125, 176, 23, 124, 186, 31, 23,
+            240, 37, 248, 255, 196, 215, 78, 156, 76, 11, 208, 11,
+        ],
+        [
+            198, 119, 167, 135, 159, 121, 168, 1, 179, 169, 15, 36, 219, 227, 120, 22, 57, 156,
+            149, 193, 81, 160, 60, 172, 173, 107, 136, 2, 207, 75, 109, 0,
+        ],
+        [
+            147, 190, 194, 154, 209, 165, 211, 180, 54, 99, 243, 144, 148, 239, 140, 181, 45, 138,
+            133, 128, 39, 218, 159, 246, 111, 140, 48, 146, 24, 179, 55, 30,
+        ],
+        [
+            163, 218, 69, 41, 175, 237, 150, 201, 166, 234, 156, 55, 5, 169, 73, 51, 248, 20, 47,
+            40, 18, 54, 245, 235, 23, 99, 169, 52, 95, 112, 90, 41,
+        ],
+        [
+            111, 154, 122, 13, 187, 181, 205, 140, 152, 97, 152, 244, 166, 102, 113, 80, 215, 209,
+            114, 78, 159, 55, 132, 147, 138, 70, 3, 99, 86, 96, 240, 43,
+        ],
+        [
+            244, 247, 239, 143, 87, 37, 51, 146, 36, 1, 168, 235, 223, 145, 44, 138, 215, 83, 247,
+            146, 205, 128, 244, 70, 39, 193, 87, 202, 180, 14, 22, 48,
+        ],
+        [
+            214, 99, 131, 88, 28, 66, 84, 178, 111, 245, 18, 26, 116, 39, 160, 226, 138, 120, 140,
+            162, 102, 240, 180, 96, 55, 0, 160, 136, 163, 92, 123, 12,
+        ],
+        [
+            180, 185, 68, 236, 220, 8, 73, 25, 32, 188, 243, 53, 80, 7, 122, 72, 114, 205, 148,
+            232, 148, 125, 144, 253, 16, 191, 120, 5, 110, 160, 179, 4,
+        ],
+    ],
+    [
+        [
+            215, 36, 133, 246, 146, 247, 247, 148, 226, 94, 231, 75, 215, 107, 94, 114, 33, 123,
+            159, 150, 147, 196, 251, 228, 202, 91, 248, 52, 181, 225, 3, 12,
+        ],
+        [
+            151, 217, 103, 127, 100, 72, 73, 217, 249, 232, 233, 179, 164, 101, 133, 105, 70, 186,
+            220, 239, 179, 151, 224, 24, 166, 8, 77, 37, 104, 146, 35, 8,
+        ],
+        [
+            236, 156, 172, 137, 14, 45, 196, 85, 119, 4, 3, 132, 17, 254, 213, 253, 82, 236, 229,
+            61, 129, 51, 56, 44, 145, 202, 139, 85, 193, 218, 144, 49,
+        ],
+        [
+            84, 3, 20, 83, 134, 163, 190, 186, 93, 102, 59, 195, 164, 237, 231, 68, 181, 194, 48,
+            66, 161, 190, 118, 16, 255, 5, 182, 100, 50, 129, 103, 35,
+        ],
+        [
+            174, 23, 251, 144, 221, 20, 104, 213, 183, 219, 143, 177, 241, 88, 90, 160, 82, 237,
+            109, 168, 6, 241, 168, 159, 172, 32, 71, 95, 195, 34, 17, 40,
+        ],
+        [
+            201, 152, 156, 13, 83, 24, 2, 213, 237, 49, 196, 157, 27, 13, 179, 251, 252, 54, 214,
+            118, 248, 220, 194, 210, 106, 126, 60, 148, 62, 216, 181, 42,
+        ],
+        [
+            13, 123, 103, 146, 116, 115, 226, 70, 243, 30, 134, 205, 127, 136, 233, 193, 46, 136,
+            185, 99, 224, 56, 117, 170, 127, 41, 79, 144, 143, 66, 178, 54,
+        ],
+        [
+            106, 68, 95, 199, 8, 128, 1, 227, 77, 41, 100, 89, 12, 106, 31, 249, 50, 31, 179, 199,
+            97, 200, 187, 138, 173, 68, 55, 220, 204, 113, 185, 17,
+        ],
+    ],
+    [
+        [
+            69, 139, 165, 232, 189, 151, 135, 228, 146, 203, 4, 199, 79, 88, 205, 208, 219, 227,
+            134, 54, 21, 219, 234, 102, 79, 40, 154, 105, 27, 90, 75, 54,
+        ],
+        [
+            106, 255, 138, 45, 182, 156, 63, 135, 105, 239, 114, 52, 216, 133, 125, 168, 94, 216,
+            27, 167, 135, 95, 103, 111, 114, 247, 194, 132, 111, 90, 246, 48,
+        ],
+        [
+            194, 9, 225, 228, 74, 52, 98, 220, 90, 99, 240, 151, 235, 87, 61, 11, 72, 37, 144, 202,
+            67, 171, 76, 97, 148, 76, 131, 111, 128, 79, 83, 26,
+        ],
+        [
+            101, 226, 33, 108, 207, 233, 24, 201, 236, 245, 69, 101, 214, 18, 21, 16, 193, 128,
+            124, 109, 38, 27, 197, 241, 67, 19, 82, 53, 4, 248, 223, 13,
+        ],
+        [
+            198, 98, 126, 137, 89, 45, 3, 147, 114, 128, 182, 243, 147, 132, 201, 109, 58, 39, 166,
+            193, 81, 8, 209, 235, 10, 108, 253, 67, 151, 135, 161, 30,
+        ],
+        [
+            119, 53, 78, 105, 73, 215, 248, 66, 16, 213, 74, 178, 30, 136, 181, 111, 193, 70, 85,
+            19, 183, 100, 90, 56, 178, 95, 217, 97, 223, 243, 11, 52,
+        ],
+        [
+            11, 121, 245, 230, 235, 125, 64, 10, 52, 221, 159, 37, 113, 169, 8, 44, 95, 145, 89,
+            93, 160, 190, 68, 235, 48, 159, 108, 13, 41, 197, 147, 51,
+        ],
+        [
+            189, 245, 38, 171, 5, 217, 150, 237, 129, 197, 196, 176, 83, 68, 183, 90, 243, 92, 121,
+            113, 83, 130, 251, 91, 115, 197, 4, 59, 35, 255, 56, 39,
+        ],
+    ],
+    [
+        [
+            250, 115, 123, 108, 134, 106, 234, 116, 143, 122, 119, 128, 48, 173, 72, 120, 37, 103,
+            242, 160, 140, 207, 135, 191, 7, 13, 97, 18, 161, 131, 6, 2,
+        ],
+        [
+            236, 123, 232, 92, 251, 155, 53, 38, 1, 189, 120, 44, 155, 102, 233, 118, 75, 140, 244,
+            133, 61, 215, 248, 63, 84, 66, 43, 167, 68, 91, 80, 20,
+        ],
+        [
+            103, 218, 138, 213, 206, 237, 104, 38, 243, 214, 154, 113, 158, 50, 252, 11, 142, 32,
+            87, 99, 211, 75, 60, 169, 53, 209, 7, 76, 78, 225, 215, 46,
+        ],
+        [
+            194, 226, 180, 141, 202, 156, 21, 38, 187, 135, 186, 116, 99, 202, 19, 181, 81, 234, 7,
+            108, 23, 13, 38, 68, 196, 172, 225, 178, 152, 58, 83, 7,
+        ],
+        [
+            160, 134, 246, 154, 234, 171, 190, 13, 94, 84, 40, 86, 32, 145, 212, 199, 66, 176, 119,
+            189, 174, 251, 168, 28, 205, 119, 7, 250, 253, 231, 138, 39,
+        ],
+        [
+            134, 77, 107, 31, 55, 174, 187, 91, 199, 170, 82, 87, 159, 255, 112, 212, 32, 53, 61,
+            0, 17, 237, 216, 205, 247, 143, 120, 131, 2, 204, 154, 60,
+        ],
+        [
+            201, 181, 59, 200, 44, 104, 196, 246, 253, 204, 123, 20, 169, 127, 230, 157, 145, 197,
+            218, 90, 99, 224, 11, 221, 2, 72, 99, 53, 193, 146, 156, 47,
+        ],
+        [
+            41, 245, 146, 251, 215, 173, 135, 54, 143, 105, 8, 15, 38, 154, 64, 148, 54, 118, 107,
+            148, 197, 91, 216, 16, 224, 57, 25, 131, 187, 219, 186, 27,
+        ],
+    ],
+    [
+        [
+            221, 254, 116, 99, 181, 55, 18, 178, 66, 57, 174, 12, 24, 26, 136, 35, 149, 84, 253,
+            62, 207, 82, 150, 156, 131, 17, 13, 156, 174, 72, 179, 29,
+        ],
+        [
+            210, 46, 48, 176, 52, 56, 63, 149, 44, 238, 40, 236, 155, 80, 243, 29, 111, 36, 240,
+            29, 67, 187, 45, 146, 116, 237, 205, 52, 176, 254, 75, 17,
+        ],
+        [
+            35, 250, 61, 135, 124, 240, 188, 158, 248, 141, 147, 223, 240, 184, 92, 228, 49, 49,
+            72, 46, 108, 235, 136, 230, 93, 215, 199, 242, 178, 43, 47, 7,
+        ],
+        [
+            27, 112, 31, 19, 47, 93, 177, 182, 109, 126, 14, 233, 59, 218, 60, 87, 133, 223, 62,
+            136, 167, 36, 184, 169, 221, 172, 74, 199, 168, 126, 247, 45,
+        ],
+        [
+            80, 135, 205, 38, 126, 77, 134, 91, 95, 2, 64, 226, 227, 181, 167, 114, 56, 63, 119,
+            60, 209, 210, 203, 55, 79, 59, 78, 6, 222, 71, 207, 7,
+        ],
+        [
+            113, 129, 202, 15, 125, 102, 224, 36, 204, 5, 170, 228, 146, 244, 105, 149, 99, 250,
+            57, 123, 198, 56, 145, 25, 6, 30, 112, 221, 201, 228, 136, 37,
+        ],
+        [
+            225, 128, 150, 104, 49, 57, 121, 187, 66, 93, 43, 114, 206, 64, 81, 11, 22, 40, 30,
+            152, 2, 85, 134, 241, 144, 41, 217, 215, 240, 196, 178, 28,
+        ],
+        [
+            46, 50, 121, 120, 185, 246, 24, 62, 72, 218, 18, 73, 186, 112, 101, 125, 62, 187, 9,
+            87, 184, 138, 229, 211, 213, 196, 116, 71, 119, 146, 214, 30,
+        ],
+    ],
+    [
+        [
+            213, 25, 243, 89, 153, 12, 106, 58, 2, 63, 93, 221, 49, 252, 84, 150, 204, 15, 253,
+            151, 32, 140, 131, 150, 37, 245, 125, 223, 136, 115, 26, 17,
+        ],
+        [
+            167, 41, 163, 182, 251, 78, 242, 173, 178, 104, 236, 137, 143, 17, 73, 129, 241, 171,
+            222, 153, 144, 64, 170, 21, 95, 62, 172, 107, 30, 237, 51, 12,
+        ],
+        [
+            206, 103, 30, 156, 70, 3, 208, 135, 21, 109, 32, 63, 76, 96, 112, 150, 219, 199, 141,
+            194, 110, 229, 101, 4, 11, 185, 50, 63, 80, 240, 133, 44,
+        ],
+        [
+            174, 29, 247, 44, 246, 20, 223, 133, 6, 122, 102, 210, 91, 66, 105, 178, 55, 227, 112,
+            89, 29, 77, 237, 38, 219, 12, 127, 136, 117, 27, 195, 49,
+        ],
+        [
+            74, 141, 53, 90, 118, 93, 102, 49, 234, 115, 93, 27, 174, 29, 70, 255, 188, 50, 130,
+            41, 76, 244, 205, 198, 192, 226, 205, 227, 48, 174, 136, 62,
+        ],
+        [
+            129, 45, 8, 72, 246, 235, 199, 178, 112, 64, 206, 81, 216, 82, 19, 228, 89, 200, 21,
+            102, 175, 15, 239, 69, 246, 47, 112, 164, 203, 196, 205, 60,
+        ],
+        [
+            26, 222, 152, 124, 45, 123, 245, 33, 71, 30, 177, 117, 217, 100, 245, 240, 159, 9, 153,
+            130, 155, 25, 51, 236, 251, 29, 196, 228, 149, 241, 148, 47,
+        ],
+        [
+            206, 140, 210, 217, 54, 219, 195, 231, 81, 215, 183, 190, 86, 184, 157, 184, 46, 131,
+            138, 159, 41, 166, 150, 180, 101, 138, 137, 131, 117, 112, 78, 28,
+        ],
+    ],
+    [
+        [
+            32, 245, 224, 194, 45, 105, 155, 242, 83, 25, 197, 160, 98, 50, 249, 46, 199, 214, 54,
+            83, 43, 191, 245, 97, 162, 116, 22, 166, 95, 158, 36, 3,
+        ],
+        [
+            92, 39, 151, 43, 3, 140, 150, 234, 15, 221, 112, 255, 2, 238, 89, 228, 133, 243, 245,
+            71, 224, 137, 8, 137, 190, 6, 26, 149, 173, 204, 57, 1,
+        ],
+        [
+            64, 18, 216, 246, 50, 188, 216, 96, 35, 148, 164, 152, 224, 77, 82, 121, 239, 17, 89,
+            103, 117, 43, 110, 154, 115, 83, 163, 27, 129, 99, 231, 13,
+        ],
+        [
+            102, 185, 48, 229, 26, 28, 30, 88, 191, 9, 87, 48, 209, 98, 186, 2, 241, 1, 154, 148,
+            50, 219, 151, 236, 144, 38, 10, 96, 168, 89, 234, 6,
+        ],
+        [
+            219, 25, 241, 139, 137, 23, 114, 87, 186, 197, 152, 231, 115, 5, 180, 151, 13, 42, 143,
+            196, 195, 63, 191, 225, 55, 185, 80, 252, 168, 220, 249, 43,
+        ],
+        [
+            56, 39, 181, 129, 25, 70, 151, 78, 137, 135, 43, 71, 194, 175, 188, 81, 187, 23, 190,
+            30, 99, 212, 106, 103, 189, 224, 21, 62, 46, 202, 112, 17,
+        ],
+        [
+            66, 143, 116, 167, 150, 120, 18, 169, 89, 188, 184, 176, 213, 238, 77, 55, 5, 116, 177,
+            74, 74, 103, 149, 26, 85, 123, 133, 205, 163, 105, 200, 13,
+        ],
+        [
+            152, 99, 40, 98, 102, 86, 25, 59, 40, 40, 161, 67, 165, 68, 132, 79, 23, 246, 234, 78,
+            171, 191, 53, 141, 162, 249, 128, 33, 235, 138, 202, 45,
+        ],
+    ],
+    [
+        [
+            156, 90, 57, 85, 160, 134, 120, 45, 141, 95, 233, 198, 87, 48, 28, 164, 86, 0, 216,
+            168, 23, 88, 84, 27, 191, 41, 191, 214, 134, 146, 125, 16,
+        ],
+        [
+            202, 213, 237, 17, 167, 12, 116, 168, 19, 16, 201, 1, 174, 151, 151, 109, 96, 38, 70,
+            163, 159, 105, 232, 241, 143, 122, 123, 74, 176, 146, 46, 53,
+        ],
+        [
+            86, 35, 102, 245, 218, 90, 113, 176, 240, 10, 35, 199, 207, 154, 109, 97, 55, 206, 79,
+            25, 161, 155, 108, 28, 71, 143, 98, 25, 41, 208, 15, 38,
+        ],
+        [
+            21, 105, 152, 96, 135, 12, 77, 15, 38, 243, 33, 154, 192, 46, 89, 206, 173, 203, 165,
+            27, 53, 154, 68, 226, 247, 152, 10, 215, 107, 10, 82, 20,
+        ],
+        [
+            169, 199, 174, 125, 91, 102, 240, 104, 65, 246, 97, 246, 21, 94, 61, 40, 70, 166, 200,
+            43, 59, 181, 54, 81, 65, 252, 130, 95, 103, 237, 172, 26,
+        ],
+        [
+            82, 236, 145, 30, 120, 228, 221, 15, 244, 173, 130, 104, 246, 245, 234, 230, 19, 52,
+            247, 195, 227, 206, 247, 161, 160, 242, 57, 139, 131, 232, 217, 19,
+        ],
+        [
+            66, 96, 175, 203, 229, 111, 75, 250, 199, 105, 135, 242, 35, 238, 196, 110, 62, 122,
+            118, 141, 104, 14, 152, 242, 122, 177, 206, 36, 47, 96, 80, 35,
+        ],
+        [
+            44, 44, 255, 47, 209, 96, 218, 60, 192, 105, 16, 204, 135, 134, 96, 245, 21, 175, 105,
+            29, 246, 177, 111, 60, 156, 25, 120, 138, 101, 6, 90, 2,
+        ],
+    ],
+    [
+        [
+            31, 184, 49, 71, 143, 43, 71, 222, 169, 53, 216, 191, 22, 249, 138, 207, 21, 24, 3, 86,
+            46, 69, 90, 63, 151, 252, 63, 56, 97, 158, 177, 47,
+        ],
+        [
+            80, 11, 236, 123, 242, 1, 232, 3, 112, 167, 77, 43, 73, 167, 74, 53, 127, 83, 151, 237,
+            182, 3, 198, 28, 92, 233, 64, 159, 129, 241, 31, 35,
+        ],
+        [
+            164, 68, 201, 171, 117, 151, 76, 22, 43, 3, 101, 209, 79, 199, 10, 242, 68, 41, 82,
+            158, 19, 203, 6, 85, 240, 109, 130, 203, 49, 23, 236, 19,
+        ],
+        [
+            200, 91, 200, 245, 221, 228, 3, 161, 167, 14, 150, 242, 143, 230, 90, 251, 97, 215,
+            108, 155, 196, 17, 25, 66, 60, 39, 65, 19, 221, 235, 105, 21,
+        ],
+        [
+            38, 200, 246, 45, 43, 12, 141, 145, 41, 87, 40, 36, 165, 94, 46, 223, 254, 245, 129,
+            61, 36, 195, 1, 60, 183, 142, 10, 11, 175, 127, 244, 50,
+        ],
+        [
+            202, 242, 204, 124, 201, 204, 110, 3, 156, 77, 23, 67, 177, 83, 55, 126, 93, 132, 159,
+            253, 43, 207, 216, 254, 65, 208, 218, 161, 36, 155, 215, 41,
+        ],
+        [
+            196, 246, 176, 207, 138, 104, 9, 125, 222, 187, 126, 223, 6, 40, 98, 57, 3, 154, 54,
+            192, 46, 76, 238, 121, 186, 37, 110, 93, 80, 189, 123, 46,
+        ],
+        [
+            2, 55, 61, 20, 25, 205, 105, 149, 79, 130, 87, 233, 206, 198, 185, 72, 135, 84, 237,
+            91, 194, 22, 122, 251, 239, 110, 119, 81, 185, 19, 172, 26,
+        ],
+    ],
+    [
+        [
+            137, 32, 193, 249, 241, 195, 226, 227, 9, 156, 214, 152, 183, 175, 233, 7, 144, 225,
+            117, 40, 17, 144, 155, 184, 73, 22, 186, 201, 126, 48, 73, 19,
+        ],
+        [
+            4, 229, 38, 227, 150, 237, 160, 16, 19, 8, 50, 139, 36, 140, 14, 168, 176, 170, 247,
+            251, 117, 175, 3, 26, 75, 51, 177, 30, 213, 155, 100, 1,
+        ],
+        [
+            38, 62, 6, 144, 171, 163, 7, 83, 176, 32, 82, 125, 170, 197, 243, 129, 78, 13, 230, 36,
+            58, 77, 17, 66, 97, 78, 237, 162, 166, 120, 64, 0,
+        ],
+        [
+            173, 217, 143, 101, 223, 2, 93, 90, 207, 15, 89, 140, 23, 62, 71, 51, 73, 66, 1, 243,
+            181, 155, 44, 210, 198, 184, 102, 129, 193, 66, 153, 53,
+        ],
+        [
+            46, 132, 212, 140, 34, 60, 168, 43, 71, 11, 78, 130, 37, 88, 126, 124, 34, 140, 178,
+            169, 206, 180, 230, 6, 220, 121, 69, 2, 158, 251, 104, 52,
+        ],
+        [
+            25, 88, 235, 52, 117, 217, 117, 152, 20, 28, 113, 243, 252, 122, 60, 178, 249, 235,
+            104, 54, 139, 106, 153, 45, 215, 237, 205, 54, 177, 250, 154, 60,
+        ],
+        [
+            144, 20, 151, 189, 75, 212, 154, 40, 119, 94, 131, 185, 43, 52, 37, 243, 134, 85, 176,
+            15, 165, 233, 201, 115, 24, 114, 213, 43, 157, 18, 200, 13,
+        ],
+        [
+            62, 211, 60, 152, 90, 25, 180, 150, 167, 108, 41, 45, 59, 205, 58, 4, 58, 110, 221,
+            131, 148, 83, 110, 196, 178, 38, 115, 216, 192, 159, 9, 1,
+        ],
+    ],
+    [
+        [
+            120, 126, 7, 168, 237, 253, 5, 172, 68, 40, 41, 161, 97, 41, 131, 250, 140, 183, 32,
+            45, 234, 188, 137, 104, 201, 78, 209, 11, 146, 115, 26, 38,
+        ],
+        [
+            125, 25, 235, 249, 4, 225, 85, 246, 226, 249, 209, 153, 173, 235, 39, 138, 126, 187,
+            144, 237, 237, 238, 7, 242, 28, 27, 0, 172, 65, 228, 114, 33,
+        ],
+        [
+            134, 96, 205, 140, 233, 160, 20, 132, 91, 169, 133, 20, 3, 101, 164, 137, 57, 128, 66,
+            255, 186, 31, 215, 57, 244, 144, 111, 29, 208, 113, 70, 8,
+        ],
+        [
+            77, 134, 125, 207, 98, 204, 79, 2, 151, 187, 122, 89, 19, 157, 8, 229, 65, 231, 71,
+            186, 149, 131, 45, 52, 44, 229, 213, 117, 124, 97, 224, 47,
+        ],
+        [
+            22, 31, 170, 116, 29, 149, 167, 52, 101, 81, 99, 102, 23, 54, 43, 88, 219, 239, 124,
+            120, 110, 103, 95, 93, 114, 82, 235, 254, 74, 162, 12, 43,
+        ],
+        [
+            157, 112, 208, 244, 62, 51, 73, 171, 174, 66, 197, 67, 115, 203, 126, 35, 72, 131, 50,
+            156, 249, 148, 69, 112, 107, 76, 103, 122, 52, 224, 209, 34,
+        ],
+        [
+            244, 70, 79, 63, 227, 180, 125, 21, 167, 95, 230, 153, 64, 29, 5, 96, 83, 108, 176,
+            197, 206, 46, 250, 57, 137, 57, 65, 75, 89, 64, 29, 27,
+        ],
+        [
+            215, 163, 172, 33, 213, 111, 149, 27, 88, 233, 32, 105, 3, 129, 48, 145, 235, 26, 134,
+            7, 186, 59, 56, 176, 166, 104, 40, 0, 201, 231, 243, 26,
+        ],
+    ],
+    [
+        [
+            87, 35, 156, 129, 118, 185, 139, 129, 110, 245, 61, 122, 247, 13, 221, 235, 250, 173,
+            136, 136, 56, 228, 183, 140, 161, 37, 46, 237, 158, 248, 157, 13,
+        ],
+        [
+            74, 120, 21, 253, 130, 99, 169, 173, 59, 189, 108, 55, 191, 30, 46, 129, 218, 43, 47,
+            42, 77, 169, 140, 23, 93, 188, 9, 170, 61, 248, 34, 57,
+        ],
+        [
+            80, 93, 107, 130, 213, 98, 234, 84, 99, 7, 36, 75, 206, 150, 12, 208, 63, 247, 223, 3,
+            162, 231, 236, 66, 187, 224, 84, 96, 153, 103, 18, 50,
+        ],
+        [
+            235, 121, 156, 218, 55, 8, 17, 101, 33, 51, 218, 31, 10, 163, 169, 198, 12, 140, 123,
+            213, 24, 143, 38, 73, 123, 129, 151, 98, 62, 250, 17, 26,
+        ],
+        [
+            152, 84, 193, 18, 114, 227, 10, 46, 250, 144, 81, 78, 116, 12, 132, 137, 13, 227, 147,
+            39, 169, 173, 126, 199, 152, 63, 187, 69, 207, 151, 152, 23,
+        ],
+        [
+            142, 128, 46, 231, 126, 20, 245, 111, 146, 158, 213, 71, 174, 100, 72, 13, 94, 126,
+            127, 238, 83, 30, 6, 250, 78, 248, 90, 42, 65, 81, 114, 29,
+        ],
+        [
+            252, 29, 137, 205, 37, 85, 213, 156, 238, 200, 193, 190, 5, 140, 230, 216, 163, 239,
+            18, 210, 130, 93, 88, 105, 99, 242, 155, 92, 108, 125, 154, 11,
+        ],
+        [
+            138, 93, 184, 46, 124, 53, 181, 41, 164, 228, 229, 50, 252, 30, 84, 156, 203, 236, 235,
+            67, 175, 177, 58, 126, 90, 46, 76, 174, 16, 102, 35, 50,
+        ],
+    ],
+    [
+        [
+            66, 109, 120, 10, 148, 162, 208, 189, 108, 229, 165, 252, 148, 105, 186, 23, 216, 168,
+            56, 226, 106, 133, 249, 188, 193, 32, 132, 189, 136, 203, 245, 38,
+        ],
+        [
+            212, 196, 252, 200, 36, 140, 206, 76, 62, 118, 3, 112, 247, 254, 149, 13, 67, 213, 158,
+            104, 163, 214, 32, 99, 168, 108, 141, 18, 67, 85, 161, 35,
+        ],
+        [
+            117, 70, 191, 243, 235, 232, 147, 89, 59, 150, 37, 79, 22, 49, 139, 155, 203, 203, 79,
+            3, 54, 87, 18, 48, 35, 139, 5, 51, 152, 20, 224, 35,
+        ],
+        [
+            146, 35, 71, 13, 6, 47, 60, 35, 176, 230, 253, 114, 246, 137, 83, 82, 255, 112, 139,
+            147, 189, 153, 219, 44, 90, 58, 79, 48, 155, 97, 192, 50,
+        ],
+        [
+            176, 96, 137, 224, 105, 17, 148, 136, 14, 4, 146, 64, 224, 173, 196, 12, 117, 17, 203,
+            113, 202, 147, 125, 248, 46, 138, 240, 187, 211, 244, 126, 51,
+        ],
+        [
+            10, 238, 39, 125, 20, 139, 248, 221, 187, 58, 244, 18, 33, 146, 43, 25, 68, 128, 171,
+            75, 102, 157, 103, 134, 66, 213, 155, 96, 206, 101, 216, 51,
+        ],
+        [
+            235, 115, 86, 91, 137, 109, 145, 181, 76, 249, 206, 228, 197, 247, 27, 239, 54, 57,
+            250, 235, 43, 205, 177, 56, 13, 244, 118, 196, 197, 47, 152, 56,
+        ],
+        [
+            239, 14, 150, 59, 172, 245, 69, 211, 26, 66, 243, 223, 239, 135, 123, 167, 246, 75, 72,
+            217, 29, 85, 66, 136, 66, 252, 212, 164, 82, 83, 8, 17,
+        ],
+    ],
+    [
+        [
+            240, 64, 94, 89, 242, 218, 143, 212, 160, 227, 13, 154, 211, 1, 137, 199, 87, 102, 155,
+            2, 238, 22, 135, 90, 1, 31, 3, 72, 120, 186, 216, 26,
+        ],
+        [
+            17, 177, 67, 243, 214, 113, 198, 12, 36, 183, 67, 197, 88, 118, 47, 156, 54, 81, 244,
+            19, 84, 250, 44, 63, 91, 1, 122, 131, 32, 140, 156, 50,
+        ],
+        [
+            18, 131, 239, 7, 227, 62, 66, 246, 185, 91, 15, 20, 138, 127, 72, 108, 118, 1, 95, 101,
+            106, 122, 213, 159, 177, 149, 158, 26, 156, 255, 164, 23,
+        ],
+        [
+            156, 143, 11, 217, 149, 102, 38, 136, 195, 206, 130, 158, 51, 7, 238, 132, 145, 89, 41,
+            105, 4, 223, 136, 187, 185, 14, 96, 203, 124, 211, 232, 27,
+        ],
+        [
+            243, 48, 57, 73, 175, 83, 255, 118, 109, 101, 251, 204, 97, 18, 136, 142, 244, 232,
+            140, 69, 137, 12, 243, 55, 6, 193, 102, 18, 105, 85, 212, 32,
+        ],
+        [
+            106, 72, 21, 34, 123, 67, 121, 212, 206, 35, 224, 6, 234, 148, 88, 70, 102, 72, 78,
+            176, 241, 69, 245, 42, 124, 102, 122, 228, 78, 213, 225, 15,
+        ],
+        [
+            138, 76, 147, 188, 209, 14, 97, 83, 234, 74, 217, 13, 10, 52, 222, 208, 215, 107, 249,
+            45, 197, 115, 144, 10, 242, 244, 80, 14, 188, 122, 243, 46,
+        ],
+        [
+            135, 1, 59, 246, 113, 195, 253, 191, 137, 145, 155, 220, 69, 4, 208, 168, 251, 143, 83,
+            125, 181, 243, 142, 133, 187, 154, 95, 35, 242, 96, 22, 46,
+        ],
+    ],
+    [
+        [
+            212, 106, 147, 198, 73, 242, 158, 22, 55, 148, 138, 51, 81, 214, 51, 215, 54, 228, 134,
+            212, 164, 23, 101, 39, 93, 111, 222, 219, 34, 238, 210, 63,
+        ],
+        [
+            44, 206, 102, 234, 64, 229, 63, 6, 217, 121, 61, 251, 91, 93, 218, 58, 191, 201, 249,
+            245, 197, 66, 190, 84, 163, 131, 52, 51, 114, 184, 27, 15,
+        ],
+        [
+            205, 245, 64, 10, 119, 181, 177, 248, 219, 83, 73, 222, 242, 114, 221, 64, 189, 254,
+            61, 12, 69, 85, 230, 143, 26, 57, 38, 144, 125, 98, 225, 38,
+        ],
+        [
+            5, 110, 248, 163, 158, 65, 46, 204, 22, 73, 246, 174, 157, 32, 211, 0, 111, 157, 247,
+            206, 108, 48, 18, 203, 229, 181, 78, 228, 19, 89, 228, 59,
+        ],
+        [
+            0, 8, 189, 101, 170, 252, 8, 211, 161, 154, 10, 147, 125, 49, 249, 48, 10, 107, 162,
+            132, 35, 169, 223, 151, 106, 194, 200, 251, 251, 243, 74, 43,
+        ],
+        [
+            57, 109, 106, 128, 160, 236, 72, 207, 149, 229, 48, 9, 124, 193, 39, 216, 210, 42, 9,
+            11, 140, 49, 187, 136, 128, 240, 253, 205, 220, 185, 90, 48,
+        ],
+        [
+            250, 254, 164, 4, 48, 165, 213, 187, 138, 16, 165, 199, 100, 173, 32, 33, 61, 217, 156,
+            149, 30, 82, 185, 0, 28, 228, 249, 137, 247, 85, 65, 58,
+        ],
+        [
+            2, 242, 14, 70, 214, 3, 108, 124, 224, 207, 16, 138, 171, 60, 1, 115, 217, 89, 60, 55,
+            211, 209, 142, 93, 114, 250, 87, 5, 60, 224, 180, 60,
+        ],
+    ],
+    [
+        [
+            144, 93, 21, 236, 191, 116, 211, 41, 163, 54, 250, 228, 3, 160, 70, 250, 130, 42, 231,
+            138, 180, 120, 229, 225, 127, 183, 94, 185, 13, 125, 155, 50,
+        ],
+        [
+            174, 14, 254, 1, 121, 129, 94, 156, 14, 188, 103, 7, 151, 42, 251, 49, 236, 235, 33, 2,
+            232, 148, 92, 233, 238, 1, 73, 88, 79, 141, 33, 28,
+        ],
+        [
+            20, 177, 228, 62, 142, 155, 143, 176, 245, 117, 129, 68, 2, 249, 175, 67, 80, 238, 156,
+            251, 77, 24, 244, 122, 60, 46, 151, 109, 189, 248, 51, 11,
+        ],
+        [
+            215, 91, 221, 163, 212, 172, 203, 236, 2, 3, 122, 182, 171, 138, 216, 28, 45, 39, 185,
+            150, 7, 23, 146, 119, 165, 97, 100, 61, 2, 10, 29, 59,
+        ],
+        [
+            161, 113, 88, 99, 211, 225, 154, 79, 233, 24, 96, 184, 88, 15, 238, 149, 42, 252, 65,
+            124, 40, 195, 78, 249, 189, 126, 145, 137, 156, 145, 116, 14,
+        ],
+        [
+            178, 124, 248, 37, 22, 236, 110, 226, 71, 15, 113, 237, 84, 182, 95, 165, 164, 66, 48,
+            122, 177, 201, 165, 216, 111, 161, 33, 61, 119, 252, 191, 35,
+        ],
+        [
+            197, 120, 10, 208, 220, 138, 250, 233, 8, 158, 226, 151, 22, 31, 183, 174, 135, 125,
+            16, 153, 88, 248, 53, 63, 179, 179, 189, 168, 188, 51, 30, 47,
+        ],
+        [
+            112, 82, 66, 68, 97, 15, 114, 12, 48, 43, 167, 112, 15, 4, 2, 42, 184, 147, 23, 151,
+            76, 93, 254, 182, 206, 61, 4, 232, 155, 28, 126, 9,
+        ],
+    ],
+    [
+        [
+            145, 216, 180, 132, 60, 223, 148, 216, 34, 180, 242, 242, 176, 250, 130, 154, 231, 192,
+            2, 180, 19, 252, 149, 36, 226, 139, 218, 152, 23, 71, 186, 60,
+        ],
+        [
+            145, 23, 19, 74, 196, 74, 253, 57, 75, 126, 188, 188, 85, 221, 184, 189, 145, 217, 9,
+            29, 92, 142, 118, 170, 123, 227, 2, 13, 45, 133, 10, 34,
+        ],
+        [
+            92, 162, 150, 39, 198, 231, 165, 20, 239, 143, 146, 25, 70, 213, 227, 42, 36, 193, 233,
+            136, 227, 72, 41, 211, 119, 192, 56, 46, 178, 115, 249, 24,
+        ],
+        [
+            184, 106, 63, 59, 43, 244, 197, 133, 94, 98, 229, 89, 233, 225, 58, 207, 125, 248, 175,
+            61, 6, 114, 65, 195, 188, 135, 168, 132, 163, 118, 73, 40,
+        ],
+        [
+            66, 44, 95, 80, 162, 127, 4, 166, 224, 150, 7, 215, 213, 240, 116, 133, 187, 123, 218,
+            65, 44, 202, 58, 102, 60, 67, 131, 28, 33, 251, 226, 35,
+        ],
+        [
+            89, 165, 126, 219, 26, 99, 11, 186, 78, 27, 5, 40, 149, 62, 109, 179, 48, 182, 87, 56,
+            220, 63, 161, 160, 189, 95, 152, 215, 116, 208, 97, 29,
+        ],
+        [
+            133, 68, 102, 106, 161, 231, 146, 41, 123, 189, 139, 12, 188, 95, 100, 65, 47, 225,
+            146, 16, 211, 141, 113, 140, 204, 214, 183, 85, 130, 129, 161, 29,
+        ],
+        [
+            95, 28, 16, 201, 220, 92, 90, 223, 184, 54, 43, 27, 180, 222, 76, 220, 109, 213, 67,
+            82, 180, 223, 14, 245, 218, 208, 56, 221, 129, 236, 198, 0,
+        ],
+    ],
+    [
+        [
+            153, 10, 78, 169, 254, 76, 133, 187, 164, 212, 220, 235, 99, 248, 60, 54, 222, 32, 177,
+            2, 73, 110, 14, 138, 64, 89, 32, 200, 132, 63, 10, 50,
+        ],
+        [
+            179, 107, 129, 58, 191, 91, 211, 38, 108, 98, 114, 39, 138, 2, 84, 136, 107, 195, 35,
+            63, 195, 194, 129, 119, 78, 121, 24, 254, 124, 168, 253, 7,
+        ],
+        [
+            201, 134, 252, 140, 79, 1, 46, 243, 125, 150, 69, 149, 201, 31, 145, 207, 118, 58, 214,
+            92, 165, 7, 121, 55, 206, 133, 90, 169, 62, 238, 88, 7,
+        ],
+        [
+            124, 231, 176, 78, 128, 30, 182, 95, 20, 20, 221, 90, 225, 166, 82, 43, 34, 235, 98,
+            104, 118, 65, 207, 222, 48, 245, 244, 162, 126, 27, 250, 40,
+        ],
+        [
+            84, 234, 22, 3, 167, 3, 19, 186, 163, 10, 6, 176, 16, 2, 161, 151, 132, 147, 110, 76,
+            120, 111, 18, 171, 200, 18, 253, 159, 59, 248, 0, 19,
+        ],
+        [
+            254, 251, 230, 244, 114, 117, 80, 226, 27, 33, 7, 106, 164, 188, 7, 234, 73, 93, 111,
+            95, 173, 159, 172, 176, 78, 88, 34, 64, 114, 144, 186, 63,
+        ],
+        [
+            229, 103, 0, 114, 148, 250, 213, 136, 168, 246, 230, 255, 196, 152, 208, 58, 26, 126,
+            104, 80, 173, 54, 87, 171, 231, 128, 129, 86, 200, 28, 6, 50,
+        ],
+        [
+            71, 246, 84, 162, 124, 177, 159, 98, 133, 205, 218, 133, 162, 133, 203, 151, 169, 145,
+            33, 18, 215, 185, 35, 218, 20, 37, 27, 12, 221, 78, 110, 28,
+        ],
+    ],
+    [
+        [
+            7, 43, 88, 155, 62, 53, 76, 25, 49, 176, 58, 33, 114, 15, 198, 248, 238, 191, 77, 235,
+            180, 168, 67, 37, 211, 154, 76, 91, 80, 200, 190, 14,
+        ],
+        [
+            187, 200, 252, 223, 36, 168, 140, 211, 167, 54, 64, 182, 227, 140, 67, 105, 66, 243,
+            132, 46, 25, 121, 138, 58, 231, 59, 241, 145, 174, 45, 158, 35,
+        ],
+        [
+            89, 201, 179, 68, 45, 205, 62, 252, 44, 171, 52, 118, 98, 252, 186, 237, 78, 237, 215,
+            210, 27, 28, 21, 138, 153, 72, 20, 129, 215, 14, 65, 13,
+        ],
+        [
+            207, 114, 96, 244, 251, 228, 50, 157, 218, 5, 140, 218, 244, 124, 241, 35, 105, 25, 78,
+            38, 32, 226, 11, 67, 158, 60, 40, 0, 90, 112, 228, 59,
+        ],
+        [
+            44, 23, 234, 166, 86, 53, 31, 5, 209, 239, 37, 13, 176, 86, 138, 220, 117, 172, 6, 218,
+            199, 181, 172, 183, 114, 122, 70, 147, 235, 69, 171, 58,
+        ],
+        [
+            251, 128, 29, 190, 110, 201, 163, 80, 112, 7, 226, 118, 202, 186, 171, 62, 201, 161,
+            102, 127, 140, 103, 55, 8, 163, 137, 161, 2, 98, 190, 60, 53,
+        ],
+        [
+            3, 77, 209, 74, 105, 88, 148, 168, 132, 184, 149, 244, 245, 31, 174, 162, 175, 102, 37,
+            175, 138, 139, 97, 68, 68, 228, 100, 89, 250, 92, 100, 19,
+        ],
+        [
+            176, 186, 169, 162, 147, 182, 155, 40, 7, 23, 44, 21, 227, 13, 45, 120, 242, 1, 27,
+            167, 111, 224, 74, 125, 25, 20, 161, 138, 25, 183, 192, 2,
+        ],
+    ],
+    [
+        [
+            151, 231, 53, 20, 217, 87, 127, 197, 27, 224, 167, 107, 88, 0, 77, 97, 49, 29, 3, 37,
+            59, 191, 47, 129, 60, 176, 200, 144, 3, 31, 120, 6,
+        ],
+        [
+            50, 17, 211, 29, 50, 226, 181, 186, 111, 15, 189, 130, 136, 8, 77, 8, 126, 228, 213, 4,
+            51, 193, 84, 83, 191, 254, 71, 223, 190, 13, 92, 14,
+        ],
+        [
+            235, 208, 23, 65, 116, 24, 230, 63, 109, 34, 215, 81, 39, 184, 79, 123, 190, 212, 36,
+            43, 97, 68, 108, 184, 171, 6, 18, 67, 172, 104, 210, 45,
+        ],
+        [
+            43, 61, 160, 187, 51, 200, 189, 10, 55, 89, 135, 156, 56, 115, 195, 45, 133, 30, 229,
+            182, 30, 93, 188, 158, 86, 180, 239, 225, 39, 203, 9, 12,
+        ],
+        [
+            112, 93, 244, 17, 221, 137, 126, 198, 97, 242, 109, 37, 18, 53, 243, 111, 32, 52, 168,
+            88, 8, 159, 133, 250, 72, 148, 15, 165, 34, 206, 4, 54,
+        ],
+        [
+            179, 38, 41, 29, 122, 240, 170, 53, 168, 87, 73, 225, 55, 212, 84, 215, 69, 250, 197,
+            81, 2, 46, 21, 71, 104, 92, 233, 125, 159, 174, 73, 28,
+        ],
+        [
+            215, 147, 127, 39, 190, 39, 215, 114, 1, 88, 192, 44, 188, 41, 189, 122, 215, 120, 26,
+            136, 42, 161, 32, 238, 123, 125, 99, 139, 123, 160, 126, 35,
+        ],
+        [
+            139, 58, 166, 224, 210, 76, 220, 214, 58, 146, 172, 75, 147, 130, 101, 34, 87, 114,
+            134, 231, 57, 106, 228, 24, 95, 150, 248, 196, 166, 157, 47, 49,
+        ],
+    ],
+    [
+        [
+            154, 44, 154, 17, 14, 119, 215, 198, 46, 175, 171, 157, 193, 22, 57, 134, 26, 142, 53,
+            232, 209, 83, 26, 15, 60, 5, 155, 141, 102, 218, 186, 5,
+        ],
+        [
+            169, 131, 113, 37, 98, 173, 190, 221, 20, 16, 88, 92, 67, 160, 25, 246, 246, 66, 31,
+            127, 43, 253, 88, 247, 40, 171, 221, 39, 50, 166, 101, 49,
+        ],
+        [
+            6, 232, 55, 227, 94, 249, 213, 167, 115, 81, 188, 73, 113, 54, 198, 181, 173, 30, 217,
+            186, 78, 230, 90, 133, 14, 129, 56, 51, 127, 107, 163, 51,
+        ],
+        [
+            120, 238, 215, 74, 28, 49, 35, 46, 98, 63, 95, 51, 241, 195, 25, 78, 248, 132, 5, 211,
+            1, 112, 122, 98, 21, 113, 125, 61, 64, 232, 110, 55,
+        ],
+        [
+            33, 74, 172, 61, 251, 174, 136, 52, 115, 195, 205, 228, 151, 213, 16, 9, 226, 190, 182,
+            100, 137, 243, 46, 178, 149, 220, 214, 116, 250, 124, 18, 35,
+        ],
+        [
+            23, 44, 183, 43, 181, 227, 174, 141, 120, 243, 138, 225, 133, 125, 53, 145, 97, 115,
+            48, 126, 152, 117, 171, 71, 162, 165, 176, 51, 32, 27, 188, 5,
+        ],
+        [
+            166, 99, 229, 130, 156, 150, 80, 56, 81, 46, 155, 102, 207, 204, 193, 88, 50, 104, 126,
+            37, 181, 161, 160, 7, 9, 133, 241, 123, 104, 67, 180, 56,
+        ],
+        [
+            5, 115, 17, 153, 100, 192, 255, 228, 78, 171, 112, 78, 174, 8, 248, 132, 165, 207, 86,
+            60, 87, 149, 165, 37, 147, 158, 161, 120, 86, 60, 84, 63,
+        ],
+    ],
+    [
+        [
+            140, 37, 93, 56, 153, 182, 130, 1, 95, 53, 224, 183, 222, 82, 182, 84, 241, 179, 104,
+            7, 205, 30, 188, 106, 227, 160, 151, 228, 251, 87, 188, 18,
+        ],
+        [
+            69, 75, 168, 95, 88, 120, 61, 139, 158, 178, 85, 80, 96, 116, 164, 31, 85, 37, 223, 70,
+            123, 211, 247, 151, 37, 26, 163, 44, 169, 26, 236, 52,
+        ],
+        [
+            253, 240, 81, 251, 222, 234, 85, 234, 243, 202, 195, 107, 86, 77, 4, 133, 3, 164, 49,
+            116, 28, 179, 60, 189, 129, 176, 72, 62, 103, 84, 130, 30,
+        ],
+        [
+            130, 7, 87, 230, 130, 156, 229, 136, 96, 182, 48, 237, 135, 249, 123, 77, 66, 215, 128,
+            140, 39, 78, 101, 221, 17, 128, 157, 194, 242, 184, 120, 39,
+        ],
+        [
+            241, 198, 194, 238, 100, 111, 211, 220, 28, 45, 77, 201, 225, 153, 45, 12, 63, 142,
+            104, 206, 74, 0, 59, 81, 227, 124, 44, 156, 149, 228, 177, 22,
+        ],
+        [
+            33, 24, 148, 45, 69, 92, 133, 68, 104, 193, 9, 44, 233, 181, 230, 248, 164, 241, 31, 3,
+            96, 4, 13, 178, 22, 115, 206, 184, 78, 66, 211, 24,
+        ],
+        [
+            147, 117, 96, 107, 211, 62, 174, 184, 36, 61, 56, 45, 148, 144, 27, 195, 147, 103, 188,
+            0, 153, 134, 134, 5, 144, 137, 176, 132, 146, 192, 72, 28,
+        ],
+        [
+            41, 43, 175, 189, 159, 31, 156, 63, 221, 19, 178, 175, 103, 67, 43, 177, 46, 76, 65,
+            225, 94, 126, 57, 99, 211, 22, 241, 242, 69, 188, 253, 53,
+        ],
+    ],
+    [
+        [
+            16, 84, 117, 4, 29, 151, 25, 85, 212, 201, 246, 140, 236, 125, 51, 153, 82, 180, 2,
+            136, 97, 13, 69, 179, 52, 2, 34, 99, 205, 11, 178, 37,
+        ],
+        [
+            50, 5, 86, 25, 191, 2, 103, 33, 91, 250, 57, 64, 191, 115, 148, 97, 73, 135, 186, 105,
+            51, 8, 93, 163, 185, 149, 97, 252, 14, 23, 223, 33,
+        ],
+        [
+            204, 37, 164, 107, 54, 185, 240, 186, 162, 231, 206, 164, 103, 105, 235, 250, 204, 56,
+            83, 83, 244, 139, 64, 169, 89, 86, 141, 122, 209, 83, 180, 2,
+        ],
+        [
+            214, 15, 207, 13, 33, 170, 216, 82, 19, 202, 172, 127, 163, 185, 70, 191, 50, 74, 81,
+            120, 137, 250, 94, 106, 89, 21, 176, 84, 116, 5, 70, 45,
+        ],
+        [
+            228, 181, 219, 48, 206, 214, 218, 233, 172, 15, 42, 210, 93, 26, 106, 40, 46, 38, 31,
+            173, 37, 220, 70, 249, 110, 228, 34, 161, 212, 145, 74, 0,
+        ],
+        [
+            116, 63, 120, 41, 190, 77, 110, 48, 6, 95, 248, 65, 28, 254, 120, 111, 18, 232, 153,
+            161, 194, 81, 56, 69, 191, 12, 8, 76, 239, 88, 105, 60,
+        ],
+        [
+            159, 17, 123, 163, 202, 118, 227, 194, 63, 51, 216, 161, 216, 223, 247, 250, 58, 64,
+            100, 242, 254, 203, 170, 226, 19, 185, 208, 69, 18, 10, 43, 52,
+        ],
+        [
+            248, 196, 92, 216, 67, 195, 218, 121, 90, 231, 175, 194, 85, 169, 109, 214, 35, 240,
+            86, 175, 175, 119, 7, 27, 43, 147, 31, 23, 64, 47, 182, 29,
+        ],
+    ],
+    [
+        [
+            168, 89, 212, 27, 44, 101, 233, 29, 222, 148, 126, 207, 237, 33, 171, 118, 157, 87, 82,
+            122, 63, 158, 78, 26, 156, 224, 204, 238, 11, 236, 75, 39,
+        ],
+        [
+            210, 162, 30, 236, 158, 198, 77, 145, 133, 121, 228, 222, 39, 19, 50, 157, 87, 102,
+            214, 144, 85, 84, 147, 165, 91, 172, 106, 113, 236, 192, 86, 9,
+        ],
+        [
+            98, 136, 193, 144, 162, 192, 99, 58, 224, 77, 23, 246, 58, 162, 203, 65, 143, 113, 124,
+            58, 65, 216, 85, 213, 87, 31, 156, 110, 167, 37, 247, 16,
+        ],
+        [
+            114, 57, 34, 60, 250, 39, 223, 43, 226, 103, 214, 214, 185, 36, 210, 248, 181, 101, 81,
+            91, 172, 174, 198, 64, 69, 215, 182, 122, 121, 48, 177, 53,
+        ],
+        [
+            54, 247, 9, 251, 221, 228, 245, 195, 31, 168, 79, 197, 35, 1, 155, 159, 197, 197, 79,
+            233, 113, 217, 39, 135, 103, 121, 171, 104, 219, 209, 151, 30,
+        ],
+        [
+            67, 76, 134, 87, 87, 24, 179, 36, 45, 144, 205, 160, 105, 47, 150, 23, 0, 205, 234, 75,
+            10, 133, 108, 14, 1, 91, 13, 238, 142, 215, 243, 58,
+        ],
+        [
+            111, 211, 5, 125, 150, 54, 126, 4, 9, 226, 217, 30, 137, 148, 156, 22, 66, 243, 179,
+            181, 153, 228, 127, 248, 2, 80, 29, 233, 179, 230, 245, 9,
+        ],
+        [
+            196, 202, 65, 82, 146, 164, 175, 9, 27, 44, 243, 201, 113, 37, 164, 51, 220, 51, 110,
+            110, 153, 72, 88, 87, 128, 158, 118, 53, 81, 212, 138, 1,
+        ],
+    ],
+    [
+        [
+            240, 27, 128, 83, 62, 106, 95, 39, 98, 33, 131, 9, 133, 210, 62, 78, 76, 240, 235, 156,
+            80, 124, 193, 74, 142, 209, 160, 60, 151, 106, 192, 17,
+        ],
+        [
+            10, 234, 151, 181, 184, 48, 26, 195, 34, 48, 69, 70, 88, 128, 36, 171, 37, 190, 63,
+            230, 131, 119, 96, 168, 221, 7, 3, 182, 61, 119, 146, 45,
+        ],
+        [
+            1, 177, 14, 77, 209, 225, 50, 37, 44, 178, 155, 185, 255, 53, 136, 39, 217, 175, 86,
+            46, 129, 51, 73, 213, 96, 70, 110, 128, 6, 209, 107, 40,
+        ],
+        [
+            1, 41, 114, 5, 32, 182, 148, 153, 210, 242, 118, 122, 146, 225, 50, 237, 138, 117, 64,
+            250, 6, 133, 64, 151, 239, 232, 112, 166, 222, 103, 192, 62,
+        ],
+        [
+            40, 11, 170, 150, 94, 39, 123, 218, 115, 43, 29, 105, 156, 208, 30, 91, 242, 19, 160,
+            156, 212, 127, 176, 42, 33, 71, 160, 76, 130, 160, 20, 36,
+        ],
+        [
+            207, 175, 212, 51, 120, 120, 218, 173, 25, 249, 187, 76, 135, 243, 179, 80, 223, 23,
+            120, 149, 107, 52, 156, 41, 255, 100, 193, 238, 248, 149, 153, 44,
+        ],
+        [
+            122, 35, 185, 54, 102, 87, 34, 91, 232, 2, 170, 41, 84, 191, 167, 96, 141, 242, 39,
+            237, 220, 115, 229, 243, 211, 216, 17, 222, 146, 109, 149, 48,
+        ],
+        [
+            135, 20, 109, 135, 214, 156, 229, 98, 173, 213, 226, 44, 144, 56, 252, 137, 190, 235,
+            120, 163, 206, 253, 181, 103, 130, 174, 201, 205, 4, 53, 152, 46,
+        ],
+    ],
+    [
+        [
+            10, 142, 209, 19, 89, 150, 192, 43, 239, 151, 170, 251, 128, 226, 243, 190, 235, 26,
+            66, 71, 55, 221, 236, 98, 149, 171, 88, 172, 230, 5, 233, 2,
+        ],
+        [
+            156, 168, 79, 29, 44, 17, 130, 180, 80, 222, 115, 221, 227, 217, 195, 91, 218, 216,
+            133, 2, 171, 15, 111, 82, 76, 171, 109, 215, 44, 206, 95, 60,
+        ],
+        [
+            82, 50, 79, 123, 243, 18, 97, 3, 135, 72, 145, 152, 246, 155, 56, 167, 69, 232, 236,
+            222, 17, 80, 228, 123, 110, 71, 187, 132, 180, 157, 94, 43,
+        ],
+        [
+            133, 56, 222, 62, 206, 68, 120, 247, 78, 228, 79, 25, 173, 18, 206, 23, 199, 33, 94,
+            146, 109, 86, 181, 57, 106, 232, 166, 187, 47, 45, 190, 31,
+        ],
+        [
+            255, 251, 31, 52, 33, 199, 123, 217, 174, 217, 232, 117, 186, 143, 26, 30, 39, 117,
+            165, 210, 103, 18, 34, 222, 59, 180, 171, 73, 64, 118, 74, 49,
+        ],
+        [
+            68, 91, 156, 155, 35, 223, 48, 21, 231, 13, 153, 12, 213, 186, 1, 241, 5, 0, 203, 212,
+            90, 49, 200, 64, 219, 252, 147, 46, 215, 151, 236, 7,
+        ],
+        [
+            247, 226, 71, 82, 215, 139, 160, 131, 30, 130, 152, 222, 210, 5, 133, 197, 241, 86, 45,
+            116, 53, 190, 25, 140, 158, 87, 213, 121, 12, 172, 199, 24,
+        ],
+        [
+            229, 141, 95, 11, 163, 54, 149, 119, 4, 118, 188, 195, 249, 198, 228, 223, 95, 167,
+            233, 188, 125, 155, 186, 86, 58, 4, 89, 10, 107, 36, 172, 16,
+        ],
+    ],
+    [
+        [
+            253, 165, 27, 216, 77, 164, 49, 188, 140, 85, 119, 2, 143, 21, 241, 7, 224, 99, 213,
+            140, 91, 71, 51, 39, 118, 152, 202, 160, 251, 21, 198, 32,
+        ],
+        [
+            0, 210, 144, 78, 21, 82, 237, 163, 173, 160, 244, 242, 249, 95, 121, 211, 200, 10, 2,
+            85, 106, 3, 176, 46, 36, 207, 155, 196, 110, 124, 128, 53,
+        ],
+        [
+            85, 250, 155, 123, 178, 197, 121, 15, 218, 152, 126, 42, 137, 33, 202, 101, 178, 22,
+            103, 192, 64, 139, 5, 127, 67, 94, 221, 100, 185, 73, 108, 10,
+        ],
+        [
+            15, 53, 88, 70, 174, 250, 13, 25, 24, 206, 211, 240, 226, 219, 163, 151, 54, 247, 178,
+            117, 151, 211, 152, 203, 237, 144, 163, 41, 173, 69, 195, 59,
+        ],
+        [
+            242, 209, 249, 152, 137, 32, 207, 20, 121, 123, 210, 175, 104, 77, 55, 143, 115, 224,
+            47, 4, 147, 97, 154, 50, 129, 125, 15, 23, 186, 161, 25, 29,
+        ],
+        [
+            210, 47, 108, 11, 41, 196, 180, 206, 209, 19, 36, 27, 105, 0, 242, 184, 75, 46, 130,
+            150, 119, 203, 105, 86, 64, 122, 246, 157, 103, 45, 7, 62,
+        ],
+        [
+            120, 226, 121, 154, 242, 62, 202, 9, 87, 218, 91, 88, 3, 245, 76, 76, 40, 26, 68, 80,
+            180, 66, 58, 139, 88, 100, 199, 100, 36, 216, 191, 58,
+        ],
+        [
+            160, 142, 135, 30, 128, 186, 93, 94, 200, 52, 246, 68, 226, 51, 140, 36, 58, 238, 64,
+            48, 165, 135, 28, 66, 183, 186, 4, 230, 104, 111, 70, 17,
+        ],
+    ],
+    [
+        [
+            169, 163, 197, 216, 116, 65, 109, 237, 51, 192, 24, 202, 186, 54, 64, 16, 135, 35, 119,
+            123, 30, 27, 149, 113, 152, 27, 213, 235, 74, 228, 25, 50,
+        ],
+        [
+            94, 146, 241, 96, 243, 211, 176, 157, 5, 20, 143, 58, 78, 196, 233, 156, 201, 33, 237,
+            201, 216, 30, 138, 99, 241, 75, 94, 195, 201, 115, 90, 57,
+        ],
+        [
+            223, 25, 95, 223, 236, 31, 251, 252, 110, 101, 210, 88, 132, 5, 20, 60, 19, 196, 188,
+            207, 184, 129, 218, 204, 171, 58, 88, 159, 254, 52, 84, 16,
+        ],
+        [
+            167, 254, 178, 116, 5, 197, 144, 192, 29, 226, 111, 206, 183, 152, 229, 102, 244, 61,
+            231, 113, 249, 238, 28, 117, 83, 196, 204, 98, 168, 252, 8, 4,
+        ],
+        [
+            116, 228, 134, 78, 53, 106, 91, 46, 222, 231, 2, 212, 189, 226, 173, 168, 212, 157,
+            120, 28, 166, 17, 232, 145, 36, 121, 221, 35, 72, 66, 196, 34,
+        ],
+        [
+            20, 133, 122, 73, 166, 68, 157, 123, 246, 7, 77, 139, 203, 121, 158, 76, 116, 100, 127,
+            230, 51, 212, 112, 138, 193, 207, 153, 250, 158, 18, 75, 51,
+        ],
+        [
+            165, 172, 206, 156, 241, 81, 188, 251, 147, 161, 222, 196, 133, 69, 112, 59, 135, 119,
+            47, 33, 85, 179, 164, 232, 120, 182, 104, 5, 196, 161, 182, 56,
+        ],
+        [
+            167, 142, 23, 10, 197, 190, 129, 124, 191, 14, 167, 7, 54, 72, 167, 134, 252, 194, 121,
+            224, 7, 189, 197, 147, 198, 62, 216, 75, 238, 55, 124, 8,
+        ],
+    ],
+    [
+        [
+            169, 7, 115, 210, 156, 19, 28, 45, 159, 241, 95, 115, 25, 97, 41, 82, 205, 96, 92, 201,
+            180, 27, 188, 101, 78, 34, 164, 62, 39, 77, 225, 44,
+        ],
+        [
+            96, 87, 81, 178, 227, 39, 109, 76, 110, 243, 25, 223, 80, 132, 214, 188, 215, 193, 106,
+            192, 165, 53, 20, 194, 37, 17, 243, 21, 41, 22, 18, 54,
+        ],
+        [
+            228, 207, 168, 250, 67, 67, 250, 225, 163, 246, 3, 206, 243, 52, 113, 22, 21, 184, 62,
+            177, 122, 200, 204, 165, 238, 201, 224, 62, 72, 33, 81, 36,
+        ],
+        [
+            62, 26, 98, 19, 20, 210, 218, 57, 126, 87, 89, 162, 47, 111, 194, 12, 214, 134, 160,
+            32, 229, 220, 107, 171, 18, 207, 106, 82, 189, 204, 141, 1,
+        ],
+        [
+            17, 26, 209, 134, 88, 233, 110, 84, 43, 104, 90, 54, 64, 165, 108, 53, 251, 129, 213,
+            254, 251, 101, 145, 40, 7, 231, 242, 249, 72, 214, 39, 42,
+        ],
+        [
+            161, 17, 192, 70, 218, 119, 88, 156, 78, 162, 251, 1, 234, 203, 81, 56, 126, 194, 126,
+            42, 165, 66, 66, 219, 157, 74, 203, 143, 18, 47, 51, 52,
+        ],
+        [
+            43, 157, 147, 232, 6, 52, 131, 52, 72, 123, 249, 157, 60, 89, 230, 143, 115, 50, 38,
+            134, 111, 206, 30, 175, 65, 36, 76, 157, 164, 65, 201, 38,
+        ],
+        [
+            206, 22, 236, 47, 122, 166, 215, 229, 161, 250, 56, 20, 180, 86, 60, 90, 251, 130, 72,
+            167, 145, 105, 142, 204, 131, 93, 69, 55, 146, 165, 221, 40,
+        ],
+    ],
+    [
+        [
+            249, 242, 21, 59, 135, 24, 245, 119, 127, 198, 118, 52, 239, 218, 112, 56, 29, 37, 147,
+            112, 46, 128, 19, 82, 194, 81, 245, 247, 54, 65, 29, 14,
+        ],
+        [
+            36, 83, 140, 239, 206, 62, 115, 139, 236, 215, 196, 82, 95, 248, 71, 245, 58, 78, 174,
+            33, 182, 29, 67, 2, 49, 46, 188, 235, 242, 85, 224, 3,
+        ],
+        [
+            62, 123, 204, 165, 50, 119, 248, 120, 89, 102, 76, 10, 251, 221, 182, 243, 92, 147, 22,
+            111, 30, 132, 4, 19, 86, 16, 201, 53, 98, 18, 43, 48,
+        ],
+        [
+            51, 40, 231, 19, 115, 64, 149, 172, 249, 156, 238, 143, 245, 188, 130, 96, 154, 29,
+            135, 109, 46, 254, 185, 130, 61, 28, 67, 8, 172, 115, 79, 58,
+        ],
+        [
+            54, 123, 99, 202, 255, 50, 82, 189, 246, 133, 142, 66, 22, 38, 76, 253, 238, 34, 88,
+            116, 77, 242, 84, 108, 243, 231, 178, 151, 103, 255, 89, 9,
+        ],
+        [
+            80, 138, 121, 15, 93, 11, 24, 112, 146, 63, 198, 155, 12, 127, 20, 15, 94, 69, 39, 221,
+            107, 251, 182, 184, 16, 84, 90, 69, 159, 213, 39, 54,
+        ],
+        [
+            139, 70, 202, 84, 209, 56, 254, 84, 216, 195, 84, 158, 124, 98, 163, 218, 94, 11, 163,
+            9, 42, 83, 159, 244, 179, 75, 190, 59, 46, 184, 30, 41,
+        ],
+        [
+            104, 75, 123, 111, 5, 75, 204, 36, 182, 49, 51, 126, 209, 201, 143, 115, 154, 53, 116,
+            250, 77, 65, 69, 226, 128, 142, 205, 101, 163, 217, 15, 42,
+        ],
+    ],
+    [
+        [
+            12, 0, 40, 89, 200, 146, 231, 32, 7, 210, 86, 77, 206, 245, 234, 19, 172, 170, 58, 108,
+            36, 183, 180, 153, 155, 161, 74, 78, 18, 213, 106, 45,
+        ],
+        [
+            54, 121, 227, 245, 13, 91, 172, 234, 241, 135, 83, 92, 132, 87, 223, 225, 170, 82, 147,
+            106, 56, 152, 196, 15, 110, 16, 220, 210, 167, 132, 147, 46,
+        ],
+        [
+            191, 194, 84, 235, 59, 153, 63, 90, 249, 253, 195, 202, 19, 162, 43, 210, 241, 180, 81,
+            251, 7, 129, 85, 120, 223, 64, 187, 56, 7, 190, 168, 34,
+        ],
+        [
+            134, 60, 171, 29, 83, 57, 134, 240, 159, 75, 121, 97, 53, 145, 10, 97, 60, 41, 64, 4,
+            212, 180, 179, 52, 1, 58, 78, 23, 120, 40, 35, 54,
+        ],
+        [
+            184, 110, 240, 2, 73, 205, 194, 246, 210, 166, 203, 213, 175, 225, 47, 211, 142, 183,
+            222, 180, 253, 7, 251, 237, 181, 54, 129, 165, 27, 43, 117, 39,
+        ],
+        [
+            192, 117, 239, 105, 11, 250, 37, 116, 110, 41, 150, 214, 18, 127, 6, 3, 95, 10, 113,
+            251, 138, 117, 88, 98, 219, 30, 92, 111, 47, 121, 62, 49,
+        ],
+        [
+            106, 41, 188, 0, 79, 170, 110, 58, 210, 56, 221, 140, 97, 225, 151, 132, 115, 192, 82,
+            181, 19, 163, 13, 17, 236, 205, 15, 30, 3, 211, 249, 6,
+        ],
+        [
+            87, 144, 20, 67, 36, 215, 225, 190, 145, 89, 16, 213, 18, 121, 231, 161, 91, 162, 36,
+            252, 20, 120, 174, 234, 203, 86, 225, 106, 52, 13, 38, 45,
+        ],
+    ],
+    [
+        [
+            238, 133, 103, 91, 99, 161, 201, 157, 122, 248, 132, 37, 241, 150, 151, 26, 199, 151,
+            164, 97, 34, 160, 197, 202, 52, 162, 229, 43, 237, 227, 136, 45,
+        ],
+        [
+            162, 65, 50, 209, 33, 252, 250, 222, 24, 113, 30, 11, 36, 85, 185, 206, 100, 108, 219,
+            183, 221, 16, 178, 179, 163, 18, 187, 82, 67, 198, 198, 57,
+        ],
+        [
+            69, 233, 89, 202, 122, 215, 104, 132, 206, 156, 152, 147, 197, 210, 27, 231, 183, 186,
+            92, 17, 120, 187, 143, 163, 225, 81, 21, 72, 93, 7, 196, 27,
+        ],
+        [
+            38, 237, 19, 29, 117, 255, 144, 122, 171, 181, 247, 94, 88, 101, 213, 241, 186, 225,
+            134, 4, 80, 120, 94, 234, 102, 183, 99, 164, 131, 187, 132, 55,
+        ],
+        [
+            155, 156, 64, 199, 160, 171, 202, 191, 152, 58, 169, 151, 175, 213, 147, 132, 46, 164,
+            196, 7, 196, 183, 186, 71, 114, 71, 184, 126, 44, 47, 24, 62,
+        ],
+        [
+            47, 44, 188, 236, 111, 225, 46, 128, 76, 235, 139, 140, 205, 235, 29, 129, 198, 199,
+            202, 172, 93, 81, 72, 26, 142, 31, 99, 48, 152, 248, 28, 40,
+        ],
+        [
+            36, 151, 70, 226, 44, 150, 152, 239, 239, 233, 50, 179, 161, 120, 65, 135, 195, 27,
+            135, 103, 192, 203, 73, 94, 21, 30, 227, 41, 40, 148, 225, 0,
+        ],
+        [
+            155, 17, 42, 85, 170, 76, 233, 176, 16, 190, 197, 57, 30, 42, 33, 223, 101, 22, 18,
+            206, 171, 83, 208, 216, 82, 178, 213, 81, 74, 255, 95, 38,
+        ],
+    ],
+    [
+        [
+            54, 8, 224, 104, 248, 77, 99, 60, 13, 208, 245, 117, 189, 100, 102, 86, 46, 130, 26,
+            21, 173, 106, 18, 60, 169, 20, 254, 83, 119, 0, 95, 5,
+        ],
+        [
+            230, 178, 120, 49, 250, 42, 251, 98, 39, 3, 136, 65, 253, 165, 204, 239, 163, 148, 51,
+            169, 122, 182, 72, 197, 222, 128, 147, 72, 237, 156, 152, 8,
+        ],
+        [
+            19, 86, 176, 28, 57, 166, 19, 232, 42, 211, 58, 20, 150, 66, 80, 17, 109, 238, 228, 68,
+            184, 14, 15, 150, 165, 6, 102, 79, 156, 6, 3, 1,
+        ],
+        [
+            253, 225, 19, 134, 49, 103, 63, 151, 7, 151, 27, 174, 176, 155, 244, 254, 80, 10, 77,
+            13, 125, 6, 0, 159, 174, 133, 128, 162, 163, 54, 32, 7,
+        ],
+        [
+            20, 122, 210, 59, 32, 118, 92, 7, 227, 125, 245, 98, 228, 150, 121, 191, 233, 127, 217,
+            33, 245, 24, 145, 160, 149, 249, 30, 132, 54, 226, 121, 9,
+        ],
+        [
+            33, 175, 62, 170, 114, 81, 193, 177, 6, 202, 21, 242, 244, 183, 86, 196, 52, 220, 193,
+            134, 119, 61, 215, 155, 24, 133, 127, 204, 95, 47, 77, 59,
+        ],
+        [
+            189, 6, 50, 74, 18, 109, 39, 182, 206, 232, 250, 242, 210, 131, 138, 112, 119, 166, 76,
+            26, 90, 52, 105, 200, 244, 199, 32, 40, 98, 228, 167, 37,
+        ],
+        [
+            56, 113, 154, 35, 162, 76, 47, 212, 228, 242, 71, 241, 126, 255, 187, 178, 64, 126, 81,
+            245, 80, 182, 200, 85, 172, 97, 35, 77, 184, 251, 84, 25,
+        ],
+    ],
+    [
+        [
+            12, 230, 104, 29, 206, 194, 74, 78, 85, 208, 57, 110, 166, 4, 210, 246, 253, 77, 87,
+            139, 137, 151, 107, 151, 193, 139, 48, 7, 131, 243, 165, 56,
+        ],
+        [
+            16, 106, 200, 3, 167, 12, 130, 120, 148, 233, 201, 119, 44, 221, 151, 90, 228, 85, 241,
+            0, 215, 129, 245, 242, 36, 55, 115, 198, 144, 158, 69, 18,
+        ],
+        [
+            28, 44, 187, 226, 84, 6, 135, 126, 182, 209, 160, 144, 14, 180, 21, 44, 8, 15, 244, 88,
+            212, 42, 24, 105, 125, 35, 172, 66, 47, 113, 133, 33,
+        ],
+        [
+            9, 189, 144, 175, 191, 136, 166, 240, 19, 237, 73, 19, 206, 196, 9, 199, 5, 25, 202,
+            165, 13, 171, 240, 169, 192, 122, 100, 129, 176, 192, 234, 55,
+        ],
+        [
+            192, 225, 147, 209, 101, 193, 163, 144, 93, 123, 172, 39, 143, 71, 136, 63, 99, 52,
+            106, 194, 237, 87, 89, 235, 146, 135, 72, 96, 74, 2, 53, 37,
+        ],
+        [
+            0, 89, 253, 106, 180, 242, 187, 141, 158, 209, 229, 100, 132, 116, 24, 10, 23, 103,
+            207, 141, 111, 230, 149, 18, 30, 13, 97, 180, 135, 73, 5, 0,
+        ],
+        [
+            81, 161, 223, 168, 32, 133, 55, 175, 229, 60, 247, 13, 214, 85, 147, 136, 166, 182,
+            207, 165, 70, 5, 246, 18, 121, 61, 124, 98, 243, 138, 30, 51,
+        ],
+        [
+            57, 191, 83, 37, 102, 159, 132, 165, 105, 85, 174, 131, 158, 51, 155, 73, 53, 161, 34,
+            45, 154, 71, 201, 15, 41, 223, 46, 21, 189, 231, 40, 19,
+        ],
+    ],
+    [
+        [
+            138, 114, 183, 238, 119, 69, 77, 194, 154, 214, 49, 36, 14, 183, 188, 15, 31, 242, 222,
+            54, 184, 157, 231, 0, 48, 45, 248, 77, 28, 231, 154, 36,
+        ],
+        [
+            179, 41, 18, 93, 149, 95, 227, 27, 14, 200, 100, 184, 90, 178, 30, 127, 59, 195, 253,
+            44, 236, 163, 110, 9, 21, 169, 129, 4, 69, 121, 147, 30,
+        ],
+        [
+            105, 82, 83, 247, 98, 229, 63, 229, 249, 250, 153, 84, 251, 79, 191, 217, 11, 54, 72,
+            161, 77, 13, 8, 84, 146, 179, 195, 130, 120, 104, 253, 33,
+        ],
+        [
+            79, 107, 10, 22, 0, 150, 204, 208, 40, 254, 8, 117, 61, 94, 43, 129, 204, 43, 103, 68,
+            128, 53, 5, 45, 217, 46, 73, 163, 205, 197, 162, 32,
+        ],
+        [
+            32, 137, 210, 135, 2, 141, 240, 12, 66, 216, 159, 1, 91, 255, 208, 69, 249, 108, 78,
+            199, 222, 246, 75, 30, 19, 10, 100, 23, 19, 55, 158, 38,
+        ],
+        [
+            225, 215, 161, 47, 217, 150, 60, 35, 109, 2, 159, 109, 167, 241, 193, 228, 243, 128,
+            84, 155, 136, 95, 205, 141, 23, 244, 34, 211, 191, 43, 165, 56,
+        ],
+        [
+            229, 240, 112, 132, 192, 72, 52, 216, 10, 111, 211, 17, 255, 129, 216, 0, 160, 71, 253,
+            197, 23, 15, 88, 86, 119, 22, 7, 215, 96, 165, 238, 51,
+        ],
+        [
+            41, 241, 99, 40, 68, 20, 115, 88, 65, 43, 219, 96, 252, 18, 192, 3, 209, 196, 244, 173,
+            167, 101, 107, 131, 145, 136, 227, 57, 29, 168, 114, 11,
+        ],
+    ],
+    [
+        [
+            154, 239, 49, 188, 250, 102, 141, 162, 103, 128, 214, 237, 112, 83, 82, 39, 169, 38,
+            186, 224, 83, 17, 44, 13, 89, 204, 82, 168, 153, 47, 177, 32,
+        ],
+        [
+            44, 230, 100, 6, 130, 117, 77, 153, 54, 35, 247, 189, 194, 8, 16, 63, 21, 142, 72, 135,
+            168, 206, 177, 164, 49, 230, 99, 225, 60, 67, 155, 39,
+        ],
+        [
+            169, 141, 219, 61, 4, 46, 12, 93, 167, 222, 157, 101, 225, 66, 40, 200, 99, 167, 104,
+            200, 201, 121, 56, 131, 9, 149, 7, 96, 78, 147, 45, 35,
+        ],
+        [
+            60, 73, 142, 226, 0, 134, 72, 110, 138, 195, 66, 163, 232, 76, 236, 197, 119, 245, 33,
+            176, 176, 193, 191, 82, 93, 99, 200, 122, 214, 4, 106, 62,
+        ],
+        [
+            33, 168, 2, 134, 195, 243, 192, 108, 200, 39, 203, 209, 184, 80, 67, 36, 36, 133, 17,
+            84, 252, 62, 107, 24, 128, 56, 93, 32, 88, 187, 74, 20,
+        ],
+        [
+            219, 20, 232, 167, 231, 189, 251, 75, 141, 188, 40, 255, 113, 169, 75, 126, 51, 153,
+            150, 144, 3, 2, 48, 195, 95, 106, 157, 67, 187, 122, 83, 58,
+        ],
+        [
+            188, 190, 244, 180, 101, 55, 139, 190, 117, 226, 19, 119, 22, 66, 0, 180, 238, 67, 105,
+            113, 146, 196, 115, 38, 40, 228, 250, 123, 178, 244, 232, 50,
+        ],
+        [
+            128, 9, 198, 45, 101, 40, 185, 231, 79, 41, 73, 11, 16, 195, 192, 252, 134, 134, 140,
+            132, 52, 99, 62, 164, 180, 33, 52, 159, 66, 196, 79, 35,
+        ],
+    ],
+    [
+        [
+            10, 239, 94, 184, 118, 1, 158, 108, 158, 169, 76, 121, 236, 36, 25, 221, 105, 129, 115,
+            149, 209, 44, 31, 83, 91, 26, 78, 126, 255, 38, 25, 56,
+        ],
+        [
+            207, 84, 209, 233, 227, 197, 135, 68, 247, 42, 105, 196, 115, 52, 31, 57, 58, 7, 51,
+            12, 151, 197, 15, 178, 131, 83, 160, 90, 179, 238, 0, 1,
+        ],
+        [
+            88, 114, 54, 87, 151, 143, 109, 8, 32, 131, 174, 143, 36, 0, 241, 67, 69, 39, 183, 24,
+            46, 190, 165, 142, 35, 116, 35, 242, 200, 167, 172, 63,
+        ],
+        [
+            33, 70, 50, 238, 103, 165, 48, 92, 4, 221, 0, 157, 84, 240, 144, 240, 18, 63, 226, 1,
+            151, 3, 49, 247, 129, 248, 23, 106, 90, 166, 204, 44,
+        ],
+        [
+            106, 134, 57, 46, 200, 54, 110, 138, 86, 96, 6, 197, 4, 183, 174, 208, 239, 184, 201,
+            108, 12, 179, 36, 69, 218, 9, 165, 76, 112, 142, 76, 14,
+        ],
+        [
+            97, 3, 42, 225, 95, 159, 129, 254, 99, 46, 181, 184, 192, 3, 168, 169, 118, 8, 164, 8,
+            94, 203, 221, 208, 205, 41, 189, 179, 30, 177, 251, 44,
+        ],
+        [
+            53, 132, 132, 52, 92, 180, 183, 130, 219, 108, 144, 28, 118, 56, 255, 151, 102, 154,
+            205, 137, 43, 116, 29, 96, 143, 6, 143, 205, 163, 245, 106, 44,
+        ],
+        [
+            218, 157, 183, 63, 44, 213, 213, 83, 210, 222, 174, 20, 246, 248, 126, 87, 221, 23,
+            142, 136, 120, 246, 43, 32, 148, 58, 248, 160, 123, 58, 221, 12,
+        ],
+    ],
+    [
+        [
+            149, 137, 111, 83, 176, 241, 115, 102, 142, 224, 16, 10, 96, 228, 141, 172, 140, 55,
+            25, 116, 233, 91, 178, 226, 61, 228, 239, 3, 161, 147, 55, 0,
+        ],
+        [
+            224, 0, 124, 93, 127, 173, 200, 210, 76, 186, 63, 249, 145, 142, 191, 53, 164, 52, 12,
+            246, 5, 147, 5, 219, 84, 33, 67, 17, 12, 186, 56, 6,
+        ],
+        [
+            141, 150, 107, 181, 39, 27, 6, 86, 75, 78, 249, 120, 1, 70, 150, 239, 62, 91, 105, 27,
+            207, 74, 134, 102, 24, 119, 82, 203, 42, 91, 232, 27,
+        ],
+        [
+            98, 255, 117, 104, 87, 175, 148, 205, 89, 247, 46, 53, 8, 41, 74, 139, 233, 18, 235,
+            173, 199, 208, 211, 168, 2, 68, 169, 180, 164, 20, 97, 42,
+        ],
+        [
+            142, 31, 62, 232, 242, 54, 172, 213, 218, 45, 139, 176, 152, 33, 55, 113, 31, 236, 64,
+            163, 4, 159, 145, 68, 47, 187, 118, 126, 73, 172, 66, 51,
+        ],
+        [
+            177, 99, 95, 196, 0, 236, 92, 199, 227, 64, 111, 143, 71, 195, 178, 33, 230, 212, 13,
+            0, 88, 120, 166, 23, 56, 146, 248, 71, 64, 129, 231, 28,
+        ],
+        [
+            211, 107, 48, 102, 191, 222, 34, 82, 109, 123, 188, 56, 84, 50, 158, 35, 226, 179, 252,
+            12, 108, 246, 213, 136, 254, 116, 42, 71, 83, 167, 134, 38,
+        ],
+        [
+            60, 43, 191, 53, 154, 254, 231, 249, 60, 152, 183, 226, 99, 111, 57, 196, 8, 126, 203,
+            215, 228, 240, 139, 196, 74, 217, 66, 180, 5, 49, 10, 61,
+        ],
+    ],
+    [
+        [
+            20, 60, 106, 50, 215, 140, 210, 245, 242, 191, 232, 212, 151, 142, 214, 148, 65, 129,
+            147, 86, 16, 226, 222, 240, 178, 198, 208, 215, 155, 63, 153, 3,
+        ],
+        [
+            231, 76, 69, 20, 14, 9, 126, 164, 67, 97, 38, 101, 31, 238, 75, 208, 65, 146, 153, 62,
+            115, 249, 153, 193, 36, 89, 201, 158, 168, 83, 14, 3,
+        ],
+        [
+            172, 28, 102, 166, 48, 244, 128, 113, 84, 168, 154, 152, 71, 47, 14, 238, 173, 216,
+            173, 84, 87, 152, 229, 74, 214, 142, 86, 0, 218, 201, 76, 38,
+        ],
+        [
+            250, 251, 83, 44, 140, 74, 35, 121, 221, 192, 158, 22, 150, 145, 158, 182, 199, 58,
+            139, 95, 104, 115, 78, 251, 35, 114, 123, 157, 107, 127, 141, 2,
+        ],
+        [
+            15, 141, 54, 127, 192, 139, 29, 132, 103, 155, 18, 77, 69, 91, 246, 255, 11, 5, 164,
+            52, 118, 220, 215, 136, 109, 14, 70, 118, 147, 212, 180, 52,
+        ],
+        [
+            162, 34, 139, 38, 22, 144, 76, 40, 62, 100, 16, 96, 187, 133, 251, 207, 24, 229, 28,
+            15, 243, 126, 192, 49, 78, 19, 171, 244, 38, 152, 49, 48,
+        ],
+        [
+            156, 79, 249, 126, 214, 71, 52, 167, 23, 74, 34, 53, 116, 119, 101, 73, 139, 0, 214, 8,
+            165, 21, 237, 91, 41, 154, 105, 148, 158, 109, 86, 4,
+        ],
+        [
+            18, 190, 253, 27, 131, 121, 226, 105, 125, 62, 67, 179, 22, 245, 106, 80, 132, 191, 71,
+            72, 139, 255, 44, 115, 58, 245, 52, 70, 181, 3, 70, 21,
+        ],
+    ],
+    [
+        [
+            80, 124, 240, 232, 204, 160, 223, 47, 212, 70, 254, 52, 246, 144, 208, 188, 234, 135,
+            228, 159, 159, 194, 192, 107, 188, 57, 154, 163, 184, 53, 100, 44,
+        ],
+        [
+            75, 85, 94, 47, 222, 218, 25, 221, 103, 44, 223, 208, 96, 167, 80, 244, 3, 145, 108,
+            246, 106, 250, 68, 7, 167, 208, 175, 48, 117, 132, 62, 56,
+        ],
+        [
+            86, 43, 192, 127, 103, 49, 141, 242, 26, 223, 123, 81, 193, 204, 142, 184, 208, 72, 98,
+            101, 163, 68, 149, 183, 184, 29, 148, 26, 79, 89, 63, 7,
+        ],
+        [
+            13, 17, 229, 153, 40, 187, 221, 180, 216, 40, 169, 214, 113, 40, 104, 151, 96, 61, 225,
+            245, 220, 170, 198, 151, 134, 249, 146, 22, 49, 18, 117, 23,
+        ],
+        [
+            24, 160, 53, 180, 65, 171, 149, 169, 240, 40, 53, 91, 160, 6, 73, 4, 74, 136, 214, 119,
+            226, 139, 89, 65, 171, 116, 135, 48, 173, 31, 151, 21,
+        ],
+        [
+            87, 245, 10, 110, 108, 73, 107, 12, 238, 92, 189, 142, 60, 156, 208, 149, 246, 203,
+            116, 204, 81, 86, 83, 23, 216, 84, 14, 59, 69, 226, 129, 53,
+        ],
+        [
+            136, 212, 47, 189, 103, 45, 150, 40, 232, 21, 226, 251, 185, 20, 204, 133, 61, 33, 35,
+            12, 250, 121, 142, 19, 135, 13, 175, 97, 211, 151, 76, 59,
+        ],
+        [
+            94, 35, 203, 250, 198, 153, 2, 78, 51, 187, 241, 100, 16, 204, 18, 163, 4, 164, 181,
+            48, 70, 13, 140, 179, 246, 138, 46, 169, 239, 63, 83, 54,
+        ],
+    ],
+    [
+        [
+            196, 215, 172, 247, 59, 103, 86, 156, 251, 251, 189, 44, 121, 171, 238, 170, 90, 94,
+            229, 210, 2, 28, 116, 152, 175, 132, 150, 248, 247, 33, 93, 21,
+        ],
+        [
+            11, 90, 134, 193, 86, 130, 247, 159, 151, 103, 235, 179, 36, 64, 31, 5, 216, 136, 218,
+            242, 78, 34, 94, 97, 216, 226, 91, 32, 255, 21, 194, 8,
+        ],
+        [
+            90, 247, 208, 172, 150, 176, 5, 164, 130, 56, 121, 166, 192, 17, 147, 181, 227, 173,
+            129, 60, 164, 158, 107, 41, 196, 190, 42, 251, 119, 141, 10, 39,
+        ],
+        [
+            251, 222, 252, 102, 190, 25, 50, 11, 77, 246, 85, 34, 74, 50, 187, 142, 67, 52, 11,
+            106, 12, 141, 82, 182, 116, 253, 163, 140, 96, 98, 49, 24,
+        ],
+        [
+            8, 73, 143, 244, 252, 146, 102, 150, 89, 157, 174, 71, 145, 173, 140, 93, 252, 86, 188,
+            244, 50, 29, 20, 215, 83, 180, 168, 192, 50, 174, 135, 35,
+        ],
+        [
+            9, 29, 218, 176, 253, 21, 178, 210, 244, 103, 160, 163, 241, 203, 37, 18, 141, 143, 66,
+            247, 138, 118, 238, 64, 213, 141, 137, 207, 192, 146, 60, 16,
+        ],
+        [
+            23, 112, 67, 207, 126, 97, 125, 148, 105, 113, 57, 100, 159, 254, 187, 221, 179, 75,
+            84, 174, 136, 217, 67, 60, 52, 107, 254, 187, 54, 211, 173, 20,
+        ],
+        [
+            197, 164, 148, 248, 41, 239, 242, 160, 160, 121, 202, 77, 129, 207, 71, 251, 23, 90,
+            94, 78, 15, 206, 195, 162, 59, 131, 154, 91, 51, 112, 146, 20,
+        ],
+    ],
+    [
+        [
+            197, 194, 236, 107, 71, 31, 175, 12, 97, 227, 76, 119, 30, 218, 41, 255, 125, 91, 56,
+            190, 6, 1, 9, 248, 146, 9, 190, 14, 239, 199, 13, 35,
+        ],
+        [
+            26, 55, 245, 109, 77, 123, 10, 248, 62, 199, 41, 101, 47, 206, 8, 105, 156, 69, 125, 8,
+            50, 122, 23, 226, 145, 12, 219, 99, 67, 3, 191, 61,
+        ],
+        [
+            109, 119, 98, 22, 28, 134, 177, 75, 25, 239, 54, 177, 169, 132, 116, 64, 4, 126, 221,
+            82, 209, 126, 208, 215, 116, 246, 75, 215, 125, 163, 194, 7,
+        ],
+        [
+            206, 15, 193, 174, 47, 41, 191, 214, 49, 210, 206, 7, 100, 245, 30, 170, 116, 39, 148,
+            121, 53, 80, 201, 222, 6, 85, 55, 205, 72, 174, 6, 30,
+        ],
+        [
+            229, 61, 220, 101, 100, 229, 212, 61, 175, 75, 4, 139, 117, 135, 63, 236, 252, 252,
+            226, 155, 85, 116, 194, 245, 243, 209, 32, 159, 63, 234, 30, 37,
+        ],
+        [
+            101, 33, 62, 209, 69, 119, 42, 92, 72, 89, 169, 145, 81, 100, 138, 196, 41, 253, 17,
+            139, 60, 148, 139, 33, 255, 217, 8, 120, 230, 207, 192, 0,
+        ],
+        [
+            39, 245, 116, 42, 45, 45, 44, 76, 177, 117, 99, 172, 86, 59, 13, 153, 100, 22, 9, 34,
+            175, 154, 45, 229, 115, 193, 15, 182, 165, 125, 221, 1,
+        ],
+        [
+            31, 54, 118, 58, 10, 66, 64, 174, 93, 114, 215, 142, 4, 206, 248, 153, 215, 197, 227,
+            232, 157, 63, 47, 149, 123, 20, 49, 177, 74, 71, 82, 47,
+        ],
+    ],
+    [
+        [
+            101, 117, 124, 209, 188, 36, 221, 34, 18, 6, 100, 248, 247, 169, 215, 102, 222, 48, 63,
+            163, 182, 198, 83, 29, 203, 38, 22, 215, 118, 207, 177, 24,
+        ],
+        [
+            84, 130, 80, 94, 13, 54, 109, 181, 221, 55, 251, 15, 143, 19, 87, 37, 148, 115, 213,
+            160, 66, 83, 85, 162, 181, 179, 123, 17, 167, 247, 169, 37,
+        ],
+        [
+            48, 59, 190, 61, 155, 234, 182, 117, 7, 244, 103, 194, 137, 218, 193, 172, 133, 66,
+            223, 190, 111, 184, 35, 252, 102, 241, 89, 202, 143, 204, 240, 20,
+        ],
+        [
+            119, 50, 120, 161, 215, 33, 56, 98, 241, 90, 240, 196, 248, 176, 102, 160, 235, 212,
+            132, 151, 245, 11, 100, 223, 178, 133, 219, 85, 167, 246, 224, 21,
+        ],
+        [
+            229, 144, 255, 154, 253, 52, 218, 12, 50, 165, 137, 170, 99, 196, 224, 186, 205, 85,
+            190, 222, 118, 171, 254, 22, 7, 161, 255, 63, 75, 232, 3, 40,
+        ],
+        [
+            65, 180, 60, 254, 30, 123, 254, 166, 174, 240, 212, 209, 13, 250, 250, 250, 145, 169,
+            183, 194, 250, 165, 207, 148, 223, 58, 237, 44, 189, 216, 54, 42,
+        ],
+        [
+            226, 251, 98, 219, 120, 82, 25, 105, 66, 253, 36, 140, 6, 244, 78, 64, 192, 2, 213,
+            254, 215, 31, 221, 88, 6, 22, 221, 114, 145, 79, 29, 5,
+        ],
+        [
+            113, 197, 52, 189, 31, 251, 25, 215, 225, 220, 50, 184, 252, 46, 191, 8, 128, 233, 194,
+            71, 209, 60, 75, 190, 18, 160, 165, 185, 140, 84, 132, 54,
+        ],
+    ],
+    [
+        [
+            142, 77, 52, 88, 247, 15, 6, 176, 107, 248, 160, 21, 209, 145, 80, 129, 225, 111, 95,
+            237, 154, 77, 137, 253, 198, 71, 191, 114, 103, 5, 177, 39,
+        ],
+        [
+            100, 4, 219, 69, 66, 64, 242, 131, 146, 201, 195, 14, 122, 183, 133, 62, 93, 159, 223,
+            121, 254, 112, 235, 156, 41, 123, 165, 215, 129, 120, 57, 57,
+        ],
+        [
+            11, 207, 121, 20, 205, 231, 207, 28, 66, 107, 148, 129, 36, 231, 40, 57, 75, 223, 109,
+            181, 67, 177, 222, 11, 49, 217, 251, 164, 148, 153, 149, 7,
+        ],
+        [
+            162, 102, 217, 50, 109, 94, 110, 154, 241, 207, 28, 240, 23, 129, 206, 78, 234, 74,
+            156, 43, 11, 214, 17, 71, 48, 2, 64, 148, 241, 130, 185, 3,
+        ],
+        [
+            142, 69, 138, 197, 77, 73, 50, 67, 52, 165, 96, 106, 125, 213, 111, 77, 92, 113, 130,
+            95, 184, 18, 167, 102, 222, 99, 108, 45, 158, 82, 209, 35,
+        ],
+        [
+            87, 67, 165, 162, 27, 141, 113, 255, 161, 65, 129, 182, 154, 52, 53, 145, 58, 102, 217,
+            92, 230, 24, 189, 13, 111, 139, 65, 225, 173, 227, 67, 28,
+        ],
+        [
+            202, 80, 111, 163, 121, 60, 211, 55, 216, 58, 50, 109, 16, 57, 8, 8, 46, 72, 193, 153,
+            65, 167, 132, 192, 231, 21, 247, 69, 33, 20, 58, 23,
+        ],
+        [
+            249, 173, 126, 139, 157, 178, 129, 165, 40, 169, 0, 114, 71, 157, 88, 113, 122, 40,
+            191, 200, 72, 90, 5, 41, 121, 7, 152, 40, 85, 132, 39, 4,
+        ],
+    ],
+    [
+        [
+            199, 216, 114, 251, 140, 210, 175, 171, 220, 148, 69, 166, 128, 95, 74, 205, 248, 245,
+            19, 125, 233, 17, 142, 185, 113, 146, 57, 42, 0, 120, 198, 4,
+        ],
+        [
+            250, 9, 179, 31, 23, 73, 162, 25, 28, 253, 80, 9, 232, 137, 137, 43, 17, 241, 71, 178,
+            151, 218, 104, 93, 121, 153, 27, 40, 120, 219, 43, 47,
+        ],
+        [
+            23, 231, 27, 9, 75, 177, 179, 234, 202, 55, 195, 150, 120, 172, 62, 156, 183, 43, 84,
+            109, 173, 197, 148, 245, 133, 189, 127, 174, 82, 189, 115, 25,
+        ],
+        [
+            9, 143, 201, 210, 39, 51, 154, 239, 84, 93, 95, 93, 3, 91, 159, 65, 0, 98, 184, 97,
+            108, 24, 36, 170, 223, 25, 245, 14, 144, 196, 66, 47,
+        ],
+        [
+            94, 162, 20, 133, 117, 34, 246, 81, 24, 117, 207, 237, 217, 57, 146, 137, 143, 215,
+            159, 112, 85, 221, 211, 241, 61, 19, 20, 198, 223, 206, 104, 19,
+        ],
+        [
+            89, 188, 251, 72, 124, 111, 97, 181, 107, 226, 217, 177, 180, 22, 182, 252, 46, 174,
+            117, 232, 43, 159, 47, 17, 108, 190, 117, 228, 186, 121, 102, 56,
+        ],
+        [
+            243, 167, 49, 44, 140, 139, 230, 208, 31, 131, 170, 189, 192, 4, 203, 255, 24, 221,
+            194, 244, 109, 141, 22, 224, 138, 88, 234, 70, 99, 44, 158, 16,
+        ],
+        [
+            136, 211, 151, 83, 245, 38, 217, 39, 240, 140, 51, 223, 35, 33, 225, 23, 89, 102, 73,
+            255, 73, 0, 214, 171, 6, 199, 255, 162, 247, 240, 205, 26,
+        ],
+    ],
+    [
+        [
+            254, 77, 97, 198, 201, 60, 159, 34, 206, 67, 175, 168, 187, 6, 194, 218, 205, 50, 36,
+            161, 65, 69, 61, 160, 250, 92, 190, 125, 252, 88, 68, 25,
+        ],
+        [
+            133, 196, 181, 170, 255, 139, 126, 115, 14, 8, 201, 55, 127, 0, 78, 159, 174, 128, 246,
+            25, 157, 67, 55, 224, 177, 43, 162, 37, 70, 56, 4, 27,
+        ],
+        [
+            112, 166, 24, 255, 18, 180, 244, 235, 31, 244, 66, 170, 197, 32, 253, 64, 16, 184, 86,
+            163, 30, 235, 54, 178, 201, 177, 153, 71, 176, 227, 211, 26,
+        ],
+        [
+            151, 222, 230, 164, 11, 133, 141, 108, 118, 190, 234, 99, 15, 33, 229, 82, 88, 14, 9,
+            120, 72, 207, 4, 120, 64, 65, 41, 222, 46, 203, 18, 9,
+        ],
+        [
+            103, 80, 114, 196, 74, 31, 54, 48, 10, 95, 29, 137, 192, 2, 117, 62, 170, 67, 233, 14,
+            92, 90, 108, 161, 78, 71, 153, 237, 75, 227, 166, 5,
+        ],
+        [
+            212, 150, 143, 103, 12, 222, 171, 219, 8, 32, 230, 183, 124, 27, 227, 126, 179, 47,
+            222, 140, 182, 172, 225, 22, 227, 50, 79, 237, 228, 201, 201, 57,
+        ],
+        [
+            70, 84, 206, 124, 223, 76, 35, 210, 59, 152, 102, 132, 156, 238, 248, 117, 141, 11, 8,
+            13, 50, 184, 50, 10, 163, 255, 207, 54, 255, 18, 3, 15,
+        ],
+        [
+            6, 252, 192, 97, 81, 78, 102, 178, 50, 96, 125, 90, 116, 56, 139, 196, 202, 88, 121,
+            186, 27, 23, 112, 100, 105, 28, 30, 44, 39, 83, 71, 14,
+        ],
+    ],
+    [
+        [
+            251, 94, 232, 178, 20, 76, 56, 34, 195, 179, 50, 154, 255, 237, 147, 119, 150, 15, 199,
+            76, 170, 185, 174, 58, 52, 46, 50, 22, 155, 174, 2, 29,
+        ],
+        [
+            213, 156, 33, 83, 188, 31, 83, 136, 209, 126, 89, 13, 129, 191, 217, 248, 192, 156,
+            175, 74, 138, 54, 211, 158, 215, 21, 159, 116, 54, 167, 90, 3,
+        ],
+        [
+            144, 92, 139, 79, 131, 242, 162, 182, 206, 192, 184, 68, 136, 217, 253, 55, 94, 203,
+            200, 248, 114, 55, 235, 153, 179, 204, 123, 113, 118, 90, 213, 59,
+        ],
+        [
+            91, 135, 225, 99, 39, 50, 171, 68, 85, 153, 75, 163, 52, 245, 81, 102, 116, 162, 178,
+            207, 99, 156, 37, 226, 47, 164, 207, 174, 132, 132, 133, 60,
+        ],
+        [
+            54, 214, 3, 118, 0, 225, 55, 117, 205, 163, 115, 249, 200, 246, 140, 108, 76, 169, 50,
+            122, 155, 118, 18, 154, 88, 129, 196, 0, 233, 169, 115, 0,
+        ],
+        [
+            124, 176, 25, 175, 103, 157, 153, 64, 64, 22, 197, 54, 192, 232, 233, 212, 146, 16,
+            183, 52, 141, 90, 80, 128, 237, 67, 145, 229, 89, 9, 192, 46,
+        ],
+        [
+            213, 174, 134, 198, 210, 44, 68, 2, 36, 211, 34, 63, 65, 177, 47, 211, 85, 214, 83, 15,
+            158, 245, 58, 134, 23, 194, 25, 245, 254, 120, 158, 15,
+        ],
+        [
+            81, 6, 176, 10, 91, 61, 188, 113, 152, 41, 236, 6, 95, 20, 71, 148, 23, 21, 40, 26,
+            240, 110, 136, 133, 26, 121, 121, 214, 161, 97, 185, 30,
+        ],
+    ],
+    [
+        [
+            71, 167, 42, 102, 126, 239, 68, 9, 111, 196, 137, 241, 163, 6, 156, 107, 138, 134, 74,
+            132, 121, 33, 184, 172, 186, 130, 126, 62, 237, 118, 242, 26,
+        ],
+        [
+            130, 92, 111, 138, 18, 54, 180, 172, 235, 236, 195, 254, 31, 119, 107, 236, 128, 170,
+            143, 88, 90, 255, 23, 114, 193, 147, 139, 82, 215, 223, 190, 60,
+        ],
+        [
+            85, 115, 103, 249, 139, 252, 172, 223, 249, 30, 175, 150, 183, 241, 226, 250, 69, 42,
+            207, 248, 102, 215, 134, 31, 198, 184, 222, 211, 172, 176, 22, 10,
+        ],
+        [
+            124, 104, 228, 185, 245, 31, 226, 5, 192, 123, 102, 59, 179, 106, 171, 111, 10, 29, 79,
+            223, 174, 80, 224, 180, 71, 96, 52, 20, 213, 116, 245, 4,
+        ],
+        [
+            204, 7, 183, 204, 52, 91, 161, 202, 255, 249, 153, 146, 3, 171, 245, 206, 34, 133, 131,
+            3, 52, 31, 56, 253, 203, 81, 176, 126, 113, 38, 164, 52,
+        ],
+        [
+            170, 200, 186, 32, 27, 90, 197, 215, 251, 122, 225, 34, 45, 175, 154, 199, 161, 24,
+            103, 6, 195, 12, 138, 54, 210, 118, 197, 114, 60, 16, 192, 6,
+        ],
+        [
+            168, 15, 89, 40, 153, 35, 233, 107, 133, 214, 104, 196, 21, 161, 5, 77, 119, 71, 1,
+            140, 212, 160, 104, 252, 2, 166, 70, 57, 231, 28, 116, 4,
+        ],
+        [
+            228, 252, 183, 21, 218, 84, 226, 14, 150, 183, 222, 17, 159, 46, 189, 140, 36, 60, 42,
+            103, 42, 207, 72, 169, 51, 212, 213, 209, 67, 129, 17, 17,
+        ],
+    ],
+    [
+        [
+            229, 94, 4, 4, 255, 10, 228, 111, 228, 106, 39, 196, 52, 15, 132, 47, 69, 132, 17, 208,
+            13, 31, 167, 122, 184, 4, 212, 237, 111, 253, 11, 21,
+        ],
+        [
+            53, 100, 74, 54, 153, 221, 88, 228, 247, 9, 37, 119, 44, 212, 219, 189, 28, 56, 188,
+            198, 217, 1, 176, 232, 60, 123, 225, 127, 139, 193, 6, 31,
+        ],
+        [
+            186, 168, 160, 166, 117, 235, 200, 114, 87, 89, 231, 247, 221, 235, 74, 28, 189, 19,
+            28, 250, 46, 18, 120, 213, 193, 165, 126, 113, 134, 33, 32, 1,
+        ],
+        [
+            50, 59, 63, 152, 85, 72, 221, 20, 198, 176, 87, 118, 81, 128, 237, 174, 255, 75, 155,
+            53, 225, 109, 108, 226, 71, 88, 113, 119, 79, 43, 101, 38,
+        ],
+        [
+            247, 92, 39, 118, 214, 109, 43, 18, 244, 113, 180, 251, 7, 111, 140, 206, 180, 97, 232,
+            118, 86, 133, 251, 155, 26, 165, 139, 163, 215, 90, 77, 32,
+        ],
+        [
+            149, 133, 199, 150, 17, 179, 149, 210, 101, 143, 83, 108, 98, 253, 84, 88, 141, 25,
+            138, 95, 17, 3, 61, 100, 3, 78, 192, 208, 117, 129, 2, 6,
+        ],
+        [
+            91, 178, 133, 154, 63, 174, 196, 94, 152, 232, 192, 125, 37, 28, 44, 110, 38, 62, 21,
+            218, 235, 32, 32, 202, 98, 230, 161, 4, 128, 239, 125, 12,
+        ],
+        [
+            151, 89, 41, 182, 150, 178, 27, 24, 82, 77, 206, 134, 252, 28, 50, 228, 213, 182, 197,
+            209, 49, 213, 175, 72, 189, 253, 249, 88, 108, 236, 168, 58,
+        ],
+    ],
+    [
+        [
+            38, 21, 85, 239, 52, 220, 50, 246, 95, 229, 244, 243, 173, 123, 102, 19, 164, 131, 228,
+            132, 241, 24, 151, 136, 224, 25, 54, 189, 80, 222, 246, 22,
+        ],
+        [
+            244, 175, 133, 128, 140, 88, 63, 118, 85, 87, 53, 206, 87, 43, 61, 129, 118, 243, 9,
+            191, 248, 248, 70, 141, 80, 49, 149, 101, 197, 108, 2, 16,
+        ],
+        [
+            228, 89, 135, 108, 54, 96, 202, 77, 40, 125, 27, 170, 68, 170, 35, 209, 21, 253, 54,
+            24, 198, 125, 164, 90, 226, 96, 191, 107, 23, 182, 237, 44,
+        ],
+        [
+            60, 224, 131, 3, 20, 51, 245, 142, 136, 95, 102, 66, 216, 168, 75, 59, 218, 9, 12, 179,
+            110, 203, 136, 209, 124, 209, 123, 238, 155, 141, 119, 30,
+        ],
+        [
+            56, 124, 170, 94, 110, 39, 171, 145, 126, 39, 53, 218, 222, 52, 177, 152, 181, 192, 92,
+            212, 138, 130, 233, 100, 78, 160, 236, 36, 101, 9, 253, 47,
+        ],
+        [
+            73, 38, 150, 82, 121, 254, 45, 212, 3, 18, 24, 130, 113, 56, 74, 110, 9, 206, 34, 91,
+            223, 241, 108, 114, 238, 211, 171, 30, 137, 150, 59, 0,
+        ],
+        [
+            72, 66, 80, 129, 28, 93, 228, 162, 207, 163, 104, 93, 73, 170, 53, 116, 34, 97, 34, 28,
+            147, 33, 119, 42, 3, 2, 144, 113, 205, 233, 98, 6,
+        ],
+        [
+            152, 136, 201, 11, 112, 141, 110, 36, 28, 222, 78, 38, 88, 212, 172, 192, 168, 212,
+            248, 176, 243, 215, 39, 54, 166, 119, 60, 182, 84, 44, 132, 1,
+        ],
+    ],
+    [
+        [
+            166, 20, 55, 181, 238, 166, 209, 247, 197, 203, 233, 189, 89, 232, 139, 118, 203, 26,
+            245, 159, 234, 187, 122, 104, 95, 200, 221, 233, 216, 232, 137, 44,
+        ],
+        [
+            149, 226, 202, 252, 150, 254, 162, 47, 186, 188, 250, 215, 65, 25, 65, 199, 156, 231,
+            254, 234, 86, 188, 133, 32, 37, 32, 138, 174, 186, 151, 23, 59,
+        ],
+        [
+            123, 18, 173, 246, 115, 145, 29, 164, 82, 83, 79, 117, 140, 85, 179, 255, 80, 78, 124,
+            154, 179, 168, 22, 216, 87, 39, 12, 224, 219, 14, 237, 47,
+        ],
+        [
+            198, 76, 74, 220, 44, 216, 61, 154, 238, 101, 198, 27, 202, 26, 80, 54, 22, 209, 105,
+            210, 163, 61, 69, 57, 165, 232, 132, 92, 116, 105, 213, 62,
+        ],
+        [
+            184, 32, 212, 62, 67, 44, 136, 203, 226, 214, 152, 150, 241, 162, 174, 69, 254, 15, 17,
+            28, 234, 162, 154, 43, 55, 57, 48, 146, 13, 170, 146, 36,
+        ],
+        [
+            40, 10, 127, 190, 248, 155, 217, 21, 147, 185, 101, 235, 133, 96, 152, 7, 89, 74, 127,
+            120, 205, 71, 181, 117, 141, 158, 100, 225, 86, 35, 84, 30,
+        ],
+        [
+            59, 0, 26, 9, 117, 171, 252, 142, 194, 159, 19, 148, 53, 2, 243, 200, 116, 95, 59, 43,
+            156, 118, 8, 146, 31, 235, 125, 67, 226, 193, 192, 14,
+        ],
+        [
+            152, 174, 144, 126, 124, 71, 171, 85, 237, 165, 158, 214, 209, 62, 250, 85, 162, 49,
+            129, 79, 191, 21, 192, 223, 222, 118, 173, 150, 164, 212, 184, 41,
+        ],
+    ],
+    [
+        [
+            217, 100, 143, 202, 28, 1, 60, 244, 252, 12, 56, 235, 162, 250, 194, 0, 158, 25, 148,
+            62, 226, 184, 144, 86, 154, 54, 77, 122, 47, 47, 37, 47,
+        ],
+        [
+            202, 69, 190, 148, 247, 74, 31, 98, 96, 125, 31, 19, 13, 131, 46, 232, 247, 75, 226,
+            211, 35, 173, 66, 190, 8, 160, 57, 35, 181, 203, 33, 57,
+        ],
+        [
+            105, 168, 39, 76, 17, 201, 8, 85, 160, 1, 108, 17, 65, 17, 143, 13, 26, 237, 93, 205,
+            40, 188, 41, 247, 82, 200, 105, 236, 20, 96, 99, 16,
+        ],
+        [
+            8, 225, 80, 33, 92, 253, 80, 149, 76, 124, 194, 200, 247, 158, 230, 212, 154, 151, 45,
+            60, 189, 91, 94, 248, 13, 166, 178, 71, 207, 40, 252, 34,
+        ],
+        [
+            112, 102, 155, 6, 178, 250, 238, 207, 237, 193, 217, 248, 147, 24, 131, 76, 225, 178,
+            237, 111, 231, 44, 13, 218, 28, 166, 69, 107, 158, 18, 239, 14,
+        ],
+        [
+            9, 175, 91, 204, 143, 242, 215, 115, 39, 213, 85, 208, 155, 76, 228, 114, 126, 170,
+            228, 103, 118, 64, 196, 226, 35, 184, 202, 195, 205, 36, 213, 24,
+        ],
+        [
+            121, 166, 135, 131, 76, 123, 114, 93, 221, 160, 197, 146, 126, 212, 52, 241, 95, 56,
+            127, 65, 155, 66, 25, 216, 43, 42, 163, 49, 131, 212, 76, 7,
+        ],
+        [
+            99, 210, 39, 55, 89, 68, 174, 153, 25, 69, 37, 70, 180, 15, 215, 92, 30, 95, 85, 74,
+            115, 111, 15, 166, 74, 203, 79, 168, 21, 176, 80, 27,
+        ],
+    ],
+    [
+        [
+            57, 146, 226, 221, 107, 225, 126, 141, 182, 27, 144, 50, 73, 165, 21, 228, 91, 125, 53,
+            198, 13, 183, 251, 163, 208, 52, 135, 192, 136, 144, 143, 33,
+        ],
+        [
+            123, 7, 46, 76, 70, 183, 31, 50, 102, 73, 52, 69, 42, 212, 19, 239, 207, 121, 226, 48,
+            7, 124, 101, 156, 27, 108, 250, 115, 203, 80, 158, 54,
+        ],
+        [
+            105, 12, 215, 144, 236, 236, 57, 169, 134, 16, 123, 228, 143, 246, 201, 34, 194, 94,
+            87, 66, 109, 43, 155, 104, 47, 0, 200, 97, 218, 162, 17, 13,
+        ],
+        [
+            124, 237, 179, 116, 163, 119, 114, 172, 236, 205, 105, 103, 1, 74, 29, 243, 205, 244,
+            232, 249, 52, 251, 59, 108, 46, 186, 212, 23, 85, 250, 38, 2,
+        ],
+        [
+            169, 136, 44, 150, 8, 97, 227, 243, 193, 218, 181, 203, 176, 162, 70, 93, 239, 130,
+            230, 67, 9, 57, 26, 124, 59, 229, 159, 92, 24, 98, 77, 53,
+        ],
+        [
+            81, 1, 244, 212, 4, 189, 139, 212, 63, 219, 239, 218, 254, 209, 167, 118, 214, 108, 63,
+            241, 3, 215, 184, 41, 148, 192, 183, 121, 48, 82, 1, 25,
+        ],
+        [
+            77, 157, 101, 207, 121, 249, 208, 27, 219, 162, 235, 48, 152, 43, 15, 71, 93, 19, 134,
+            30, 228, 115, 246, 243, 146, 135, 193, 55, 199, 21, 26, 58,
+        ],
+        [
+            158, 13, 107, 51, 93, 172, 190, 196, 224, 143, 126, 198, 215, 92, 139, 136, 230, 209,
+            26, 247, 99, 138, 255, 219, 115, 248, 137, 42, 148, 138, 164, 35,
+        ],
+    ],
+    [
+        [
+            144, 129, 1, 246, 175, 28, 39, 247, 112, 135, 137, 167, 136, 48, 66, 164, 151, 73, 8,
+            241, 210, 54, 55, 165, 84, 252, 199, 16, 160, 37, 145, 23,
+        ],
+        [
+            192, 125, 70, 179, 34, 242, 184, 201, 4, 245, 132, 241, 154, 195, 44, 156, 117, 250,
+            176, 65, 83, 229, 1, 161, 53, 116, 194, 235, 72, 95, 130, 10,
+        ],
+        [
+            228, 8, 155, 222, 133, 218, 125, 194, 220, 72, 46, 118, 157, 179, 153, 160, 190, 219,
+            166, 145, 183, 114, 184, 90, 206, 47, 43, 46, 190, 180, 243, 14,
+        ],
+        [
+            144, 1, 212, 200, 34, 67, 61, 193, 101, 41, 199, 112, 121, 197, 30, 248, 172, 240, 1,
+            23, 210, 116, 54, 82, 203, 153, 141, 24, 223, 253, 48, 25,
+        ],
+        [
+            97, 162, 113, 178, 80, 172, 128, 13, 18, 247, 1, 132, 162, 145, 152, 16, 26, 44, 104,
+            137, 200, 140, 57, 188, 181, 173, 186, 77, 241, 70, 103, 62,
+        ],
+        [
+            98, 180, 95, 72, 251, 169, 134, 210, 225, 93, 191, 188, 89, 165, 113, 10, 20, 55, 249,
+            100, 231, 105, 100, 74, 66, 30, 50, 169, 116, 236, 28, 25,
+        ],
+        [
+            106, 166, 231, 140, 101, 154, 108, 162, 240, 137, 97, 132, 90, 169, 10, 153, 166, 136,
+            135, 146, 102, 93, 177, 86, 64, 92, 168, 72, 31, 104, 20, 33,
+        ],
+        [
+            188, 211, 184, 142, 84, 192, 128, 168, 155, 47, 14, 126, 83, 126, 152, 130, 211, 224,
+            8, 217, 108, 82, 178, 193, 83, 42, 129, 40, 74, 255, 26, 21,
+        ],
+    ],
+    [
+        [
+            27, 111, 120, 34, 70, 220, 74, 211, 225, 132, 62, 224, 106, 147, 107, 170, 65, 245,
+            126, 162, 179, 236, 82, 239, 235, 57, 126, 146, 208, 181, 25, 25,
+        ],
+        [
+            67, 51, 145, 136, 236, 14, 221, 242, 49, 186, 236, 69, 247, 188, 190, 22, 49, 49, 193,
+            147, 62, 22, 207, 31, 233, 100, 182, 124, 70, 69, 83, 19,
+        ],
+        [
+            25, 40, 159, 124, 230, 217, 113, 135, 193, 155, 204, 66, 147, 111, 238, 31, 231, 110,
+            72, 68, 189, 205, 241, 130, 156, 50, 58, 137, 248, 179, 113, 34,
+        ],
+        [
+            199, 7, 17, 175, 48, 117, 199, 19, 50, 252, 37, 72, 70, 122, 69, 90, 19, 57, 128, 68,
+            235, 160, 101, 40, 62, 245, 236, 132, 63, 145, 10, 11,
+        ],
+        [
+            238, 244, 156, 113, 5, 156, 173, 22, 95, 73, 65, 155, 53, 223, 225, 255, 58, 104, 112,
+            89, 167, 166, 114, 249, 45, 217, 195, 168, 12, 31, 14, 5,
+        ],
+        [
+            168, 30, 153, 147, 149, 139, 195, 4, 163, 70, 46, 36, 180, 109, 86, 197, 142, 11, 142,
+            250, 72, 198, 51, 173, 202, 162, 153, 85, 2, 145, 110, 10,
+        ],
+        [
+            36, 27, 187, 193, 56, 99, 159, 134, 253, 3, 229, 231, 249, 147, 129, 252, 156, 85, 84,
+            57, 241, 140, 251, 174, 135, 138, 176, 221, 73, 222, 159, 14,
+        ],
+        [
+            206, 186, 15, 163, 104, 0, 19, 188, 128, 226, 81, 186, 190, 214, 39, 110, 123, 9, 147,
+            66, 66, 64, 78, 14, 58, 49, 165, 149, 192, 4, 67, 13,
+        ],
+    ],
+    [
+        [
+            32, 250, 229, 202, 183, 206, 20, 75, 220, 120, 12, 190, 111, 12, 98, 111, 61, 146, 165,
+            166, 133, 60, 94, 136, 61, 223, 154, 129, 90, 109, 230, 10,
+        ],
+        [
+            147, 107, 125, 22, 133, 54, 201, 8, 20, 118, 236, 210, 106, 113, 137, 34, 237, 206,
+            128, 160, 184, 214, 23, 43, 145, 48, 157, 54, 59, 100, 162, 8,
+        ],
+        [
+            13, 212, 17, 152, 59, 216, 167, 254, 78, 26, 36, 129, 32, 206, 173, 158, 23, 4, 56,
+            205, 192, 12, 1, 27, 227, 234, 12, 233, 104, 82, 182, 61,
+        ],
+        [
+            7, 17, 169, 161, 14, 21, 162, 94, 106, 66, 217, 14, 218, 63, 127, 131, 90, 30, 175,
+            208, 7, 209, 226, 5, 137, 240, 116, 204, 192, 76, 138, 51,
+        ],
+        [
+            190, 206, 82, 115, 96, 94, 88, 62, 148, 244, 93, 133, 55, 16, 9, 115, 17, 170, 88, 254,
+            150, 87, 214, 42, 60, 43, 247, 235, 111, 159, 60, 42,
+        ],
+        [
+            253, 2, 221, 158, 160, 73, 222, 22, 213, 157, 119, 31, 16, 236, 85, 113, 78, 159, 158,
+            85, 126, 31, 31, 136, 220, 205, 114, 13, 54, 102, 96, 10,
+        ],
+        [
+            11, 138, 36, 180, 3, 0, 209, 232, 70, 200, 182, 250, 148, 237, 249, 181, 32, 214, 7,
+            223, 165, 74, 141, 2, 237, 247, 107, 67, 252, 175, 58, 44,
+        ],
+        [
+            228, 122, 212, 211, 34, 224, 37, 28, 89, 232, 71, 201, 243, 32, 242, 117, 54, 221, 62,
+            243, 217, 189, 0, 215, 68, 28, 192, 112, 142, 49, 211, 12,
+        ],
+    ],
+    [
+        [
+            146, 43, 218, 86, 28, 225, 144, 208, 46, 241, 190, 206, 28, 110, 180, 198, 132, 130,
+            253, 202, 21, 111, 227, 246, 195, 55, 14, 125, 40, 137, 176, 30,
+        ],
+        [
+            95, 71, 151, 226, 250, 85, 113, 233, 79, 7, 178, 203, 58, 47, 152, 144, 214, 1, 202,
+            245, 234, 85, 58, 45, 235, 255, 6, 174, 119, 7, 46, 30,
+        ],
+        [
+            164, 42, 64, 130, 86, 86, 18, 10, 84, 13, 223, 98, 150, 57, 219, 189, 41, 25, 54, 97,
+            151, 202, 192, 203, 75, 104, 152, 221, 238, 70, 27, 45,
+        ],
+        [
+            127, 13, 100, 237, 255, 54, 232, 43, 143, 73, 168, 109, 176, 49, 8, 120, 57, 130, 244,
+            217, 26, 122, 135, 110, 64, 85, 16, 224, 79, 231, 138, 62,
+        ],
+        [
+            194, 131, 166, 241, 159, 28, 76, 114, 253, 239, 213, 220, 254, 100, 77, 64, 91, 238,
+            87, 44, 36, 163, 148, 132, 32, 1, 178, 89, 210, 240, 134, 48,
+        ],
+        [
+            123, 225, 66, 102, 92, 204, 94, 145, 164, 245, 23, 107, 190, 226, 54, 77, 213, 179,
+            125, 75, 186, 59, 70, 150, 179, 74, 227, 71, 147, 60, 139, 16,
+        ],
+        [
+            39, 243, 105, 150, 174, 74, 30, 84, 233, 29, 218, 218, 73, 42, 20, 214, 172, 15, 236,
+            147, 47, 157, 17, 153, 87, 209, 198, 9, 91, 84, 88, 35,
+        ],
+        [
+            45, 154, 254, 153, 15, 16, 141, 166, 168, 13, 22, 76, 212, 147, 189, 192, 47, 5, 41,
+            249, 28, 251, 60, 130, 52, 148, 200, 198, 95, 188, 221, 30,
+        ],
+    ],
+    [
+        [
+            107, 243, 152, 171, 58, 95, 246, 5, 41, 34, 30, 145, 136, 116, 75, 1, 3, 253, 5, 12,
+            117, 143, 210, 29, 168, 141, 105, 141, 77, 72, 157, 45,
+        ],
+        [
+            35, 114, 206, 37, 84, 242, 230, 119, 141, 159, 167, 71, 206, 102, 55, 140, 204, 137,
+            151, 85, 36, 29, 196, 49, 40, 43, 108, 83, 211, 90, 13, 33,
+        ],
+        [
+            15, 177, 11, 152, 142, 9, 201, 105, 21, 183, 41, 239, 124, 235, 47, 81, 143, 50, 62,
+            229, 121, 136, 146, 46, 59, 244, 139, 24, 170, 178, 240, 19,
+        ],
+        [
+            165, 123, 207, 244, 153, 87, 143, 86, 122, 246, 136, 169, 101, 176, 217, 9, 5, 212,
+            168, 27, 145, 3, 197, 154, 62, 69, 109, 182, 149, 23, 91, 21,
+        ],
+        [
+            189, 137, 178, 165, 178, 87, 211, 192, 102, 167, 225, 100, 139, 160, 16, 87, 22, 204,
+            105, 99, 131, 153, 108, 49, 34, 187, 49, 6, 185, 187, 30, 43,
+        ],
+        [
+            27, 145, 78, 59, 46, 36, 132, 75, 120, 159, 51, 37, 37, 192, 108, 126, 73, 189, 174,
+            82, 29, 111, 65, 80, 154, 218, 41, 64, 68, 29, 165, 30,
+        ],
+        [
+            98, 187, 214, 47, 4, 74, 164, 184, 225, 129, 120, 133, 86, 231, 75, 237, 176, 49, 53,
+            169, 90, 4, 18, 9, 167, 71, 22, 156, 13, 39, 15, 3,
+        ],
+        [
+            112, 124, 173, 252, 97, 191, 76, 94, 83, 160, 143, 31, 249, 204, 154, 11, 144, 153, 84,
+            26, 22, 65, 50, 243, 26, 43, 2, 117, 66, 61, 109, 33,
+        ],
+    ],
+    [
+        [
+            48, 179, 105, 154, 137, 101, 207, 31, 159, 178, 200, 35, 0, 58, 168, 178, 174, 225, 29,
+            180, 161, 43, 109, 228, 221, 204, 109, 67, 166, 195, 179, 63,
+        ],
+        [
+            192, 220, 245, 60, 113, 224, 39, 140, 250, 15, 194, 10, 179, 68, 226, 120, 139, 19, 98,
+            15, 83, 170, 245, 23, 120, 70, 92, 174, 64, 64, 106, 61,
+        ],
+        [
+            224, 5, 162, 145, 63, 125, 41, 116, 214, 111, 234, 50, 80, 95, 211, 97, 214, 145, 238,
+            22, 96, 42, 196, 79, 43, 20, 88, 179, 203, 22, 113, 46,
+        ],
+        [
+            213, 81, 107, 202, 117, 25, 111, 182, 105, 138, 27, 113, 154, 75, 57, 246, 246, 83, 99,
+            217, 179, 112, 69, 133, 173, 21, 93, 29, 205, 161, 76, 60,
+        ],
+        [
+            53, 44, 98, 79, 115, 175, 162, 136, 175, 194, 206, 120, 151, 114, 188, 68, 142, 30, 96,
+            184, 78, 24, 83, 6, 158, 185, 44, 71, 0, 93, 104, 0,
+        ],
+        [
+            250, 21, 67, 252, 44, 115, 18, 82, 222, 64, 36, 75, 249, 107, 180, 166, 243, 36, 0,
+            117, 175, 185, 120, 145, 155, 116, 188, 143, 17, 46, 165, 56,
+        ],
+        [
+            241, 212, 155, 63, 65, 50, 226, 122, 207, 162, 225, 154, 169, 53, 14, 221, 96, 76, 136,
+            178, 90, 164, 121, 103, 108, 127, 54, 163, 96, 85, 77, 6,
+        ],
+        [
+            19, 175, 186, 97, 92, 236, 91, 61, 140, 4, 133, 53, 194, 213, 65, 250, 230, 238, 235,
+            203, 46, 65, 35, 16, 182, 249, 176, 229, 175, 138, 30, 25,
+        ],
+    ],
+    [
+        [
+            193, 173, 135, 142, 136, 208, 142, 206, 234, 104, 90, 172, 21, 141, 16, 215, 245, 110,
+            59, 172, 92, 70, 107, 247, 27, 166, 143, 181, 155, 250, 106, 53,
+        ],
+        [
+            40, 195, 37, 64, 237, 12, 144, 62, 106, 178, 195, 117, 222, 163, 229, 91, 210, 2, 145,
+            237, 136, 209, 62, 140, 230, 8, 101, 56, 25, 178, 213, 58,
+        ],
+        [
+            101, 129, 170, 93, 188, 56, 112, 107, 211, 10, 183, 62, 68, 200, 64, 130, 73, 142, 202,
+            103, 69, 40, 144, 172, 242, 250, 22, 131, 198, 103, 108, 58,
+        ],
+        [
+            194, 190, 28, 152, 159, 2, 136, 216, 228, 235, 50, 39, 214, 18, 140, 207, 80, 219, 220,
+            101, 153, 79, 16, 105, 188, 49, 203, 108, 66, 225, 90, 59,
+        ],
+        [
+            153, 64, 128, 222, 2, 153, 45, 105, 116, 220, 68, 127, 162, 151, 86, 187, 167, 170, 11,
+            233, 28, 199, 145, 241, 243, 234, 10, 120, 92, 219, 209, 43,
+        ],
+        [
+            50, 89, 222, 249, 125, 86, 27, 111, 222, 37, 116, 131, 25, 18, 181, 68, 48, 103, 126,
+            135, 57, 250, 15, 250, 177, 17, 31, 129, 239, 252, 162, 28,
+        ],
+        [
+            114, 163, 205, 167, 236, 34, 31, 190, 190, 105, 34, 205, 130, 240, 231, 205, 50, 231,
+            88, 79, 27, 132, 231, 176, 11, 46, 129, 157, 254, 249, 246, 15,
+        ],
+        [
+            93, 238, 47, 126, 190, 204, 194, 137, 218, 143, 52, 16, 199, 227, 130, 21, 153, 75,
+            233, 47, 222, 61, 182, 45, 223, 200, 222, 178, 182, 170, 228, 31,
+        ],
+    ],
+    [
+        [
+            12, 17, 186, 64, 81, 161, 220, 198, 174, 199, 6, 92, 215, 23, 232, 34, 246, 12, 107,
+            125, 15, 107, 2, 242, 20, 8, 246, 125, 121, 99, 80, 3,
+        ],
+        [
+            89, 57, 179, 171, 146, 205, 229, 64, 221, 171, 206, 90, 241, 174, 37, 148, 197, 159,
+            18, 100, 219, 205, 52, 254, 192, 164, 85, 30, 65, 213, 210, 54,
+        ],
+        [
+            62, 137, 99, 6, 120, 112, 106, 227, 209, 75, 212, 194, 210, 14, 2, 30, 195, 242, 218,
+            76, 57, 40, 167, 185, 142, 96, 69, 77, 167, 67, 209, 9,
+        ],
+        [
+            180, 9, 228, 211, 34, 32, 178, 132, 120, 119, 122, 62, 191, 119, 141, 172, 218, 172,
+            109, 180, 94, 64, 162, 121, 52, 14, 121, 66, 59, 109, 245, 59,
+        ],
+        [
+            249, 3, 248, 71, 44, 145, 178, 67, 137, 38, 251, 235, 157, 68, 254, 171, 27, 162, 133,
+            219, 234, 216, 112, 152, 25, 58, 135, 251, 66, 71, 156, 26,
+        ],
+        [
+            95, 35, 211, 78, 202, 25, 45, 202, 135, 35, 113, 93, 165, 64, 194, 144, 175, 17, 228,
+            210, 224, 254, 58, 112, 227, 81, 126, 97, 86, 65, 29, 62,
+        ],
+        [
+            221, 226, 149, 102, 167, 18, 52, 77, 5, 186, 64, 11, 100, 216, 208, 10, 248, 189, 34,
+            212, 242, 213, 9, 142, 115, 97, 101, 65, 220, 76, 136, 18,
+        ],
+        [
+            46, 234, 59, 13, 34, 48, 213, 65, 235, 58, 247, 80, 169, 39, 199, 103, 208, 23, 231,
+            159, 190, 5, 184, 75, 56, 226, 248, 207, 69, 148, 211, 39,
+        ],
+    ],
+    [
+        [
+            32, 230, 133, 110, 165, 142, 6, 236, 172, 169, 47, 58, 149, 196, 9, 122, 18, 15, 198,
+            9, 254, 57, 37, 7, 223, 227, 136, 12, 203, 242, 43, 24,
+        ],
+        [
+            42, 147, 110, 109, 50, 65, 17, 222, 30, 153, 56, 60, 204, 134, 182, 170, 16, 57, 253,
+            161, 24, 121, 0, 24, 141, 195, 159, 253, 145, 154, 147, 9,
+        ],
+        [
+            14, 162, 52, 18, 158, 156, 230, 183, 175, 194, 121, 255, 238, 127, 155, 250, 246, 125,
+            169, 227, 72, 68, 0, 27, 232, 41, 17, 161, 76, 66, 20, 53,
+        ],
+        [
+            50, 22, 182, 33, 162, 102, 95, 212, 128, 44, 7, 71, 26, 32, 114, 117, 49, 127, 40, 178,
+            231, 245, 1, 106, 238, 134, 100, 231, 254, 238, 176, 5,
+        ],
+        [
+            50, 237, 91, 136, 123, 1, 96, 84, 250, 240, 150, 12, 248, 226, 90, 37, 68, 177, 48,
+            242, 94, 102, 174, 114, 222, 126, 153, 41, 195, 54, 126, 56,
+        ],
+        [
+            133, 193, 10, 246, 10, 82, 239, 122, 163, 93, 110, 94, 60, 44, 177, 207, 189, 174, 87,
+            89, 69, 129, 226, 121, 140, 169, 190, 105, 76, 58, 86, 8,
+        ],
+        [
+            23, 43, 215, 223, 60, 59, 224, 124, 151, 95, 219, 161, 57, 159, 207, 111, 242, 135, 40,
+            239, 253, 77, 19, 184, 64, 186, 150, 176, 66, 238, 67, 40,
+        ],
+        [
+            126, 167, 187, 171, 240, 55, 84, 223, 134, 218, 13, 244, 77, 58, 112, 57, 26, 208, 108,
+            78, 36, 188, 140, 87, 207, 217, 22, 144, 157, 20, 32, 54,
+        ],
+    ],
+    [
+        [
+            93, 37, 10, 228, 50, 61, 16, 189, 13, 195, 139, 25, 160, 47, 200, 124, 186, 134, 98,
+            124, 16, 208, 15, 234, 76, 94, 7, 231, 28, 219, 8, 55,
+        ],
+        [
+            240, 37, 251, 82, 107, 129, 109, 226, 56, 158, 226, 245, 117, 81, 14, 88, 89, 159, 94,
+            112, 221, 109, 148, 109, 96, 111, 107, 193, 65, 177, 88, 61,
+        ],
+        [
+            66, 195, 4, 90, 120, 185, 19, 112, 65, 178, 63, 160, 49, 116, 10, 220, 176, 189, 95,
+            102, 60, 97, 194, 253, 126, 162, 104, 217, 4, 50, 147, 37,
+        ],
+        [
+            238, 163, 121, 161, 177, 233, 63, 78, 235, 119, 237, 197, 121, 164, 83, 212, 6, 208,
+            230, 24, 249, 141, 95, 163, 28, 102, 175, 11, 75, 81, 160, 0,
+        ],
+        [
+            229, 143, 0, 254, 88, 138, 193, 137, 148, 92, 219, 194, 181, 122, 207, 15, 16, 193,
+            188, 217, 68, 31, 11, 158, 167, 27, 64, 136, 203, 117, 161, 12,
+        ],
+        [
+            11, 49, 214, 250, 109, 158, 144, 42, 1, 206, 122, 94, 165, 157, 202, 213, 96, 180, 33,
+            20, 22, 177, 7, 163, 28, 139, 104, 251, 198, 9, 214, 33,
+        ],
+        [
+            116, 243, 168, 236, 137, 191, 154, 52, 41, 230, 77, 98, 8, 184, 250, 38, 141, 230, 158,
+            5, 39, 9, 89, 103, 230, 79, 166, 50, 205, 4, 255, 57,
+        ],
+        [
+            48, 98, 65, 66, 216, 38, 51, 172, 142, 86, 116, 5, 120, 215, 156, 152, 106, 238, 101,
+            242, 53, 120, 56, 97, 38, 217, 38, 74, 226, 28, 214, 1,
+        ],
+    ],
+    [
+        [
+            105, 231, 75, 196, 42, 78, 208, 145, 101, 74, 247, 42, 206, 96, 9, 165, 101, 89, 102,
+            246, 47, 7, 215, 185, 122, 16, 186, 27, 10, 246, 28, 23,
+        ],
+        [
+            217, 126, 103, 98, 167, 172, 142, 251, 248, 148, 70, 136, 6, 254, 190, 127, 239, 148,
+            0, 199, 6, 165, 124, 27, 43, 237, 41, 234, 88, 83, 203, 32,
+        ],
+        [
+            107, 239, 45, 27, 57, 6, 26, 100, 184, 166, 49, 44, 51, 34, 71, 119, 233, 175, 17, 249,
+            180, 107, 41, 96, 188, 234, 154, 63, 206, 106, 120, 38,
+        ],
+        [
+            18, 121, 183, 245, 156, 149, 212, 126, 222, 16, 47, 234, 70, 173, 22, 213, 183, 77, 82,
+            53, 36, 126, 75, 154, 210, 154, 27, 140, 64, 60, 177, 57,
+        ],
+        [
+            129, 228, 124, 136, 140, 181, 45, 123, 137, 7, 141, 185, 55, 235, 55, 18, 222, 8, 68,
+            17, 115, 177, 15, 70, 229, 2, 114, 211, 234, 30, 197, 41,
+        ],
+        [
+            228, 45, 55, 6, 192, 96, 178, 131, 218, 145, 217, 97, 91, 39, 160, 64, 227, 19, 66,
+            189, 251, 188, 240, 67, 146, 48, 200, 76, 18, 250, 8, 30,
+        ],
+        [
+            220, 15, 205, 81, 21, 46, 62, 121, 239, 193, 97, 108, 94, 74, 148, 33, 244, 134, 30,
+            132, 132, 215, 205, 182, 150, 14, 115, 31, 182, 72, 94, 20,
+        ],
+        [
+            69, 231, 138, 117, 173, 221, 41, 131, 254, 155, 191, 117, 134, 185, 244, 239, 223, 169,
+            119, 108, 64, 191, 142, 111, 73, 108, 160, 106, 155, 102, 205, 46,
+        ],
+    ],
+    [
+        [
+            216, 228, 186, 25, 141, 114, 50, 180, 248, 77, 180, 135, 54, 130, 143, 37, 195, 92, 84,
+            224, 181, 77, 69, 208, 172, 57, 221, 164, 6, 233, 98, 49,
+        ],
+        [
+            169, 136, 52, 59, 237, 211, 56, 94, 189, 86, 149, 191, 67, 97, 7, 175, 106, 166, 35,
+            82, 86, 61, 133, 188, 53, 17, 216, 207, 65, 229, 194, 2,
+        ],
+        [
+            255, 84, 1, 221, 103, 57, 196, 217, 196, 185, 158, 106, 101, 162, 235, 202, 135, 134,
+            88, 167, 150, 148, 218, 54, 255, 108, 49, 166, 102, 176, 84, 30,
+        ],
+        [
+            92, 224, 203, 243, 67, 151, 137, 209, 206, 249, 185, 243, 233, 175, 220, 244, 175, 1,
+            122, 2, 95, 243, 93, 187, 239, 23, 255, 69, 41, 120, 38, 38,
+        ],
+        [
+            128, 21, 223, 166, 79, 166, 187, 242, 137, 152, 56, 128, 243, 30, 183, 245, 180, 123,
+            32, 118, 207, 24, 147, 57, 157, 179, 123, 151, 104, 69, 46, 52,
+        ],
+        [
+            68, 43, 112, 45, 194, 157, 39, 211, 168, 167, 179, 209, 157, 101, 27, 43, 230, 76, 176,
+            78, 232, 203, 95, 253, 116, 237, 107, 32, 48, 158, 58, 50,
+        ],
+        [
+            100, 239, 210, 82, 79, 131, 253, 105, 235, 193, 69, 45, 187, 62, 95, 152, 54, 234, 64,
+            114, 234, 169, 168, 87, 150, 35, 127, 246, 74, 17, 148, 2,
+        ],
+        [
+            75, 112, 183, 215, 233, 223, 247, 91, 99, 90, 35, 216, 185, 170, 80, 82, 85, 71, 162,
+            41, 97, 124, 189, 217, 53, 205, 136, 253, 224, 194, 79, 1,
+        ],
+    ],
+    [
+        [
+            53, 21, 40, 125, 210, 154, 222, 229, 87, 242, 184, 188, 80, 173, 32, 106, 137, 190,
+            140, 153, 255, 209, 126, 13, 117, 250, 37, 153, 245, 4, 245, 2,
+        ],
+        [
+            228, 81, 243, 233, 86, 117, 4, 73, 124, 54, 11, 93, 190, 50, 53, 159, 145, 61, 152,
+            111, 240, 113, 23, 252, 69, 88, 36, 226, 4, 109, 229, 3,
+        ],
+        [
+            145, 141, 131, 86, 137, 206, 97, 36, 227, 136, 52, 93, 108, 105, 103, 81, 237, 131,
+            235, 148, 131, 81, 85, 254, 247, 197, 252, 157, 10, 55, 29, 3,
+        ],
+        [
+            103, 142, 61, 123, 169, 170, 61, 44, 87, 32, 62, 112, 84, 138, 187, 144, 188, 38, 202,
+            94, 221, 200, 202, 244, 109, 138, 121, 56, 154, 45, 76, 0,
+        ],
+        [
+            69, 127, 85, 137, 95, 27, 254, 15, 93, 42, 143, 67, 31, 140, 206, 8, 214, 151, 217, 69,
+            145, 105, 169, 116, 238, 37, 55, 137, 215, 80, 158, 8,
+        ],
+        [
+            22, 207, 101, 165, 241, 155, 248, 78, 60, 23, 127, 195, 251, 193, 217, 78, 162, 158,
+            177, 146, 112, 183, 237, 32, 1, 138, 101, 44, 157, 172, 149, 36,
+        ],
+        [
+            76, 137, 207, 192, 160, 232, 61, 242, 123, 239, 139, 70, 152, 11, 242, 137, 58, 104,
+            228, 63, 142, 23, 137, 23, 37, 253, 40, 100, 183, 97, 87, 40,
+        ],
+        [
+            34, 111, 225, 153, 243, 185, 42, 1, 25, 11, 157, 125, 204, 60, 23, 123, 187, 200, 70,
+            228, 192, 25, 145, 43, 170, 247, 123, 157, 50, 180, 67, 12,
+        ],
+    ],
+    [
+        [
+            139, 112, 152, 150, 233, 77, 13, 21, 174, 183, 70, 63, 135, 81, 128, 72, 144, 58, 49,
+            65, 191, 20, 146, 19, 26, 255, 133, 93, 112, 124, 207, 62,
+        ],
+        [
+            2, 63, 203, 234, 101, 157, 7, 25, 149, 165, 34, 204, 219, 25, 49, 15, 142, 143, 122,
+            136, 92, 218, 149, 250, 192, 211, 144, 125, 34, 237, 151, 21,
+        ],
+        [
+            188, 61, 75, 218, 124, 179, 96, 22, 138, 217, 109, 25, 125, 27, 24, 96, 239, 246, 167,
+            201, 19, 9, 166, 15, 88, 21, 233, 112, 123, 235, 164, 21,
+        ],
+        [
+            219, 142, 147, 199, 38, 55, 203, 214, 230, 204, 36, 59, 30, 239, 102, 148, 0, 108, 173,
+            188, 32, 144, 135, 194, 254, 50, 3, 35, 201, 218, 230, 21,
+        ],
+        [
+            68, 146, 51, 190, 170, 51, 35, 111, 126, 119, 58, 209, 251, 55, 62, 91, 158, 203, 122,
+            233, 55, 43, 185, 64, 118, 142, 220, 200, 199, 254, 47, 41,
+        ],
+        [
+            24, 58, 100, 185, 6, 101, 241, 244, 103, 176, 10, 237, 176, 190, 212, 66, 82, 150, 241,
+            230, 149, 43, 245, 7, 25, 251, 229, 179, 221, 123, 159, 63,
+        ],
+        [
+            28, 224, 32, 241, 13, 252, 30, 52, 182, 163, 237, 107, 166, 132, 135, 68, 78, 190, 35,
+            235, 117, 126, 20, 138, 61, 223, 23, 145, 57, 74, 120, 4,
+        ],
+        [
+            31, 99, 79, 38, 16, 74, 27, 159, 179, 143, 60, 173, 93, 70, 72, 38, 183, 41, 238, 168,
+            71, 38, 4, 101, 78, 155, 224, 181, 93, 127, 35, 11,
+        ],
+    ],
+    [
+        [
+            60, 137, 224, 53, 215, 197, 25, 63, 90, 33, 63, 146, 157, 176, 68, 250, 232, 147, 24,
+            191, 26, 117, 147, 165, 101, 139, 54, 222, 124, 240, 79, 13,
+        ],
+        [
+            134, 236, 133, 85, 112, 78, 54, 159, 209, 197, 57, 233, 145, 194, 146, 20, 103, 18,
+            176, 88, 222, 218, 76, 231, 199, 242, 225, 215, 238, 66, 98, 55,
+        ],
+        [
+            182, 198, 172, 117, 4, 72, 70, 255, 122, 154, 82, 83, 111, 6, 200, 7, 183, 198, 100,
+            13, 210, 31, 60, 128, 75, 234, 201, 180, 70, 102, 30, 36,
+        ],
+        [
+            153, 192, 32, 150, 124, 34, 86, 143, 118, 191, 78, 155, 197, 139, 103, 250, 187, 136,
+            219, 207, 254, 39, 230, 186, 100, 89, 110, 143, 183, 188, 81, 49,
+        ],
+        [
+            231, 119, 201, 218, 80, 86, 142, 21, 12, 24, 57, 147, 136, 40, 228, 215, 158, 224, 139,
+            236, 214, 47, 59, 208, 17, 48, 224, 21, 169, 129, 224, 17,
+        ],
+        [
+            100, 226, 103, 188, 57, 117, 183, 147, 141, 126, 101, 99, 181, 52, 203, 220, 157, 213,
+            75, 185, 16, 251, 107, 65, 118, 234, 204, 254, 112, 123, 90, 5,
+        ],
+        [
+            109, 233, 111, 207, 104, 219, 124, 6, 23, 121, 255, 210, 34, 191, 93, 83, 152, 185, 83,
+            105, 217, 198, 181, 246, 226, 112, 155, 92, 188, 101, 111, 39,
+        ],
+        [
+            179, 174, 143, 91, 160, 49, 243, 140, 151, 237, 93, 224, 177, 144, 185, 60, 240, 162,
+            55, 226, 253, 59, 107, 70, 83, 152, 148, 243, 130, 180, 241, 17,
+        ],
+    ],
+    [
+        [
+            1, 195, 47, 208, 103, 47, 214, 177, 87, 185, 90, 187, 162, 188, 124, 200, 242, 52, 134,
+            234, 83, 113, 107, 123, 170, 90, 81, 163, 132, 119, 35, 14,
+        ],
+        [
+            155, 171, 18, 109, 236, 115, 191, 12, 58, 167, 16, 164, 181, 122, 238, 96, 155, 233,
+            253, 23, 109, 140, 48, 21, 65, 109, 224, 117, 176, 241, 254, 18,
+        ],
+        [
+            70, 96, 64, 75, 143, 232, 226, 103, 52, 104, 0, 69, 83, 125, 202, 106, 161, 191, 177,
+            102, 45, 23, 238, 204, 53, 40, 78, 59, 242, 35, 159, 19,
+        ],
+        [
+            111, 81, 99, 34, 235, 124, 190, 219, 217, 172, 34, 122, 197, 157, 192, 78, 195, 143,
+            238, 204, 77, 161, 107, 102, 74, 229, 67, 12, 117, 122, 246, 0,
+        ],
+        [
+            144, 191, 125, 138, 68, 229, 183, 225, 230, 10, 142, 95, 44, 186, 213, 104, 243, 32,
+            18, 104, 187, 179, 37, 101, 2, 120, 216, 48, 170, 4, 158, 38,
+        ],
+        [
+            217, 133, 55, 67, 171, 207, 107, 237, 48, 161, 178, 178, 184, 86, 122, 8, 47, 50, 129,
+            108, 208, 22, 31, 13, 123, 72, 240, 226, 193, 85, 76, 7,
+        ],
+        [
+            143, 182, 97, 62, 51, 201, 49, 9, 30, 111, 130, 124, 184, 183, 215, 198, 43, 236, 200,
+            126, 218, 175, 240, 182, 161, 238, 80, 220, 13, 1, 11, 36,
+        ],
+        [
+            167, 187, 116, 148, 117, 166, 104, 241, 228, 188, 41, 158, 140, 164, 46, 222, 157, 136,
+            217, 42, 198, 235, 34, 14, 130, 24, 192, 142, 220, 217, 48, 38,
+        ],
+    ],
+    [
+        [
+            4, 57, 211, 98, 189, 189, 205, 184, 46, 220, 130, 21, 68, 2, 10, 29, 48, 61, 199, 226,
+            206, 227, 52, 249, 60, 176, 140, 23, 177, 67, 92, 15,
+        ],
+        [
+            181, 234, 40, 253, 161, 44, 200, 120, 241, 178, 215, 196, 222, 102, 210, 0, 182, 155,
+            34, 174, 18, 66, 1, 124, 173, 154, 113, 56, 25, 13, 138, 18,
+        ],
+        [
+            55, 134, 66, 34, 135, 181, 181, 9, 132, 109, 116, 206, 120, 178, 211, 47, 53, 148, 149,
+            115, 173, 120, 236, 5, 58, 69, 176, 237, 73, 147, 106, 47,
+        ],
+        [
+            158, 35, 158, 179, 82, 219, 196, 82, 60, 250, 48, 96, 3, 113, 101, 66, 35, 143, 232,
+            102, 166, 223, 93, 32, 125, 45, 235, 133, 189, 37, 139, 18,
+        ],
+        [
+            10, 247, 120, 27, 215, 183, 216, 124, 175, 48, 103, 247, 34, 165, 86, 118, 173, 252,
+            154, 253, 25, 249, 106, 175, 73, 29, 109, 255, 8, 131, 131, 10,
+        ],
+        [
+            157, 228, 177, 8, 79, 14, 148, 44, 112, 58, 0, 43, 124, 26, 238, 145, 31, 240, 212,
+            214, 50, 56, 8, 37, 162, 19, 47, 237, 128, 152, 97, 12,
+        ],
+        [
+            89, 136, 71, 53, 83, 53, 243, 10, 123, 130, 170, 24, 167, 121, 41, 40, 148, 89, 117,
+            122, 123, 30, 110, 13, 240, 219, 58, 200, 65, 26, 61, 44,
+        ],
+        [
+            156, 55, 245, 59, 198, 161, 112, 207, 14, 229, 66, 65, 138, 39, 231, 216, 200, 235, 25,
+            219, 204, 38, 32, 167, 134, 247, 41, 188, 166, 147, 85, 55,
+        ],
+    ],
+    [
+        [
+            233, 92, 75, 182, 82, 75, 137, 98, 145, 215, 248, 100, 63, 227, 162, 169, 113, 40, 221,
+            59, 2, 250, 220, 112, 132, 129, 250, 177, 8, 101, 164, 8,
+        ],
+        [
+            31, 38, 71, 251, 116, 153, 63, 32, 236, 124, 90, 46, 197, 165, 160, 131, 250, 189, 241,
+            82, 157, 233, 201, 163, 118, 11, 216, 15, 33, 90, 101, 5,
+        ],
+        [
+            82, 156, 93, 235, 57, 86, 36, 76, 10, 134, 151, 132, 254, 98, 48, 157, 111, 45, 76,
+            195, 253, 218, 46, 2, 173, 142, 75, 218, 42, 54, 73, 15,
+        ],
+        [
+            59, 182, 126, 198, 69, 64, 199, 105, 134, 90, 186, 27, 217, 143, 228, 145, 122, 150,
+            91, 236, 213, 134, 172, 191, 182, 40, 246, 159, 31, 217, 88, 27,
+        ],
+        [
+            196, 28, 79, 113, 123, 215, 117, 42, 34, 17, 152, 218, 135, 254, 95, 214, 11, 224, 139,
+            61, 142, 110, 220, 197, 153, 144, 149, 233, 74, 146, 63, 7,
+        ],
+        [
+            27, 38, 138, 60, 32, 242, 80, 37, 33, 219, 27, 181, 40, 238, 146, 248, 109, 102, 248,
+            210, 191, 96, 45, 228, 120, 76, 244, 62, 177, 201, 55, 17,
+        ],
+        [
+            81, 219, 130, 197, 159, 89, 150, 166, 78, 19, 4, 125, 2, 112, 255, 111, 2, 158, 160,
+            81, 195, 82, 139, 20, 156, 54, 0, 128, 78, 241, 177, 46,
+        ],
+        [
+            6, 236, 47, 125, 243, 52, 250, 71, 17, 75, 21, 146, 229, 56, 210, 203, 231, 210, 39,
+            170, 202, 114, 14, 199, 67, 74, 203, 97, 155, 186, 171, 20,
+        ],
+    ],
+    [
+        [
+            158, 124, 26, 65, 178, 248, 144, 218, 104, 25, 157, 123, 70, 74, 14, 224, 180, 141, 73,
+            53, 170, 128, 16, 99, 206, 127, 195, 128, 130, 243, 78, 48,
+        ],
+        [
+            36, 86, 7, 238, 107, 51, 95, 192, 105, 21, 3, 175, 244, 132, 71, 95, 176, 177, 37, 191,
+            229, 238, 174, 51, 24, 167, 55, 176, 224, 205, 82, 43,
+        ],
+        [
+            136, 128, 95, 139, 143, 114, 236, 145, 6, 225, 197, 17, 55, 175, 53, 58, 25, 247, 29,
+            140, 117, 43, 202, 117, 245, 202, 62, 46, 137, 57, 77, 9,
+        ],
+        [
+            127, 245, 39, 235, 242, 22, 144, 158, 100, 135, 219, 155, 91, 192, 73, 60, 225, 231,
+            25, 84, 215, 52, 125, 43, 20, 45, 223, 178, 108, 59, 203, 16,
+        ],
+        [
+            148, 178, 74, 27, 251, 145, 203, 17, 208, 119, 184, 84, 117, 0, 241, 206, 166, 222,
+            187, 106, 157, 202, 125, 129, 14, 89, 175, 187, 23, 159, 126, 55,
+        ],
+        [
+            114, 4, 75, 157, 83, 233, 5, 108, 158, 88, 53, 99, 8, 186, 204, 172, 120, 171, 248, 43,
+            48, 207, 38, 111, 138, 225, 143, 83, 209, 105, 105, 37,
+        ],
+        [
+            92, 59, 72, 113, 151, 252, 46, 138, 65, 212, 75, 197, 200, 119, 255, 6, 66, 114, 189,
+            247, 23, 249, 124, 92, 47, 173, 213, 55, 128, 69, 145, 0,
+        ],
+        [
+            22, 114, 108, 240, 146, 117, 172, 126, 46, 221, 36, 250, 171, 77, 187, 18, 38, 212,
+            212, 52, 42, 251, 64, 90, 240, 227, 253, 15, 18, 125, 168, 1,
+        ],
+    ],
+    [
+        [
+            186, 129, 70, 211, 209, 123, 234, 4, 142, 210, 52, 75, 0, 165, 181, 253, 213, 180, 1,
+            26, 175, 236, 137, 95, 51, 205, 8, 153, 161, 113, 70, 48,
+        ],
+        [
+            211, 79, 54, 21, 140, 133, 28, 234, 69, 33, 148, 67, 237, 83, 252, 208, 124, 149, 83,
+            176, 134, 112, 148, 157, 239, 4, 185, 88, 111, 40, 62, 7,
+        ],
+        [
+            180, 162, 213, 99, 227, 21, 244, 143, 151, 86, 246, 138, 9, 110, 92, 15, 219, 95, 149,
+            64, 82, 58, 85, 201, 2, 168, 105, 198, 252, 15, 21, 33,
+        ],
+        [
+            238, 242, 147, 203, 56, 47, 195, 175, 121, 150, 66, 19, 29, 125, 247, 37, 225, 233,
+            248, 120, 250, 40, 194, 36, 124, 245, 20, 70, 213, 211, 179, 27,
+        ],
+        [
+            242, 105, 72, 107, 136, 229, 105, 29, 230, 84, 124, 18, 45, 141, 155, 6, 97, 175, 95,
+            95, 0, 4, 19, 166, 109, 241, 230, 239, 164, 149, 186, 52,
+        ],
+        [
+            1, 82, 33, 143, 210, 61, 135, 113, 67, 115, 94, 12, 152, 184, 122, 63, 9, 113, 248, 26,
+            121, 49, 198, 28, 239, 249, 37, 44, 227, 142, 11, 63,
+        ],
+        [
+            141, 102, 219, 141, 89, 219, 109, 104, 45, 114, 10, 166, 184, 102, 70, 195, 113, 68,
+            13, 96, 100, 28, 99, 64, 139, 172, 150, 189, 54, 35, 5, 16,
+        ],
+        [
+            226, 23, 65, 200, 163, 177, 166, 155, 32, 24, 126, 141, 136, 199, 29, 214, 185, 111,
+            48, 116, 38, 107, 66, 40, 42, 151, 106, 247, 65, 198, 12, 18,
+        ],
+    ],
+    [
+        [
+            11, 57, 245, 10, 120, 212, 154, 224, 122, 18, 200, 9, 192, 66, 247, 130, 124, 226, 39,
+            100, 91, 114, 249, 21, 221, 158, 71, 64, 87, 180, 147, 61,
+        ],
+        [
+            37, 54, 176, 141, 253, 46, 101, 178, 149, 5, 94, 50, 150, 19, 8, 243, 238, 54, 66, 215,
+            149, 62, 233, 236, 150, 146, 115, 42, 56, 15, 139, 52,
+        ],
+        [
+            54, 70, 131, 252, 109, 145, 35, 237, 41, 156, 62, 251, 130, 172, 131, 215, 50, 13, 168,
+            3, 149, 189, 158, 245, 40, 211, 35, 247, 190, 218, 68, 31,
+        ],
+        [
+            97, 18, 186, 126, 155, 90, 103, 122, 159, 64, 119, 250, 254, 3, 125, 97, 78, 132, 97,
+            20, 24, 36, 13, 6, 160, 106, 10, 38, 137, 196, 82, 59,
+        ],
+        [
+            83, 183, 38, 131, 224, 55, 36, 131, 250, 50, 98, 62, 53, 31, 186, 3, 59, 193, 44, 178,
+            167, 60, 7, 31, 17, 197, 225, 87, 77, 201, 175, 50,
+        ],
+        [
+            166, 65, 53, 61, 2, 156, 230, 20, 187, 218, 252, 134, 254, 199, 189, 164, 61, 159, 23,
+            37, 253, 230, 212, 38, 189, 174, 98, 199, 120, 113, 184, 46,
+        ],
+        [
+            38, 212, 175, 135, 83, 126, 242, 192, 211, 177, 211, 133, 235, 210, 36, 196, 46, 174,
+            42, 9, 38, 72, 180, 212, 25, 76, 60, 244, 160, 252, 226, 52,
+        ],
+        [
+            9, 186, 189, 28, 93, 244, 73, 59, 139, 98, 224, 159, 137, 187, 244, 145, 248, 78, 122,
+            176, 76, 77, 126, 35, 71, 70, 152, 33, 154, 40, 47, 8,
+        ],
+    ],
+    [
+        [
+            94, 74, 53, 248, 123, 40, 164, 191, 101, 131, 134, 77, 92, 11, 113, 23, 119, 101, 67,
+            184, 14, 138, 91, 152, 10, 50, 206, 226, 114, 50, 153, 38,
+        ],
+        [
+            70, 24, 160, 108, 135, 70, 121, 130, 110, 115, 249, 98, 163, 92, 182, 121, 140, 170,
+            43, 109, 119, 200, 93, 198, 144, 155, 40, 165, 116, 110, 83, 59,
+        ],
+        [
+            13, 111, 207, 211, 162, 206, 0, 87, 64, 221, 186, 206, 200, 25, 249, 40, 163, 157, 217,
+            108, 151, 40, 35, 149, 112, 144, 3, 223, 7, 239, 84, 27,
+        ],
+        [
+            123, 7, 143, 59, 246, 209, 168, 75, 236, 100, 37, 50, 57, 242, 6, 74, 175, 206, 53,
+            213, 100, 11, 124, 103, 34, 250, 34, 134, 171, 72, 96, 26,
+        ],
+        [
+            60, 211, 255, 163, 224, 254, 242, 177, 84, 221, 102, 62, 71, 95, 142, 146, 101, 6, 167,
+            153, 65, 139, 49, 248, 206, 27, 116, 138, 191, 104, 173, 61,
+        ],
+        [
+            117, 248, 184, 111, 92, 89, 176, 208, 186, 103, 174, 104, 91, 39, 254, 211, 76, 235,
+            186, 171, 140, 209, 163, 40, 128, 223, 238, 208, 174, 221, 7, 32,
+        ],
+        [
+            15, 175, 163, 23, 221, 182, 136, 48, 98, 253, 118, 47, 232, 19, 69, 81, 113, 107, 230,
+            69, 64, 87, 123, 226, 59, 240, 192, 34, 182, 24, 75, 54,
+        ],
+        [
+            200, 246, 135, 47, 106, 173, 187, 66, 101, 71, 151, 84, 100, 193, 113, 156, 71, 60,
+            224, 247, 238, 27, 214, 105, 25, 8, 215, 175, 211, 72, 152, 50,
+        ],
+    ],
+    [
+        [
+            11, 177, 54, 174, 134, 45, 96, 29, 9, 32, 202, 41, 30, 87, 38, 235, 103, 175, 59, 65,
+            34, 62, 230, 27, 51, 229, 143, 20, 250, 88, 49, 13,
+        ],
+        [
+            87, 251, 224, 97, 90, 123, 60, 173, 91, 250, 215, 196, 210, 111, 58, 198, 29, 127, 17,
+            192, 116, 130, 106, 223, 111, 179, 160, 19, 165, 77, 156, 35,
+        ],
+        [
+            228, 124, 114, 35, 183, 22, 90, 239, 18, 23, 66, 210, 98, 54, 229, 152, 173, 58, 197,
+            212, 179, 59, 46, 118, 71, 8, 205, 134, 221, 142, 49, 36,
+        ],
+        [
+            97, 172, 167, 10, 48, 141, 55, 10, 206, 107, 10, 234, 141, 228, 243, 71, 219, 231, 255,
+            127, 65, 87, 122, 172, 51, 255, 202, 73, 57, 233, 54, 56,
+        ],
+        [
+            218, 201, 81, 10, 208, 235, 255, 195, 207, 199, 247, 55, 152, 186, 219, 173, 46, 254,
+            116, 54, 25, 159, 121, 178, 6, 197, 64, 24, 165, 163, 254, 27,
+        ],
+        [
+            199, 51, 104, 153, 21, 83, 213, 132, 151, 210, 221, 160, 191, 61, 32, 39, 116, 202,
+            190, 68, 168, 8, 206, 34, 76, 101, 91, 56, 234, 195, 177, 36,
+        ],
+        [
+            200, 156, 175, 110, 211, 162, 86, 81, 86, 181, 99, 37, 39, 70, 77, 2, 181, 145, 157,
+            169, 145, 213, 47, 162, 60, 26, 123, 27, 69, 95, 111, 43,
+        ],
+        [
+            30, 40, 191, 205, 195, 141, 30, 180, 227, 90, 168, 109, 254, 194, 197, 47, 47, 158,
+            151, 92, 119, 93, 22, 48, 71, 132, 50, 156, 11, 56, 60, 24,
+        ],
+    ],
+    [
+        [
+            97, 236, 10, 82, 54, 165, 11, 222, 119, 226, 142, 250, 85, 73, 71, 5, 130, 185, 152,
+            10, 38, 191, 159, 228, 39, 47, 7, 123, 206, 29, 63, 38,
+        ],
+        [
+            63, 93, 78, 222, 254, 85, 222, 188, 119, 75, 202, 250, 75, 37, 247, 183, 250, 248, 44,
+            137, 207, 242, 186, 236, 175, 255, 203, 108, 22, 25, 86, 3,
+        ],
+        [
+            66, 175, 216, 225, 118, 129, 106, 102, 143, 170, 241, 201, 21, 1, 14, 89, 249, 49, 143,
+            24, 17, 12, 166, 116, 29, 109, 134, 183, 99, 174, 81, 37,
+        ],
+        [
+            197, 95, 177, 171, 196, 1, 233, 30, 98, 64, 186, 21, 34, 102, 54, 128, 110, 217, 3, 49,
+            99, 164, 192, 114, 104, 45, 7, 144, 94, 62, 16, 61,
+        ],
+        [
+            98, 86, 153, 20, 228, 157, 201, 70, 53, 155, 58, 84, 87, 140, 55, 16, 52, 29, 87, 106,
+            98, 147, 35, 71, 160, 18, 82, 216, 95, 244, 124, 45,
+        ],
+        [
+            242, 37, 85, 138, 93, 10, 117, 237, 63, 244, 73, 17, 187, 70, 150, 137, 148, 180, 139,
+            39, 229, 169, 1, 46, 243, 136, 170, 65, 51, 64, 34, 8,
+        ],
+        [
+            106, 96, 176, 162, 206, 47, 28, 119, 20, 102, 105, 144, 240, 117, 54, 120, 21, 220, 87,
+            50, 191, 53, 87, 35, 135, 229, 145, 33, 96, 101, 129, 38,
+        ],
+        [
+            166, 50, 224, 123, 255, 237, 250, 219, 171, 90, 189, 230, 77, 15, 184, 248, 42, 245,
+            240, 71, 209, 160, 244, 146, 72, 164, 139, 171, 242, 118, 62, 26,
+        ],
+    ],
+    [
+        [
+            176, 240, 195, 230, 203, 40, 73, 83, 30, 77, 37, 58, 215, 19, 113, 147, 218, 57, 68,
+            214, 129, 183, 139, 254, 131, 136, 216, 77, 185, 153, 140, 12,
+        ],
+        [
+            174, 253, 75, 3, 63, 87, 254, 53, 165, 243, 14, 41, 65, 7, 178, 91, 20, 111, 153, 155,
+            23, 89, 87, 37, 105, 23, 204, 147, 189, 113, 94, 2,
+        ],
+        [
+            218, 122, 7, 174, 69, 151, 16, 100, 230, 16, 187, 104, 238, 221, 124, 137, 157, 148,
+            222, 48, 86, 3, 71, 115, 64, 244, 81, 206, 205, 128, 41, 38,
+        ],
+        [
+            105, 132, 64, 84, 221, 69, 102, 124, 171, 223, 164, 67, 156, 97, 234, 192, 157, 110,
+            215, 207, 127, 75, 159, 90, 243, 153, 13, 168, 51, 78, 121, 21,
+        ],
+        [
+            124, 100, 211, 110, 134, 174, 177, 107, 84, 71, 156, 178, 27, 156, 130, 141, 190, 112,
+            114, 107, 8, 10, 227, 230, 169, 165, 46, 162, 126, 47, 219, 21,
+        ],
+        [
+            174, 109, 63, 1, 208, 183, 47, 213, 241, 116, 48, 79, 112, 250, 39, 77, 205, 232, 183,
+            125, 65, 147, 180, 37, 118, 143, 209, 157, 0, 165, 131, 35,
+        ],
+        [
+            171, 239, 114, 71, 235, 47, 49, 6, 184, 165, 133, 4, 30, 222, 236, 244, 145, 233, 148,
+            50, 228, 226, 223, 139, 224, 213, 38, 123, 117, 85, 230, 42,
+        ],
+        [
+            153, 172, 236, 117, 32, 68, 60, 120, 241, 40, 227, 98, 64, 137, 114, 1, 21, 216, 57,
+            244, 116, 137, 172, 13, 181, 160, 230, 67, 60, 188, 218, 58,
+        ],
+    ],
+];
+
+pub fn generator() -> pallas::Affine {
+    pallas::Affine::from_xy(
+        pallas::Base::from_bytes(&GENERATOR.0).unwrap(),
+        pallas::Base::from_bytes(&GENERATOR.1).unwrap(),
+    )
+    .unwrap()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::{
+        test_lagrange_coeffs, test_zs_and_us, COMMIT_IVK_PERSONALIZATION, NUM_WINDOWS,
+    };
+    use super::*;
+    use crate::primitives::sinsemilla::CommitDomain;
+    use group::Curve;
+    use pasta_curves::{
+        arithmetic::{CurveAffine, FieldExt},
+        pallas,
+    };
+
+    #[test]
+    fn generator() {
+        let domain = CommitDomain::new(COMMIT_IVK_PERSONALIZATION);
+        let point = domain.R();
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(*coords.x(), pallas::Base::from_bytes(&GENERATOR.0).unwrap());
+        assert_eq!(*coords.y(), pallas::Base::from_bytes(&GENERATOR.1).unwrap());
+    }
+
+    #[test]
+    fn lagrange_coeffs() {
+        let base = super::generator();
+        test_lagrange_coeffs(base, NUM_WINDOWS);
+    }
+
+    #[test]
+    fn z() {
+        let base = super::generator();
+        test_zs_and_us(base, &Z, &U, NUM_WINDOWS);
+    }
+}

+ 256 - 0
examples/halo2/src/constants/load.rs

@@ -0,0 +1,256 @@
+use std::convert::TryInto;
+
+use crate::constants::{self, compute_lagrange_coeffs, H, NUM_WINDOWS, NUM_WINDOWS_SHORT};
+use pasta_curves::{arithmetic::FieldExt, pallas};
+
+#[derive(Copy, Clone, Debug, Eq, PartialEq)]
+pub enum OrchardFixedBasesFull {
+    CommitIvkR,
+    NoteCommitR,
+    ValueCommitR,
+    SpendAuthG,
+}
+
+impl OrchardFixedBasesFull {
+    pub fn generator(&self) -> pallas::Affine {
+        match self {
+            OrchardFixedBasesFull::CommitIvkR => super::commit_ivk_r::generator(),
+            OrchardFixedBasesFull::NoteCommitR => super::note_commit_r::generator(),
+            OrchardFixedBasesFull::ValueCommitR => super::value_commit_r::generator(),
+            OrchardFixedBasesFull::SpendAuthG => super::spend_auth_g::generator(),
+        }
+    }
+
+    pub fn u(&self) -> U {
+        match self {
+            OrchardFixedBasesFull::CommitIvkR => super::commit_ivk_r::U.into(),
+            OrchardFixedBasesFull::NoteCommitR => super::note_commit_r::U.into(),
+            OrchardFixedBasesFull::ValueCommitR => super::value_commit_r::U.into(),
+            OrchardFixedBasesFull::SpendAuthG => super::spend_auth_g::U.into(),
+        }
+    }
+}
+
+/// A fixed base to be used in scalar multiplication with a full-width scalar.
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub struct OrchardFixedBase {
+    pub generator: pallas::Affine,
+    pub lagrange_coeffs: LagrangeCoeffs,
+    pub z: Z,
+    pub u: U,
+}
+
+impl From<OrchardFixedBasesFull> for OrchardFixedBase {
+    fn from(base: OrchardFixedBasesFull) -> Self {
+        let (generator, z, u) = match base {
+            OrchardFixedBasesFull::CommitIvkR => (
+                super::commit_ivk_r::generator(),
+                super::commit_ivk_r::Z.into(),
+                super::commit_ivk_r::U.into(),
+            ),
+            OrchardFixedBasesFull::NoteCommitR => (
+                super::note_commit_r::generator(),
+                super::note_commit_r::Z.into(),
+                super::note_commit_r::U.into(),
+            ),
+            OrchardFixedBasesFull::ValueCommitR => (
+                super::value_commit_r::generator(),
+                super::value_commit_r::Z.into(),
+                super::value_commit_r::U.into(),
+            ),
+            OrchardFixedBasesFull::SpendAuthG => (
+                super::spend_auth_g::generator(),
+                super::spend_auth_g::Z.into(),
+                super::spend_auth_g::U.into(),
+            ),
+        };
+
+        Self {
+            generator,
+            lagrange_coeffs: compute_lagrange_coeffs(generator, NUM_WINDOWS).into(),
+            z,
+            u,
+        }
+    }
+}
+
+/// A fixed base to be used in scalar multiplication with a base field element.
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub struct ValueCommitV {
+    pub generator: pallas::Affine,
+    pub lagrange_coeffs_short: LagrangeCoeffsShort,
+    pub z_short: ZShort,
+    pub u_short: UShort,
+}
+
+impl ValueCommitV {
+    pub fn get() -> Self {
+        let generator = super::value_commit_v::generator();
+        Self {
+            generator,
+            lagrange_coeffs_short: compute_lagrange_coeffs(generator, NUM_WINDOWS_SHORT).into(),
+            z_short: super::value_commit_v::Z_SHORT.into(),
+            u_short: super::value_commit_v::U_SHORT.into(),
+        }
+    }
+}
+
+/// A fixed base to be used in scalar multiplication with a short signed exponent.
+#[derive(Copy, Clone, Debug, Eq, PartialEq)]
+pub struct NullifierK;
+
+impl From<NullifierK> for OrchardFixedBase {
+    fn from(_nullifier_k: NullifierK) -> Self {
+        let (generator, z, u) = (
+            super::nullifier_k::generator(),
+            super::nullifier_k::Z.into(),
+            super::nullifier_k::U.into(),
+        );
+        Self {
+            generator,
+            lagrange_coeffs: compute_lagrange_coeffs(generator, NUM_WINDOWS).into(),
+            z,
+            u,
+        }
+    }
+}
+
+impl NullifierK {
+    pub fn generator(&self) -> pallas::Affine {
+        super::nullifier_k::generator()
+    }
+
+    pub fn u(&self) -> U {
+        super::nullifier_k::U.into()
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 8 coefficients per window
+pub struct WindowLagrangeCoeffs(pub Box<[pallas::Base; H]>);
+
+impl From<&[pallas::Base; H]> for WindowLagrangeCoeffs {
+    fn from(array: &[pallas::Base; H]) -> Self {
+        Self(Box::new(*array))
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 85 windows per base (with the exception of ValueCommitV)
+pub struct LagrangeCoeffs(pub Box<[WindowLagrangeCoeffs; constants::NUM_WINDOWS]>);
+
+impl From<Vec<WindowLagrangeCoeffs>> for LagrangeCoeffs {
+    fn from(windows: Vec<WindowLagrangeCoeffs>) -> Self {
+        Self(windows.into_boxed_slice().try_into().unwrap())
+    }
+}
+
+impl From<Vec<[pallas::Base; H]>> for LagrangeCoeffs {
+    fn from(arrays: Vec<[pallas::Base; H]>) -> Self {
+        let windows: Vec<WindowLagrangeCoeffs> = arrays.iter().map(|array| array.into()).collect();
+        windows.into()
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 22 windows for ValueCommitV
+pub struct LagrangeCoeffsShort(pub Box<[WindowLagrangeCoeffs; NUM_WINDOWS_SHORT]>);
+
+impl From<Vec<WindowLagrangeCoeffs>> for LagrangeCoeffsShort {
+    fn from(windows: Vec<WindowLagrangeCoeffs>) -> Self {
+        Self(windows.into_boxed_slice().try_into().unwrap())
+    }
+}
+
+impl From<Vec<[pallas::Base; H]>> for LagrangeCoeffsShort {
+    fn from(arrays: Vec<[pallas::Base; H]>) -> Self {
+        let windows: Vec<WindowLagrangeCoeffs> = arrays.iter().map(|array| array.into()).collect();
+        windows.into()
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 85 Z's per base (with the exception of ValueCommitV)
+pub struct Z(pub Box<[pallas::Base; NUM_WINDOWS]>);
+
+impl From<[u64; NUM_WINDOWS]> for Z {
+    fn from(zs: [u64; NUM_WINDOWS]) -> Self {
+        Self(
+            zs.iter()
+                .map(|z| pallas::Base::from_u64(*z))
+                .collect::<Vec<_>>()
+                .into_boxed_slice()
+                .try_into()
+                .unwrap(),
+        )
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 22 Z's for ValueCommitV
+pub struct ZShort(pub Box<[pallas::Base; NUM_WINDOWS_SHORT]>);
+
+impl From<[u64; NUM_WINDOWS_SHORT]> for ZShort {
+    fn from(zs: [u64; NUM_WINDOWS_SHORT]) -> Self {
+        Self(
+            zs.iter()
+                .map(|z| pallas::Base::from_u64(*z))
+                .collect::<Vec<_>>()
+                .into_boxed_slice()
+                .try_into()
+                .unwrap(),
+        )
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 8 u's per window
+pub struct WindowUs(pub Box<[pallas::Base; H]>);
+
+impl From<&[[u8; 32]; H]> for WindowUs {
+    fn from(window_us: &[[u8; 32]; H]) -> Self {
+        Self(
+            window_us
+                .iter()
+                .map(|u| pallas::Base::from_bytes(u).unwrap())
+                .collect::<Vec<_>>()
+                .into_boxed_slice()
+                .try_into()
+                .unwrap(),
+        )
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 85 windows per base (with the exception of ValueCommitV)
+pub struct U(pub Box<[WindowUs; NUM_WINDOWS]>);
+
+impl From<Vec<WindowUs>> for U {
+    fn from(windows: Vec<WindowUs>) -> Self {
+        Self(windows.into_boxed_slice().try_into().unwrap())
+    }
+}
+
+impl From<[[[u8; 32]; H]; NUM_WINDOWS]> for U {
+    fn from(window_us: [[[u8; 32]; H]; NUM_WINDOWS]) -> Self {
+        let windows: Vec<WindowUs> = window_us.iter().map(|us| us.into()).collect();
+        windows.into()
+    }
+}
+
+#[derive(Clone, Debug, Eq, PartialEq)]
+// 22 windows for ValueCommitV
+pub struct UShort(pub Box<[WindowUs; NUM_WINDOWS_SHORT]>);
+
+impl From<Vec<WindowUs>> for UShort {
+    fn from(windows: Vec<WindowUs>) -> Self {
+        Self(windows.into_boxed_slice().try_into().unwrap())
+    }
+}
+
+impl From<[[[u8; 32]; H]; NUM_WINDOWS_SHORT]> for UShort {
+    fn from(window_us: [[[u8; 32]; H]; NUM_WINDOWS_SHORT]) -> Self {
+        let windows: Vec<WindowUs> = window_us.iter().map(|us| us.into()).collect();
+        windows.into()
+    }
+}

+ 2965 - 0
examples/halo2/src/constants/note_commit_r.rs

@@ -0,0 +1,2965 @@
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+/// Generator used in SinsemillaCommit randomness for note commitment
+pub const GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        19, 110, 252, 15, 72, 44, 2, 44, 124, 164, 20, 252, 92, 197, 158, 35, 242, 61, 111, 147,
+        171, 159, 35, 205, 51, 69, 169, 40, 195, 6, 178, 38,
+    ],
+    [
+        227, 55, 207, 34, 198, 83, 65, 195, 246, 220, 224, 35, 120, 192, 199, 121, 198, 225, 102,
+        35, 47, 26, 84, 169, 76, 192, 109, 104, 75, 86, 222, 60,
+    ],
+);
+
+/// Full-width z-values for GENERATOR
+pub const Z: [u64; super::NUM_WINDOWS] = [
+    253356, 149209, 114903, 10575, 6973, 30969, 55415, 206450, 18453, 24528, 13099, 213949, 29959,
+    49929, 80867, 17465, 43715, 80241, 55983, 132629, 66101, 24136, 31372, 107975, 161748, 24107,
+    72184, 9338, 232543, 13519, 33536, 32530, 130885, 41578, 18166, 91947, 59796, 35560, 5631,
+    158600, 24695, 42654, 138331, 11268, 54733, 92869, 33770, 169166, 94853, 7006, 117687, 8073,
+    11865, 15349, 186445, 7696, 25167, 30146, 277659, 53921, 19594, 41306, 30172, 8124, 46133,
+    38659, 61965, 92134, 43958, 86662, 2047, 3542, 20976, 7411, 53574, 38271, 48233, 65338, 30516,
+    41201, 40964, 8563, 36035, 6334, 176,
+];
+
+/// Full-width u-values for GENERATOR
+pub const U: [[[u8; 32]; super::H]; super::NUM_WINDOWS] = [
+    [
+        [
+            114, 245, 9, 0, 5, 43, 7, 118, 244, 43, 15, 200, 116, 210, 0, 24, 161, 28, 185, 152,
+            216, 107, 69, 189, 146, 74, 72, 71, 79, 117, 226, 21,
+        ],
+        [
+            198, 234, 165, 117, 60, 32, 158, 128, 245, 251, 167, 51, 94, 222, 84, 164, 93, 252, 6,
+            172, 219, 79, 238, 23, 10, 251, 127, 190, 92, 247, 84, 7,
+        ],
+        [
+            247, 1, 1, 220, 151, 35, 250, 127, 20, 73, 141, 158, 41, 239, 31, 53, 87, 128, 115, 67,
+            105, 106, 106, 227, 24, 13, 193, 27, 11, 59, 156, 12,
+        ],
+        [
+            182, 18, 28, 164, 222, 215, 93, 217, 191, 112, 205, 228, 10, 41, 225, 115, 16, 106,
+            253, 86, 190, 158, 170, 163, 242, 182, 199, 91, 54, 66, 87, 45,
+        ],
+        [
+            85, 233, 2, 251, 58, 85, 151, 41, 171, 17, 163, 129, 14, 53, 149, 170, 49, 242, 59, 95,
+            195, 86, 152, 140, 191, 194, 135, 96, 61, 247, 224, 19,
+        ],
+        [
+            9, 26, 141, 163, 30, 34, 167, 73, 162, 45, 13, 19, 213, 4, 222, 207, 61, 172, 202, 243,
+            122, 40, 68, 21, 175, 213, 86, 213, 254, 227, 101, 15,
+        ],
+        [
+            86, 112, 227, 11, 213, 132, 173, 162, 105, 136, 218, 34, 136, 252, 237, 146, 166, 198,
+            142, 26, 59, 222, 162, 186, 51, 155, 102, 60, 62, 47, 222, 4,
+        ],
+        [
+            86, 92, 45, 23, 81, 81, 61, 194, 172, 21, 21, 83, 38, 217, 43, 44, 235, 231, 88, 89,
+            249, 41, 181, 159, 83, 22, 75, 138, 70, 126, 207, 16,
+        ],
+    ],
+    [
+        [
+            54, 21, 251, 114, 55, 147, 20, 211, 33, 240, 173, 252, 164, 174, 133, 65, 206, 140, 93,
+            20, 42, 49, 181, 104, 21, 120, 234, 196, 70, 100, 73, 42,
+        ],
+        [
+            238, 4, 102, 31, 21, 150, 35, 139, 86, 204, 115, 87, 148, 16, 158, 189, 161, 53, 20,
+            94, 238, 188, 243, 68, 91, 3, 117, 235, 245, 98, 110, 2,
+        ],
+        [
+            71, 0, 3, 234, 114, 242, 86, 47, 159, 35, 98, 250, 218, 203, 192, 75, 15, 24, 202, 7,
+            142, 99, 58, 79, 13, 158, 200, 188, 138, 62, 146, 46,
+        ],
+        [
+            110, 160, 81, 239, 206, 110, 48, 235, 48, 53, 5, 146, 193, 225, 227, 102, 163, 114,
+            159, 188, 166, 215, 24, 17, 124, 185, 233, 142, 97, 16, 247, 53,
+        ],
+        [
+            5, 74, 101, 186, 155, 171, 161, 12, 114, 102, 185, 130, 202, 125, 97, 157, 214, 109,
+            90, 55, 78, 151, 78, 233, 114, 32, 38, 167, 230, 47, 114, 43,
+        ],
+        [
+            43, 145, 156, 91, 52, 42, 252, 255, 165, 106, 190, 113, 140, 48, 74, 56, 231, 74, 233,
+            182, 111, 200, 49, 231, 139, 33, 38, 157, 185, 84, 190, 60,
+        ],
+        [
+            35, 64, 214, 183, 170, 176, 163, 222, 136, 23, 64, 62, 90, 18, 25, 78, 171, 169, 203,
+            242, 161, 64, 191, 204, 85, 79, 54, 130, 184, 99, 198, 38,
+        ],
+        [
+            6, 238, 153, 49, 156, 138, 236, 90, 155, 111, 98, 17, 43, 249, 193, 244, 33, 204, 245,
+            189, 174, 217, 152, 5, 133, 155, 139, 239, 164, 120, 180, 8,
+        ],
+    ],
+    [
+        [
+            233, 129, 153, 212, 169, 73, 235, 118, 37, 78, 183, 222, 115, 222, 111, 212, 174, 24,
+            102, 40, 189, 47, 223, 108, 201, 62, 19, 230, 93, 6, 207, 6,
+        ],
+        [
+            10, 125, 165, 221, 218, 11, 142, 131, 27, 0, 193, 244, 189, 149, 150, 127, 192, 16,
+            251, 0, 79, 224, 118, 106, 158, 229, 58, 190, 27, 199, 70, 44,
+        ],
+        [
+            47, 93, 253, 7, 216, 219, 104, 144, 107, 172, 234, 91, 107, 52, 121, 5, 45, 214, 148,
+            39, 118, 243, 128, 223, 42, 130, 88, 198, 89, 37, 10, 40,
+        ],
+        [
+            24, 208, 204, 230, 65, 96, 241, 136, 121, 22, 15, 171, 27, 48, 41, 212, 157, 228, 185,
+            202, 141, 243, 68, 217, 60, 108, 115, 188, 211, 131, 67, 41,
+        ],
+        [
+            190, 202, 105, 68, 170, 47, 201, 132, 190, 190, 166, 225, 7, 107, 65, 69, 109, 193, 47,
+            14, 223, 26, 63, 185, 78, 230, 218, 0, 146, 143, 144, 0,
+        ],
+        [
+            166, 38, 45, 231, 156, 245, 176, 191, 52, 176, 212, 147, 13, 162, 132, 4, 8, 238, 204,
+            24, 112, 250, 234, 42, 224, 153, 250, 69, 56, 41, 114, 34,
+        ],
+        [
+            171, 36, 217, 169, 17, 204, 156, 28, 33, 25, 229, 73, 250, 40, 65, 166, 92, 68, 77,
+            151, 246, 87, 239, 237, 47, 250, 65, 58, 41, 64, 29, 13,
+        ],
+        [
+            17, 52, 107, 231, 186, 222, 120, 227, 138, 150, 6, 62, 222, 26, 253, 222, 252, 69, 140,
+            137, 103, 210, 248, 27, 241, 171, 195, 56, 114, 101, 22, 6,
+        ],
+    ],
+    [
+        [
+            167, 249, 74, 41, 45, 5, 43, 197, 190, 158, 48, 58, 214, 194, 196, 48, 163, 111, 197,
+            83, 203, 83, 193, 101, 43, 228, 53, 170, 170, 190, 223, 22,
+        ],
+        [
+            162, 191, 69, 35, 204, 166, 151, 23, 131, 224, 254, 194, 233, 234, 193, 6, 70, 175, 56,
+            93, 247, 40, 95, 84, 133, 73, 73, 210, 110, 187, 131, 18,
+        ],
+        [
+            86, 251, 193, 249, 206, 104, 190, 79, 14, 228, 247, 226, 227, 1, 142, 53, 81, 147, 128,
+            242, 205, 74, 216, 186, 139, 15, 7, 103, 248, 58, 67, 38,
+        ],
+        [
+            141, 211, 222, 46, 115, 150, 90, 79, 200, 197, 108, 95, 129, 77, 116, 216, 231, 125,
+            21, 48, 248, 132, 112, 71, 112, 37, 146, 179, 113, 163, 176, 52,
+        ],
+        [
+            118, 76, 20, 77, 119, 186, 56, 50, 222, 250, 197, 240, 220, 202, 194, 207, 254, 50, 5,
+            161, 165, 0, 49, 111, 45, 160, 220, 7, 202, 110, 89, 50,
+        ],
+        [
+            102, 37, 174, 173, 77, 58, 49, 245, 204, 1, 199, 86, 184, 110, 17, 46, 126, 117, 147,
+            199, 52, 11, 59, 7, 23, 192, 10, 183, 9, 203, 47, 63,
+        ],
+        [
+            80, 3, 3, 232, 195, 68, 22, 157, 76, 193, 50, 194, 229, 96, 221, 86, 166, 92, 177, 234,
+            210, 181, 234, 159, 182, 146, 34, 172, 4, 135, 41, 44,
+        ],
+        [
+            251, 99, 183, 95, 90, 221, 38, 54, 26, 124, 224, 152, 204, 56, 15, 10, 123, 235, 151,
+            73, 105, 106, 24, 173, 164, 213, 225, 110, 98, 59, 133, 2,
+        ],
+    ],
+    [
+        [
+            164, 185, 168, 158, 213, 198, 142, 64, 83, 152, 213, 11, 100, 189, 236, 113, 45, 181,
+            112, 106, 135, 24, 198, 226, 203, 63, 78, 3, 226, 180, 74, 10,
+        ],
+        [
+            189, 212, 60, 126, 110, 69, 152, 122, 85, 34, 9, 19, 22, 248, 13, 32, 135, 61, 19, 215,
+            200, 213, 219, 231, 220, 119, 92, 75, 219, 5, 120, 40,
+        ],
+        [
+            146, 245, 8, 160, 80, 125, 123, 131, 78, 50, 225, 183, 20, 25, 103, 1, 230, 84, 156,
+            252, 244, 204, 172, 164, 252, 118, 213, 130, 204, 37, 91, 11,
+        ],
+        [
+            142, 4, 206, 226, 62, 227, 19, 91, 196, 199, 182, 237, 73, 168, 222, 152, 4, 82, 70,
+            114, 57, 114, 229, 181, 134, 59, 0, 208, 176, 183, 218, 30,
+        ],
+        [
+            64, 30, 209, 160, 131, 75, 126, 41, 130, 105, 95, 99, 233, 182, 221, 1, 39, 231, 206,
+            9, 47, 25, 170, 24, 14, 249, 62, 68, 42, 68, 198, 6,
+        ],
+        [
+            171, 100, 218, 125, 75, 158, 24, 198, 25, 157, 232, 195, 15, 68, 34, 201, 219, 130,
+            198, 107, 2, 101, 70, 250, 161, 168, 99, 10, 18, 233, 13, 24,
+        ],
+        [
+            93, 226, 47, 214, 188, 46, 157, 237, 214, 49, 235, 173, 68, 33, 184, 57, 185, 165, 77,
+            217, 205, 103, 160, 63, 235, 254, 153, 164, 215, 239, 24, 53,
+        ],
+        [
+            168, 254, 143, 159, 235, 96, 14, 119, 152, 26, 156, 14, 149, 106, 16, 223, 73, 161,
+            133, 220, 175, 139, 213, 210, 56, 30, 214, 161, 51, 20, 128, 17,
+        ],
+    ],
+    [
+        [
+            90, 157, 237, 146, 6, 11, 72, 108, 27, 34, 77, 120, 242, 127, 35, 117, 189, 64, 45, 84,
+            233, 127, 132, 119, 128, 130, 141, 201, 107, 122, 33, 62,
+        ],
+        [
+            205, 110, 229, 214, 93, 107, 183, 211, 172, 82, 194, 10, 68, 115, 182, 64, 59, 197,
+            153, 86, 34, 235, 12, 128, 63, 71, 215, 108, 109, 223, 137, 51,
+        ],
+        [
+            215, 181, 7, 95, 143, 147, 43, 211, 208, 240, 5, 116, 105, 62, 141, 149, 67, 190, 237,
+            211, 147, 81, 206, 163, 206, 127, 90, 89, 234, 173, 18, 43,
+        ],
+        [
+            171, 227, 107, 54, 113, 175, 138, 78, 159, 26, 107, 241, 64, 57, 153, 114, 237, 92,
+            166, 85, 165, 104, 112, 131, 66, 27, 243, 179, 236, 14, 13, 39,
+        ],
+        [
+            74, 37, 91, 124, 254, 2, 191, 78, 0, 103, 90, 169, 99, 225, 232, 176, 213, 32, 172,
+            134, 17, 146, 120, 74, 78, 79, 132, 142, 122, 222, 157, 45,
+        ],
+        [
+            95, 6, 241, 174, 101, 194, 254, 44, 170, 149, 90, 122, 227, 137, 151, 143, 227, 35,
+            116, 144, 162, 87, 53, 70, 57, 37, 5, 66, 238, 197, 203, 6,
+        ],
+        [
+            114, 141, 200, 255, 187, 228, 255, 185, 248, 223, 241, 204, 71, 85, 159, 221, 108, 199,
+            184, 101, 44, 141, 20, 17, 147, 245, 108, 154, 109, 126, 173, 52,
+        ],
+        [
+            176, 218, 48, 106, 6, 126, 6, 176, 103, 206, 215, 132, 17, 182, 174, 147, 102, 173,
+            109, 141, 172, 86, 46, 28, 60, 224, 186, 110, 209, 106, 131, 9,
+        ],
+    ],
+    [
+        [
+            5, 64, 1, 52, 210, 89, 32, 189, 231, 103, 255, 195, 129, 226, 88, 38, 122, 54, 105, 83,
+            102, 200, 148, 152, 55, 224, 238, 104, 64, 140, 40, 44,
+        ],
+        [
+            18, 82, 230, 31, 144, 31, 240, 18, 127, 237, 48, 165, 173, 125, 216, 42, 162, 13, 28,
+            124, 153, 18, 17, 45, 44, 176, 214, 60, 102, 153, 177, 18,
+        ],
+        [
+            10, 199, 20, 92, 238, 49, 31, 43, 38, 104, 38, 113, 88, 32, 207, 71, 229, 34, 106, 126,
+            43, 249, 24, 17, 160, 207, 133, 37, 148, 115, 158, 50,
+        ],
+        [
+            221, 204, 123, 82, 227, 236, 230, 64, 31, 215, 60, 62, 158, 143, 0, 64, 155, 245, 217,
+            56, 122, 32, 0, 101, 97, 50, 195, 253, 180, 102, 116, 54,
+        ],
+        [
+            197, 157, 252, 45, 151, 7, 74, 165, 127, 57, 241, 132, 58, 148, 23, 25, 109, 28, 57,
+            57, 13, 248, 90, 58, 251, 218, 152, 10, 130, 155, 145, 47,
+        ],
+        [
+            206, 10, 180, 190, 173, 179, 139, 102, 34, 2, 20, 48, 56, 111, 227, 181, 51, 19, 215,
+            182, 56, 33, 176, 226, 168, 79, 157, 199, 157, 171, 52, 36,
+        ],
+        [
+            137, 140, 87, 36, 181, 252, 224, 59, 74, 44, 185, 157, 233, 12, 11, 156, 101, 254, 117,
+            18, 170, 253, 63, 99, 86, 216, 76, 79, 41, 143, 158, 48,
+        ],
+        [
+            125, 189, 147, 43, 201, 233, 79, 46, 181, 15, 208, 71, 166, 151, 8, 176, 113, 207, 120,
+            143, 4, 233, 139, 219, 201, 39, 208, 28, 175, 67, 198, 9,
+        ],
+    ],
+    [
+        [
+            22, 37, 53, 160, 237, 140, 57, 123, 148, 134, 144, 163, 194, 30, 81, 169, 197, 228, 71,
+            38, 137, 208, 166, 114, 242, 79, 76, 62, 162, 120, 252, 14,
+        ],
+        [
+            190, 105, 199, 169, 19, 226, 70, 173, 140, 172, 222, 75, 102, 132, 53, 177, 25, 6, 31,
+            202, 0, 6, 243, 47, 53, 103, 175, 18, 201, 165, 9, 12,
+        ],
+        [
+            106, 129, 69, 5, 170, 151, 240, 186, 237, 175, 20, 253, 40, 36, 236, 149, 101, 108,
+            117, 163, 42, 3, 159, 177, 223, 198, 149, 23, 235, 129, 28, 59,
+        ],
+        [
+            133, 72, 190, 211, 56, 227, 246, 179, 101, 144, 136, 137, 144, 142, 226, 105, 34, 78,
+            109, 103, 159, 87, 255, 103, 169, 40, 239, 110, 131, 156, 159, 12,
+        ],
+        [
+            245, 215, 211, 148, 84, 236, 188, 64, 63, 204, 85, 19, 186, 176, 159, 77, 234, 187, 87,
+            224, 232, 22, 67, 84, 104, 130, 82, 181, 103, 186, 96, 36,
+        ],
+        [
+            81, 145, 145, 5, 218, 219, 75, 245, 176, 51, 163, 96, 41, 53, 68, 66, 178, 46, 132,
+            255, 156, 136, 171, 119, 128, 182, 9, 125, 159, 93, 6, 24,
+        ],
+        [
+            174, 192, 45, 222, 156, 253, 141, 108, 134, 16, 64, 169, 140, 214, 116, 85, 206, 19,
+            143, 90, 191, 122, 191, 50, 120, 242, 12, 250, 50, 89, 166, 1,
+        ],
+        [
+            145, 122, 108, 141, 163, 122, 96, 198, 250, 29, 56, 173, 56, 129, 5, 192, 14, 164, 151,
+            18, 232, 155, 23, 242, 150, 129, 184, 71, 42, 211, 34, 37,
+        ],
+    ],
+    [
+        [
+            189, 187, 66, 97, 29, 216, 85, 51, 152, 120, 220, 104, 253, 201, 53, 132, 65, 240, 252,
+            220, 227, 35, 99, 171, 171, 146, 144, 19, 202, 90, 91, 41,
+        ],
+        [
+            72, 152, 255, 229, 122, 94, 187, 103, 248, 26, 154, 126, 54, 68, 234, 8, 202, 208, 155,
+            99, 159, 223, 101, 8, 54, 217, 49, 98, 108, 149, 98, 24,
+        ],
+        [
+            50, 232, 175, 207, 73, 18, 225, 218, 85, 236, 151, 102, 191, 232, 207, 250, 161, 234,
+            137, 249, 42, 243, 65, 15, 150, 29, 21, 86, 102, 192, 26, 32,
+        ],
+        [
+            40, 193, 12, 48, 4, 212, 39, 67, 231, 182, 218, 43, 11, 231, 75, 82, 24, 190, 132, 82,
+            27, 169, 140, 214, 162, 122, 191, 110, 225, 207, 185, 43,
+        ],
+        [
+            177, 1, 100, 87, 228, 136, 102, 8, 248, 170, 10, 58, 139, 21, 103, 168, 205, 234, 0,
+            28, 226, 183, 78, 51, 60, 54, 35, 247, 130, 199, 233, 59,
+        ],
+        [
+            181, 222, 23, 124, 138, 101, 61, 15, 49, 131, 173, 47, 224, 128, 118, 125, 66, 45, 68,
+            180, 215, 53, 226, 11, 226, 177, 103, 246, 43, 29, 102, 5,
+        ],
+        [
+            64, 123, 98, 247, 117, 240, 66, 217, 174, 246, 81, 150, 232, 133, 87, 229, 154, 43,
+            124, 143, 114, 78, 96, 39, 149, 89, 66, 131, 238, 217, 127, 8,
+        ],
+        [
+            115, 22, 38, 108, 115, 205, 105, 132, 105, 23, 113, 198, 46, 49, 30, 219, 57, 177, 189,
+            77, 143, 24, 58, 146, 219, 20, 25, 218, 0, 190, 172, 23,
+        ],
+    ],
+    [
+        [
+            166, 199, 164, 173, 14, 58, 189, 169, 19, 8, 20, 217, 59, 6, 227, 254, 3, 142, 27, 136,
+            252, 193, 94, 100, 59, 223, 58, 195, 186, 240, 4, 53,
+        ],
+        [
+            157, 20, 32, 77, 161, 28, 25, 124, 24, 76, 50, 122, 214, 108, 34, 240, 252, 230, 170,
+            213, 153, 250, 131, 108, 176, 84, 218, 246, 108, 45, 198, 10,
+        ],
+        [
+            124, 234, 207, 196, 216, 43, 64, 63, 61, 246, 48, 162, 149, 214, 6, 195, 194, 116, 146,
+            100, 169, 48, 64, 96, 106, 124, 215, 221, 87, 77, 185, 63,
+        ],
+        [
+            180, 35, 0, 153, 18, 168, 15, 109, 149, 209, 175, 145, 171, 236, 80, 140, 70, 253, 113,
+            127, 49, 137, 73, 116, 18, 135, 81, 199, 186, 178, 36, 18,
+        ],
+        [
+            124, 24, 76, 143, 58, 111, 89, 209, 97, 164, 199, 85, 178, 211, 185, 32, 102, 11, 228,
+            36, 191, 135, 71, 111, 163, 74, 109, 215, 152, 144, 47, 41,
+        ],
+        [
+            150, 183, 97, 110, 78, 33, 125, 152, 170, 254, 153, 118, 243, 79, 96, 147, 244, 171,
+            107, 192, 173, 19, 8, 252, 153, 34, 220, 25, 32, 238, 234, 20,
+        ],
+        [
+            142, 28, 82, 170, 186, 139, 148, 129, 61, 162, 120, 138, 168, 8, 244, 53, 249, 80, 4,
+            142, 211, 117, 188, 204, 11, 255, 178, 96, 230, 193, 245, 0,
+        ],
+        [
+            198, 214, 148, 238, 200, 11, 130, 194, 168, 46, 236, 82, 165, 75, 3, 19, 160, 232, 216,
+            70, 191, 29, 164, 144, 57, 60, 58, 212, 128, 226, 152, 24,
+        ],
+    ],
+    [
+        [
+            6, 94, 153, 100, 45, 112, 206, 104, 159, 95, 4, 92, 175, 185, 180, 113, 250, 110, 67,
+            166, 94, 228, 126, 186, 236, 64, 252, 84, 134, 208, 99, 17,
+        ],
+        [
+            134, 224, 207, 111, 61, 213, 5, 165, 226, 79, 208, 198, 130, 192, 89, 149, 242, 47, 53,
+            50, 206, 109, 157, 243, 99, 129, 215, 75, 181, 144, 117, 58,
+        ],
+        [
+            155, 174, 69, 67, 171, 111, 186, 235, 235, 192, 162, 14, 114, 66, 8, 99, 226, 82, 31,
+            134, 213, 214, 115, 222, 214, 211, 229, 184, 153, 7, 31, 13,
+        ],
+        [
+            181, 100, 30, 150, 176, 114, 167, 164, 173, 245, 138, 179, 201, 206, 116, 110, 33, 245,
+            104, 230, 172, 144, 182, 39, 160, 1, 55, 170, 171, 14, 97, 36,
+        ],
+        [
+            27, 182, 3, 193, 6, 114, 63, 211, 213, 111, 123, 204, 119, 182, 64, 168, 191, 189, 236,
+            169, 62, 102, 46, 10, 66, 233, 108, 95, 156, 5, 2, 17,
+        ],
+        [
+            252, 184, 10, 162, 39, 90, 220, 172, 255, 246, 129, 43, 70, 137, 87, 55, 3, 197, 79,
+            110, 208, 179, 213, 197, 8, 97, 207, 114, 63, 16, 35, 19,
+        ],
+        [
+            114, 84, 84, 248, 14, 96, 220, 105, 180, 236, 142, 134, 58, 183, 46, 126, 117, 238, 59,
+            233, 31, 32, 166, 80, 31, 170, 87, 81, 239, 167, 243, 20,
+        ],
+        [
+            70, 228, 140, 132, 194, 68, 145, 7, 226, 237, 165, 98, 214, 101, 204, 127, 42, 36, 184,
+            82, 253, 192, 72, 225, 215, 205, 242, 162, 212, 113, 64, 21,
+        ],
+    ],
+    [
+        [
+            88, 195, 125, 176, 127, 155, 224, 36, 205, 80, 207, 184, 175, 242, 195, 101, 204, 77,
+            215, 121, 230, 220, 29, 57, 131, 164, 115, 230, 76, 211, 215, 23,
+        ],
+        [
+            213, 195, 189, 198, 199, 49, 198, 15, 92, 101, 87, 99, 207, 99, 186, 213, 229, 179, 69,
+            71, 41, 140, 203, 153, 22, 155, 214, 226, 130, 175, 156, 62,
+        ],
+        [
+            166, 117, 91, 218, 251, 30, 251, 111, 174, 234, 219, 158, 177, 73, 166, 88, 204, 53,
+            27, 49, 235, 95, 205, 250, 155, 196, 152, 217, 130, 56, 145, 51,
+        ],
+        [
+            12, 180, 50, 125, 157, 91, 123, 81, 184, 183, 48, 213, 87, 185, 233, 171, 55, 204, 113,
+            238, 197, 226, 30, 163, 183, 131, 36, 135, 210, 12, 197, 42,
+        ],
+        [
+            175, 205, 39, 140, 182, 198, 178, 47, 247, 108, 237, 249, 97, 233, 180, 95, 123, 109,
+            1, 227, 242, 234, 128, 66, 217, 225, 8, 216, 228, 135, 20, 46,
+        ],
+        [
+            204, 48, 117, 11, 21, 101, 12, 185, 206, 97, 152, 180, 12, 104, 28, 71, 58, 176, 116,
+            10, 174, 103, 201, 82, 118, 74, 125, 197, 149, 216, 176, 4,
+        ],
+        [
+            150, 144, 226, 186, 64, 17, 254, 26, 21, 248, 118, 91, 180, 255, 125, 61, 67, 113, 25,
+            170, 155, 206, 110, 113, 66, 64, 88, 174, 131, 38, 196, 55,
+        ],
+        [
+            157, 181, 209, 189, 59, 76, 227, 183, 0, 161, 70, 233, 68, 56, 230, 107, 139, 252, 93,
+            167, 174, 72, 190, 77, 142, 215, 228, 199, 1, 60, 136, 56,
+        ],
+    ],
+    [
+        [
+            190, 92, 13, 8, 22, 229, 140, 76, 14, 27, 58, 56, 121, 150, 136, 228, 72, 103, 71, 115,
+            243, 253, 53, 81, 123, 38, 199, 219, 123, 19, 174, 14,
+        ],
+        [
+            7, 188, 24, 186, 0, 251, 54, 130, 213, 106, 143, 83, 155, 119, 206, 253, 249, 191, 54,
+            233, 191, 176, 42, 51, 93, 9, 163, 121, 219, 200, 214, 12,
+        ],
+        [
+            198, 163, 145, 80, 22, 184, 116, 216, 156, 139, 34, 249, 166, 116, 103, 145, 120, 158,
+            85, 102, 25, 27, 113, 121, 102, 190, 55, 151, 48, 240, 71, 32,
+        ],
+        [
+            204, 58, 122, 178, 78, 187, 138, 17, 175, 30, 44, 72, 40, 61, 247, 156, 165, 100, 129,
+            171, 82, 152, 58, 208, 228, 249, 238, 15, 169, 34, 87, 9,
+        ],
+        [
+            134, 168, 115, 14, 77, 100, 63, 169, 243, 160, 196, 220, 14, 1, 189, 106, 39, 109, 74,
+            95, 69, 13, 80, 153, 149, 228, 76, 44, 189, 217, 174, 14,
+        ],
+        [
+            159, 106, 117, 192, 70, 92, 68, 153, 97, 21, 78, 158, 38, 251, 73, 250, 232, 212, 81,
+            218, 132, 210, 141, 52, 154, 109, 180, 102, 26, 46, 237, 42,
+        ],
+        [
+            12, 163, 20, 229, 61, 228, 45, 24, 204, 20, 16, 67, 244, 76, 55, 249, 80, 75, 21, 138,
+            253, 198, 255, 253, 92, 251, 90, 177, 226, 0, 189, 42,
+        ],
+        [
+            122, 234, 40, 6, 65, 195, 69, 149, 59, 88, 230, 156, 205, 111, 77, 80, 8, 79, 75, 165,
+            237, 130, 130, 223, 115, 216, 16, 83, 191, 48, 199, 35,
+        ],
+    ],
+    [
+        [
+            120, 206, 29, 206, 231, 94, 118, 231, 142, 12, 21, 55, 86, 131, 101, 140, 149, 39, 143,
+            47, 153, 183, 84, 124, 235, 181, 72, 47, 36, 106, 118, 26,
+        ],
+        [
+            228, 137, 53, 107, 172, 135, 152, 135, 60, 72, 14, 251, 236, 200, 210, 82, 179, 124,
+            204, 92, 40, 155, 7, 230, 141, 192, 49, 132, 97, 89, 119, 22,
+        ],
+        [
+            207, 29, 225, 197, 86, 135, 65, 28, 17, 153, 15, 136, 28, 124, 240, 84, 14, 201, 29,
+            194, 140, 205, 231, 108, 243, 100, 134, 59, 67, 249, 95, 34,
+        ],
+        [
+            234, 84, 54, 160, 181, 164, 65, 6, 15, 193, 237, 165, 148, 82, 153, 142, 39, 239, 134,
+            40, 164, 122, 235, 29, 102, 186, 216, 29, 103, 239, 85, 50,
+        ],
+        [
+            58, 194, 136, 114, 154, 163, 206, 220, 211, 122, 144, 102, 109, 22, 30, 145, 234, 170,
+            24, 252, 71, 139, 166, 193, 151, 227, 118, 9, 63, 209, 24, 52,
+        ],
+        [
+            69, 95, 192, 151, 92, 184, 83, 24, 138, 189, 254, 51, 192, 141, 121, 211, 54, 121, 107,
+            109, 187, 240, 161, 244, 54, 11, 205, 41, 49, 186, 58, 21,
+        ],
+        [
+            174, 72, 170, 165, 97, 229, 216, 108, 52, 175, 217, 144, 65, 170, 178, 72, 57, 244,
+            217, 93, 90, 59, 133, 150, 65, 222, 78, 168, 142, 10, 65, 57,
+        ],
+        [
+            64, 55, 77, 9, 97, 224, 252, 144, 123, 19, 154, 107, 90, 176, 121, 15, 30, 43, 94, 233,
+            86, 28, 92, 121, 22, 29, 194, 229, 26, 46, 23, 24,
+        ],
+    ],
+    [
+        [
+            76, 60, 120, 126, 240, 28, 211, 52, 21, 189, 35, 153, 162, 242, 177, 158, 251, 118,
+            212, 37, 42, 83, 34, 73, 67, 232, 149, 198, 196, 87, 158, 15,
+        ],
+        [
+            157, 158, 65, 83, 61, 63, 54, 50, 65, 74, 210, 115, 194, 223, 77, 138, 137, 78, 188,
+            14, 117, 203, 104, 45, 48, 199, 130, 1, 54, 149, 206, 35,
+        ],
+        [
+            231, 191, 185, 71, 252, 217, 195, 188, 72, 190, 22, 41, 42, 147, 166, 69, 42, 126, 125,
+            168, 48, 63, 127, 44, 181, 189, 110, 141, 72, 178, 125, 29,
+        ],
+        [
+            94, 64, 125, 170, 1, 131, 212, 24, 147, 151, 15, 73, 177, 8, 135, 160, 201, 115, 241,
+            136, 247, 184, 211, 13, 64, 206, 126, 239, 224, 73, 215, 55,
+        ],
+        [
+            12, 37, 188, 206, 231, 212, 14, 180, 159, 225, 82, 255, 232, 11, 128, 28, 50, 95, 1,
+            131, 203, 4, 17, 66, 239, 193, 151, 123, 253, 68, 20, 40,
+        ],
+        [
+            48, 80, 138, 22, 87, 172, 103, 208, 138, 14, 164, 65, 191, 235, 51, 248, 21, 117, 129,
+            248, 199, 128, 126, 210, 189, 57, 67, 150, 178, 8, 188, 62,
+        ],
+        [
+            98, 115, 183, 93, 165, 143, 231, 214, 229, 168, 250, 179, 9, 43, 102, 129, 189, 8, 138,
+            149, 215, 140, 100, 168, 27, 152, 140, 252, 36, 109, 62, 49,
+        ],
+        [
+            82, 184, 171, 186, 244, 111, 194, 186, 63, 45, 8, 90, 97, 130, 102, 112, 185, 70, 182,
+            92, 197, 253, 122, 124, 196, 164, 170, 25, 180, 117, 94, 2,
+        ],
+    ],
+    [
+        [
+            209, 225, 106, 206, 153, 240, 154, 163, 143, 89, 129, 19, 20, 45, 44, 223, 64, 38, 34,
+            208, 9, 151, 85, 171, 182, 89, 137, 36, 163, 41, 84, 42,
+        ],
+        [
+            146, 188, 65, 87, 122, 69, 148, 30, 80, 176, 184, 33, 3, 77, 156, 203, 73, 230, 231,
+            12, 22, 232, 26, 143, 91, 35, 206, 246, 43, 55, 3, 9,
+        ],
+        [
+            25, 114, 90, 10, 192, 14, 159, 234, 190, 73, 105, 222, 143, 2, 98, 30, 107, 18, 49, 35,
+            100, 255, 185, 20, 52, 155, 150, 175, 35, 209, 41, 39,
+        ],
+        [
+            191, 153, 7, 52, 5, 119, 8, 21, 199, 194, 163, 24, 199, 76, 185, 128, 49, 18, 54, 206,
+            252, 101, 181, 105, 101, 3, 93, 250, 139, 110, 105, 17,
+        ],
+        [
+            187, 224, 140, 3, 152, 10, 215, 106, 92, 32, 53, 193, 164, 49, 85, 248, 152, 217, 148,
+            69, 206, 67, 202, 77, 40, 134, 1, 233, 36, 57, 255, 60,
+        ],
+        [
+            174, 28, 43, 241, 197, 16, 52, 191, 5, 12, 100, 203, 128, 228, 95, 21, 139, 30, 27,
+            151, 49, 131, 188, 119, 245, 70, 113, 118, 64, 72, 182, 6,
+        ],
+        [
+            48, 252, 34, 196, 173, 44, 133, 85, 67, 13, 237, 191, 29, 5, 184, 67, 133, 144, 192,
+            38, 19, 37, 175, 108, 156, 242, 21, 223, 11, 119, 165, 14,
+        ],
+        [
+            100, 197, 0, 213, 89, 62, 88, 131, 238, 25, 108, 172, 133, 12, 34, 14, 9, 130, 39, 54,
+            188, 4, 61, 243, 131, 108, 22, 70, 116, 37, 210, 34,
+        ],
+    ],
+    [
+        [
+            170, 138, 180, 84, 35, 21, 13, 177, 134, 125, 153, 82, 70, 64, 27, 75, 162, 161, 10,
+            198, 105, 36, 120, 166, 182, 214, 103, 117, 229, 138, 80, 59,
+        ],
+        [
+            84, 95, 68, 119, 210, 84, 69, 165, 136, 57, 55, 153, 132, 67, 66, 82, 213, 80, 68, 108,
+            192, 184, 190, 202, 40, 243, 116, 24, 142, 112, 174, 57,
+        ],
+        [
+            88, 41, 176, 199, 215, 98, 157, 224, 41, 6, 229, 129, 207, 52, 114, 203, 182, 27, 82,
+            185, 68, 102, 126, 6, 49, 224, 172, 179, 169, 23, 67, 50,
+        ],
+        [
+            13, 39, 165, 156, 39, 15, 143, 254, 19, 44, 221, 98, 41, 248, 51, 162, 124, 244, 145,
+            66, 77, 238, 2, 159, 167, 130, 5, 165, 148, 217, 126, 39,
+        ],
+        [
+            243, 178, 255, 129, 211, 199, 156, 239, 252, 157, 180, 156, 233, 49, 20, 122, 235, 112,
+            107, 104, 128, 111, 10, 39, 225, 187, 190, 216, 237, 133, 116, 27,
+        ],
+        [
+            62, 140, 130, 27, 124, 177, 228, 42, 137, 63, 23, 176, 132, 100, 20, 235, 149, 6, 30,
+            226, 243, 86, 218, 62, 39, 167, 124, 40, 114, 50, 151, 44,
+        ],
+        [
+            153, 186, 80, 123, 183, 144, 118, 245, 93, 213, 158, 238, 76, 61, 218, 113, 80, 97,
+            193, 199, 84, 3, 88, 133, 168, 218, 248, 41, 216, 231, 132, 54,
+        ],
+        [
+            24, 13, 231, 102, 64, 93, 142, 32, 95, 124, 165, 112, 146, 124, 94, 71, 147, 194, 180,
+            81, 138, 95, 198, 173, 135, 219, 180, 238, 55, 175, 0, 49,
+        ],
+    ],
+    [
+        [
+            191, 67, 109, 233, 253, 99, 144, 145, 112, 41, 12, 226, 34, 38, 59, 104, 32, 46, 165,
+            134, 63, 12, 240, 107, 124, 170, 157, 95, 123, 77, 51, 11,
+        ],
+        [
+            253, 176, 178, 255, 113, 102, 61, 37, 130, 48, 154, 203, 106, 34, 89, 133, 223, 16, 46,
+            161, 228, 11, 168, 58, 124, 111, 180, 95, 205, 178, 201, 8,
+        ],
+        [
+            45, 51, 116, 58, 87, 136, 35, 53, 226, 3, 240, 236, 196, 23, 79, 255, 236, 129, 129,
+            153, 110, 21, 32, 121, 214, 66, 53, 39, 32, 121, 155, 26,
+        ],
+        [
+            253, 55, 59, 249, 128, 61, 95, 130, 99, 194, 200, 12, 129, 70, 56, 130, 60, 163, 84,
+            203, 119, 27, 142, 56, 171, 128, 144, 207, 208, 220, 33, 18,
+        ],
+        [
+            255, 59, 215, 178, 200, 172, 206, 53, 251, 202, 242, 148, 156, 247, 117, 226, 60, 145,
+            122, 154, 15, 205, 138, 253, 158, 133, 46, 103, 33, 12, 85, 26,
+        ],
+        [
+            51, 26, 129, 30, 187, 55, 234, 9, 36, 14, 6, 19, 54, 209, 189, 240, 226, 122, 219, 186,
+            62, 106, 52, 89, 242, 4, 177, 214, 20, 228, 188, 18,
+        ],
+        [
+            43, 93, 69, 179, 7, 206, 234, 199, 244, 76, 82, 200, 246, 125, 21, 1, 124, 142, 3, 76,
+            21, 1, 237, 236, 151, 249, 71, 38, 159, 159, 239, 48,
+        ],
+        [
+            230, 77, 223, 241, 62, 17, 127, 49, 233, 34, 99, 218, 95, 132, 99, 158, 50, 81, 121,
+            208, 225, 109, 68, 170, 238, 26, 147, 195, 178, 33, 157, 16,
+        ],
+    ],
+    [
+        [
+            52, 186, 178, 89, 121, 159, 161, 108, 165, 177, 92, 184, 149, 101, 171, 153, 70, 215,
+            46, 200, 193, 14, 188, 34, 192, 141, 24, 210, 156, 81, 217, 41,
+        ],
+        [
+            205, 99, 134, 116, 97, 224, 2, 77, 29, 77, 88, 53, 0, 111, 15, 56, 74, 172, 166, 150,
+            133, 93, 146, 253, 3, 100, 190, 133, 11, 46, 40, 62,
+        ],
+        [
+            202, 120, 227, 229, 35, 128, 155, 243, 255, 108, 76, 195, 219, 96, 86, 121, 217, 111,
+            11, 121, 77, 228, 175, 2, 23, 102, 78, 193, 249, 10, 139, 10,
+        ],
+        [
+            128, 219, 91, 150, 191, 196, 135, 27, 205, 245, 32, 8, 15, 40, 90, 201, 73, 241, 31,
+            207, 216, 225, 129, 90, 173, 32, 108, 126, 59, 32, 11, 19,
+        ],
+        [
+            31, 172, 118, 187, 18, 112, 69, 208, 250, 115, 34, 50, 221, 213, 209, 55, 44, 127, 130,
+            196, 190, 155, 247, 254, 2, 195, 231, 155, 169, 158, 198, 60,
+        ],
+        [
+            205, 109, 204, 106, 223, 114, 189, 146, 15, 175, 189, 220, 55, 7, 242, 114, 99, 96, 81,
+            181, 204, 132, 253, 3, 52, 216, 47, 37, 58, 52, 227, 21,
+        ],
+        [
+            232, 76, 28, 95, 190, 76, 135, 35, 133, 206, 252, 224, 237, 123, 84, 47, 188, 253, 5,
+            178, 145, 176, 232, 227, 7, 230, 89, 213, 199, 47, 66, 32,
+        ],
+        [
+            71, 151, 218, 212, 133, 48, 92, 62, 72, 154, 75, 10, 186, 210, 198, 146, 53, 18, 173,
+            172, 60, 110, 21, 166, 252, 53, 239, 211, 36, 189, 156, 1,
+        ],
+    ],
+    [
+        [
+            33, 207, 156, 240, 223, 153, 52, 29, 223, 44, 214, 249, 177, 30, 23, 32, 99, 199, 159,
+            161, 175, 245, 85, 144, 14, 118, 163, 72, 111, 135, 0, 41,
+        ],
+        [
+            110, 244, 91, 45, 63, 22, 57, 91, 73, 106, 99, 88, 146, 118, 14, 176, 186, 228, 14, 83,
+            140, 189, 143, 197, 194, 135, 97, 41, 116, 113, 163, 30,
+        ],
+        [
+            137, 86, 251, 125, 228, 181, 116, 52, 60, 174, 181, 79, 70, 211, 93, 128, 143, 17, 107,
+            48, 241, 58, 140, 58, 240, 34, 167, 4, 67, 26, 212, 29,
+        ],
+        [
+            108, 217, 222, 116, 191, 191, 47, 61, 96, 84, 106, 166, 253, 5, 212, 60, 163, 168, 156,
+            145, 186, 129, 244, 187, 152, 235, 40, 36, 173, 231, 185, 56,
+        ],
+        [
+            144, 139, 139, 57, 138, 79, 237, 42, 243, 255, 137, 46, 60, 236, 0, 124, 151, 172, 130,
+            131, 4, 37, 255, 157, 112, 141, 248, 116, 32, 21, 169, 1,
+        ],
+        [
+            109, 149, 1, 115, 108, 63, 68, 192, 91, 49, 234, 90, 143, 98, 248, 92, 202, 207, 144,
+            86, 0, 26, 65, 235, 156, 131, 11, 74, 112, 175, 247, 14,
+        ],
+        [
+            18, 194, 249, 56, 144, 151, 10, 107, 87, 48, 179, 117, 7, 100, 38, 220, 26, 2, 18, 160,
+            171, 125, 140, 213, 171, 82, 189, 98, 96, 3, 235, 5,
+        ],
+        [
+            44, 108, 31, 136, 128, 150, 86, 40, 251, 99, 8, 150, 157, 135, 28, 214, 158, 60, 242,
+            29, 123, 252, 85, 65, 172, 61, 241, 230, 140, 29, 224, 27,
+        ],
+    ],
+    [
+        [
+            72, 96, 81, 44, 138, 199, 176, 84, 134, 126, 188, 123, 88, 83, 37, 233, 31, 237, 230,
+            160, 15, 57, 252, 28, 79, 176, 8, 136, 160, 168, 180, 54,
+        ],
+        [
+            236, 204, 160, 217, 80, 141, 110, 37, 12, 106, 216, 168, 97, 147, 225, 178, 243, 91,
+            144, 177, 162, 143, 29, 238, 45, 191, 217, 169, 17, 6, 82, 15,
+        ],
+        [
+            151, 37, 164, 32, 139, 47, 139, 135, 64, 90, 53, 139, 250, 31, 129, 155, 38, 132, 99,
+            202, 75, 25, 233, 151, 238, 122, 231, 45, 178, 23, 36, 7,
+        ],
+        [
+            145, 211, 54, 13, 50, 237, 143, 95, 233, 219, 250, 67, 255, 72, 244, 202, 26, 178, 61,
+            233, 52, 109, 106, 30, 246, 249, 34, 126, 72, 113, 240, 4,
+        ],
+        [
+            113, 166, 236, 160, 205, 43, 161, 37, 126, 197, 172, 121, 235, 101, 42, 43, 143, 199,
+            111, 177, 23, 42, 51, 220, 232, 188, 92, 235, 139, 183, 170, 3,
+        ],
+        [
+            236, 93, 71, 61, 20, 98, 70, 157, 157, 108, 146, 80, 225, 245, 166, 244, 14, 223, 41,
+            191, 206, 212, 140, 195, 99, 13, 112, 217, 191, 189, 57, 22,
+        ],
+        [
+            110, 80, 126, 40, 242, 214, 43, 231, 72, 57, 159, 88, 36, 146, 13, 25, 198, 55, 233,
+            134, 49, 87, 14, 198, 40, 68, 245, 50, 182, 195, 172, 32,
+        ],
+        [
+            138, 47, 67, 28, 155, 85, 91, 243, 199, 109, 115, 119, 160, 15, 14, 10, 252, 133, 3,
+            75, 35, 17, 189, 159, 27, 1, 163, 166, 144, 211, 110, 11,
+        ],
+    ],
+    [
+        [
+            31, 79, 187, 42, 20, 82, 51, 24, 96, 195, 51, 150, 237, 25, 238, 211, 26, 151, 165,
+            162, 158, 98, 38, 255, 134, 178, 213, 60, 249, 77, 5, 2,
+        ],
+        [
+            97, 204, 217, 104, 57, 122, 48, 148, 131, 78, 36, 83, 200, 202, 85, 8, 163, 120, 189,
+            42, 109, 236, 11, 100, 221, 32, 84, 136, 26, 126, 107, 53,
+        ],
+        [
+            80, 195, 31, 107, 117, 133, 195, 140, 109, 176, 18, 91, 213, 153, 80, 1, 68, 254, 42,
+            238, 24, 189, 171, 105, 94, 59, 219, 230, 22, 176, 107, 9,
+        ],
+        [
+            141, 33, 117, 234, 88, 61, 132, 175, 21, 196, 141, 130, 123, 155, 29, 70, 66, 189, 3,
+            171, 12, 150, 97, 145, 117, 192, 81, 68, 6, 28, 96, 28,
+        ],
+        [
+            200, 160, 161, 9, 64, 94, 205, 144, 62, 116, 255, 185, 94, 175, 20, 167, 217, 78, 234,
+            1, 1, 122, 238, 184, 69, 233, 201, 85, 254, 138, 212, 39,
+        ],
+        [
+            109, 185, 122, 128, 51, 220, 226, 181, 98, 114, 82, 142, 251, 224, 39, 161, 4, 27, 155,
+            185, 175, 78, 71, 250, 103, 160, 191, 44, 50, 253, 150, 48,
+        ],
+        [
+            63, 60, 25, 196, 216, 52, 106, 139, 111, 73, 150, 237, 22, 80, 63, 12, 198, 131, 217,
+            24, 217, 222, 1, 154, 107, 121, 42, 206, 71, 231, 85, 24,
+        ],
+        [
+            110, 208, 119, 152, 113, 49, 42, 110, 242, 125, 32, 238, 131, 123, 132, 102, 46, 60,
+            111, 90, 37, 46, 79, 200, 142, 181, 136, 54, 102, 115, 166, 45,
+        ],
+    ],
+    [
+        [
+            65, 117, 127, 35, 217, 86, 9, 239, 179, 241, 114, 13, 75, 195, 58, 239, 152, 49, 225,
+            92, 93, 1, 35, 31, 117, 45, 132, 152, 184, 111, 227, 62,
+        ],
+        [
+            28, 50, 160, 235, 129, 142, 99, 208, 77, 124, 228, 209, 205, 199, 158, 149, 244, 14,
+            22, 129, 93, 116, 205, 167, 237, 75, 238, 150, 8, 21, 160, 10,
+        ],
+        [
+            240, 31, 142, 228, 114, 27, 182, 196, 65, 166, 251, 35, 97, 252, 58, 32, 207, 217, 94,
+            11, 22, 44, 35, 143, 234, 143, 112, 21, 225, 43, 124, 35,
+        ],
+        [
+            84, 215, 38, 31, 55, 68, 5, 227, 30, 70, 197, 135, 157, 55, 132, 110, 17, 239, 55, 150,
+            66, 94, 111, 156, 61, 134, 129, 252, 80, 136, 109, 3,
+        ],
+        [
+            244, 5, 160, 73, 65, 202, 125, 239, 79, 248, 118, 146, 198, 46, 179, 29, 27, 183, 162,
+            224, 163, 29, 88, 196, 95, 77, 15, 162, 245, 208, 121, 58,
+        ],
+        [
+            33, 142, 135, 112, 143, 47, 193, 39, 170, 223, 34, 145, 60, 197, 160, 23, 233, 22, 82,
+            189, 91, 251, 186, 21, 238, 69, 58, 194, 34, 58, 40, 9,
+        ],
+        [
+            46, 205, 15, 203, 124, 46, 93, 43, 68, 29, 165, 195, 225, 198, 170, 60, 23, 136, 96,
+            65, 54, 231, 238, 94, 94, 2, 16, 171, 167, 138, 105, 16,
+        ],
+        [
+            10, 116, 71, 4, 152, 209, 8, 163, 77, 5, 23, 146, 141, 186, 60, 94, 39, 117, 33, 20, 5,
+            3, 156, 67, 221, 79, 57, 111, 72, 37, 126, 51,
+        ],
+    ],
+    [
+        [
+            191, 166, 185, 94, 206, 142, 77, 46, 132, 158, 245, 234, 48, 226, 49, 249, 39, 60, 88,
+            14, 224, 91, 91, 163, 161, 166, 103, 20, 190, 13, 116, 19,
+        ],
+        [
+            51, 216, 164, 99, 24, 233, 245, 224, 152, 116, 137, 45, 246, 190, 47, 222, 130, 135,
+            57, 245, 95, 18, 139, 248, 200, 158, 124, 75, 9, 72, 222, 22,
+        ],
+        [
+            11, 200, 108, 211, 187, 171, 183, 33, 91, 144, 221, 192, 112, 246, 92, 195, 14, 243,
+            116, 64, 122, 238, 227, 49, 72, 133, 228, 133, 36, 105, 65, 44,
+        ],
+        [
+            97, 255, 190, 195, 103, 126, 180, 211, 73, 73, 8, 155, 205, 46, 78, 148, 212, 87, 193,
+            107, 121, 190, 164, 242, 251, 238, 87, 198, 180, 148, 171, 30,
+        ],
+        [
+            146, 130, 197, 213, 1, 97, 12, 6, 210, 55, 145, 213, 55, 243, 71, 83, 117, 160, 62,
+            201, 72, 75, 160, 185, 107, 235, 22, 189, 164, 222, 197, 10,
+        ],
+        [
+            187, 238, 229, 171, 0, 101, 27, 153, 124, 37, 3, 122, 43, 192, 182, 104, 220, 157, 180,
+            252, 88, 120, 29, 197, 199, 109, 94, 10, 196, 187, 183, 9,
+        ],
+        [
+            240, 83, 124, 167, 254, 134, 93, 87, 81, 207, 252, 115, 47, 49, 33, 65, 200, 33, 186,
+            176, 72, 31, 149, 189, 19, 122, 236, 228, 129, 163, 231, 41,
+        ],
+        [
+            8, 130, 118, 127, 122, 91, 123, 43, 98, 65, 35, 242, 64, 136, 15, 55, 191, 136, 4, 26,
+            157, 157, 138, 218, 75, 204, 240, 144, 61, 53, 99, 62,
+        ],
+    ],
+    [
+        [
+            160, 12, 147, 196, 134, 124, 67, 246, 5, 2, 69, 220, 231, 138, 227, 129, 126, 185, 74,
+            155, 236, 207, 218, 212, 238, 22, 0, 157, 94, 85, 24, 6,
+        ],
+        [
+            138, 4, 163, 194, 25, 156, 50, 92, 111, 33, 7, 26, 69, 110, 26, 194, 70, 115, 87, 232,
+            187, 92, 183, 40, 206, 229, 191, 48, 9, 75, 8, 42,
+        ],
+        [
+            144, 61, 87, 235, 101, 165, 69, 137, 69, 225, 109, 196, 47, 204, 127, 42, 158, 121, 50,
+            27, 129, 66, 148, 82, 79, 154, 189, 5, 115, 100, 17, 35,
+        ],
+        [
+            87, 218, 178, 199, 26, 202, 96, 153, 160, 84, 208, 0, 84, 46, 32, 221, 97, 63, 161,
+            235, 61, 34, 111, 119, 91, 179, 51, 175, 158, 71, 156, 34,
+        ],
+        [
+            189, 150, 38, 95, 146, 100, 0, 105, 233, 4, 173, 80, 206, 50, 53, 160, 40, 167, 33,
+            234, 80, 54, 99, 4, 41, 55, 46, 209, 140, 210, 143, 57,
+        ],
+        [
+            25, 185, 233, 107, 108, 66, 45, 50, 152, 110, 164, 20, 199, 231, 35, 48, 66, 116, 149,
+            211, 214, 134, 127, 152, 63, 102, 27, 33, 90, 16, 216, 50,
+        ],
+        [
+            77, 105, 46, 102, 27, 172, 194, 72, 49, 15, 105, 118, 41, 16, 161, 168, 226, 172, 47,
+            111, 115, 141, 123, 82, 160, 242, 69, 32, 125, 21, 44, 14,
+        ],
+        [
+            198, 193, 51, 219, 107, 174, 135, 49, 208, 46, 134, 81, 121, 111, 246, 128, 198, 48,
+            158, 216, 160, 175, 107, 116, 51, 156, 87, 45, 238, 142, 66, 0,
+        ],
+    ],
+    [
+        [
+            228, 186, 23, 81, 165, 67, 155, 142, 246, 246, 111, 141, 210, 130, 233, 51, 211, 146,
+            202, 26, 110, 46, 212, 39, 154, 170, 63, 110, 31, 238, 80, 0,
+        ],
+        [
+            140, 202, 146, 110, 94, 220, 222, 80, 20, 41, 163, 129, 65, 188, 13, 58, 224, 0, 215,
+            183, 33, 118, 158, 219, 197, 78, 110, 143, 63, 70, 21, 15,
+        ],
+        [
+            71, 155, 232, 76, 80, 9, 234, 144, 163, 24, 181, 206, 34, 218, 60, 75, 159, 106, 75,
+            94, 218, 241, 17, 5, 169, 237, 87, 239, 51, 126, 174, 12,
+        ],
+        [
+            68, 14, 217, 104, 199, 117, 220, 170, 82, 113, 240, 86, 146, 132, 62, 68, 71, 63, 72,
+            67, 170, 58, 28, 113, 136, 167, 66, 29, 90, 185, 131, 10,
+        ],
+        [
+            124, 223, 201, 195, 99, 243, 62, 202, 157, 49, 112, 118, 126, 180, 56, 109, 13, 58, 38,
+            146, 240, 112, 157, 47, 149, 136, 68, 241, 122, 150, 37, 23,
+        ],
+        [
+            19, 217, 47, 84, 231, 168, 141, 240, 13, 102, 26, 80, 70, 109, 70, 142, 83, 149, 253,
+            102, 136, 214, 198, 184, 89, 232, 43, 180, 94, 57, 237, 59,
+        ],
+        [
+            2, 164, 113, 50, 147, 55, 23, 208, 109, 197, 30, 13, 248, 111, 194, 13, 229, 73, 91,
+            166, 195, 175, 210, 198, 179, 60, 221, 87, 104, 70, 218, 26,
+        ],
+        [
+            17, 160, 102, 238, 191, 46, 46, 161, 64, 238, 175, 98, 139, 219, 113, 56, 87, 78, 228,
+            246, 100, 155, 192, 172, 221, 72, 238, 31, 204, 49, 35, 54,
+        ],
+    ],
+    [
+        [
+            42, 238, 87, 78, 76, 206, 132, 112, 92, 251, 61, 98, 151, 105, 49, 204, 234, 104, 116,
+            42, 176, 84, 72, 114, 111, 247, 18, 125, 165, 27, 250, 60,
+        ],
+        [
+            192, 195, 201, 56, 49, 145, 231, 71, 125, 128, 185, 1, 116, 183, 81, 142, 207, 148,
+            159, 32, 184, 160, 8, 39, 8, 100, 43, 218, 96, 50, 107, 57,
+        ],
+        [
+            161, 28, 139, 96, 155, 238, 224, 98, 1, 109, 199, 72, 193, 233, 77, 40, 223, 139, 126,
+            165, 233, 112, 9, 39, 61, 37, 172, 130, 252, 255, 231, 55,
+        ],
+        [
+            148, 189, 23, 30, 46, 255, 1, 123, 106, 99, 45, 7, 65, 202, 55, 188, 236, 162, 182, 70,
+            38, 204, 120, 93, 114, 107, 159, 91, 250, 140, 57, 57,
+        ],
+        [
+            51, 190, 71, 10, 22, 62, 37, 160, 168, 87, 199, 129, 183, 99, 225, 142, 247, 162, 123,
+            57, 44, 239, 49, 212, 91, 166, 5, 116, 83, 223, 225, 22,
+        ],
+        [
+            105, 203, 12, 226, 205, 192, 204, 244, 44, 237, 186, 143, 3, 235, 29, 157, 45, 95, 190,
+            177, 140, 218, 246, 125, 107, 136, 39, 11, 171, 15, 165, 15,
+        ],
+        [
+            40, 63, 140, 161, 128, 218, 185, 176, 105, 10, 235, 239, 69, 132, 86, 207, 77, 47, 176,
+            71, 250, 98, 164, 8, 158, 67, 139, 106, 185, 21, 241, 45,
+        ],
+        [
+            113, 187, 121, 32, 76, 47, 222, 172, 149, 197, 166, 55, 51, 145, 35, 53, 127, 181, 124,
+            87, 228, 146, 246, 19, 131, 251, 25, 177, 8, 37, 166, 53,
+        ],
+    ],
+    [
+        [
+            18, 1, 130, 209, 3, 70, 234, 9, 136, 82, 114, 124, 75, 221, 153, 20, 31, 238, 248, 78,
+            148, 136, 42, 184, 143, 43, 26, 126, 200, 61, 80, 57,
+        ],
+        [
+            225, 98, 72, 37, 222, 154, 100, 214, 73, 206, 129, 29, 27, 131, 81, 32, 182, 243, 185,
+            93, 84, 0, 151, 201, 243, 111, 89, 42, 117, 167, 99, 34,
+        ],
+        [
+            118, 227, 216, 225, 147, 147, 53, 116, 60, 220, 139, 31, 1, 124, 185, 10, 157, 49, 42,
+            132, 235, 10, 161, 152, 137, 48, 32, 206, 86, 213, 221, 32,
+        ],
+        [
+            254, 51, 99, 58, 209, 148, 243, 37, 169, 11, 22, 249, 168, 97, 56, 119, 21, 77, 50,
+            144, 156, 65, 220, 104, 229, 213, 153, 30, 42, 240, 156, 31,
+        ],
+        [
+            15, 208, 192, 113, 116, 160, 10, 101, 148, 128, 253, 44, 233, 9, 78, 22, 56, 25, 98,
+            54, 63, 55, 113, 147, 151, 161, 116, 34, 245, 39, 75, 3,
+        ],
+        [
+            210, 150, 121, 196, 177, 196, 184, 180, 88, 219, 232, 40, 89, 169, 87, 199, 227, 151,
+            251, 74, 249, 12, 128, 2, 208, 145, 98, 160, 150, 112, 200, 5,
+        ],
+        [
+            253, 175, 188, 74, 246, 2, 160, 24, 157, 187, 41, 151, 103, 79, 161, 226, 146, 151, 46,
+            208, 37, 5, 86, 126, 191, 153, 231, 94, 147, 101, 189, 5,
+        ],
+        [
+            15, 30, 205, 151, 176, 243, 96, 206, 110, 125, 116, 143, 234, 172, 254, 151, 148, 18,
+            25, 224, 83, 167, 228, 13, 47, 241, 58, 218, 76, 104, 93, 3,
+        ],
+    ],
+    [
+        [
+            72, 10, 136, 27, 24, 16, 41, 48, 68, 158, 58, 254, 35, 250, 247, 107, 227, 74, 234, 98,
+            97, 242, 9, 158, 70, 85, 49, 198, 203, 11, 230, 20,
+        ],
+        [
+            214, 243, 43, 26, 120, 31, 250, 32, 6, 32, 255, 63, 75, 36, 248, 24, 236, 39, 227, 136,
+            236, 50, 219, 231, 16, 127, 24, 172, 146, 96, 244, 59,
+        ],
+        [
+            96, 191, 165, 84, 42, 112, 128, 149, 53, 170, 114, 219, 238, 65, 138, 252, 190, 104,
+            95, 28, 80, 239, 185, 250, 14, 0, 70, 112, 95, 96, 37, 48,
+        ],
+        [
+            23, 136, 200, 26, 146, 148, 183, 211, 0, 39, 126, 89, 25, 17, 253, 149, 215, 73, 33,
+            67, 99, 1, 207, 32, 180, 34, 81, 116, 182, 105, 39, 33,
+        ],
+        [
+            87, 95, 184, 76, 228, 106, 105, 36, 159, 100, 80, 25, 234, 27, 214, 63, 43, 106, 183,
+            209, 28, 154, 57, 252, 1, 33, 107, 197, 64, 155, 206, 45,
+        ],
+        [
+            61, 125, 226, 15, 206, 94, 85, 192, 206, 85, 168, 220, 114, 189, 128, 250, 80, 50, 167,
+            65, 231, 176, 99, 21, 82, 43, 218, 99, 153, 198, 55, 56,
+        ],
+        [
+            21, 41, 65, 249, 187, 151, 1, 15, 58, 96, 102, 96, 128, 158, 199, 143, 110, 200, 182,
+            55, 15, 40, 227, 249, 70, 24, 155, 205, 177, 248, 68, 36,
+        ],
+        [
+            153, 93, 124, 9, 139, 102, 83, 232, 141, 176, 183, 178, 149, 222, 54, 14, 181, 4, 83,
+            113, 81, 218, 84, 31, 86, 230, 20, 226, 169, 169, 147, 20,
+        ],
+    ],
+    [
+        [
+            42, 6, 69, 242, 47, 170, 149, 121, 142, 185, 225, 212, 167, 145, 100, 105, 224, 168,
+            223, 75, 70, 49, 78, 136, 148, 163, 129, 189, 213, 99, 57, 7,
+        ],
+        [
+            202, 48, 49, 166, 179, 127, 171, 43, 179, 215, 185, 98, 122, 169, 76, 163, 162, 152,
+            151, 234, 229, 1, 174, 31, 106, 210, 184, 103, 68, 174, 231, 14,
+        ],
+        [
+            4, 1, 223, 186, 118, 214, 99, 238, 170, 254, 46, 156, 164, 66, 220, 145, 35, 249, 225,
+            0, 146, 146, 32, 90, 63, 225, 4, 213, 120, 168, 202, 31,
+        ],
+        [
+            191, 2, 7, 207, 2, 3, 132, 59, 8, 17, 130, 119, 167, 244, 65, 80, 33, 93, 217, 36, 196,
+            247, 121, 191, 101, 80, 78, 103, 89, 253, 243, 4,
+        ],
+        [
+            9, 202, 97, 46, 9, 57, 25, 238, 13, 173, 253, 219, 178, 11, 191, 62, 82, 207, 231, 62,
+            8, 85, 176, 21, 98, 73, 141, 255, 69, 71, 22, 2,
+        ],
+        [
+            60, 6, 122, 230, 204, 92, 159, 86, 44, 51, 165, 228, 157, 166, 23, 89, 139, 113, 97,
+            190, 96, 11, 249, 114, 210, 177, 241, 181, 193, 129, 248, 45,
+        ],
+        [
+            127, 187, 205, 131, 198, 160, 221, 214, 70, 29, 3, 78, 25, 70, 87, 81, 163, 105, 247,
+            244, 39, 47, 27, 201, 134, 108, 160, 68, 208, 167, 154, 19,
+        ],
+        [
+            88, 198, 1, 133, 122, 100, 181, 13, 161, 66, 143, 128, 97, 99, 180, 200, 72, 50, 81,
+            197, 140, 51, 43, 34, 107, 170, 115, 22, 89, 214, 148, 19,
+        ],
+    ],
+    [
+        [
+            209, 79, 29, 202, 130, 199, 138, 237, 198, 43, 240, 165, 246, 59, 173, 155, 149, 89,
+            176, 38, 98, 32, 55, 57, 108, 38, 39, 35, 198, 30, 70, 19,
+        ],
+        [
+            62, 138, 183, 26, 93, 155, 177, 41, 76, 46, 239, 209, 50, 0, 254, 176, 243, 143, 41,
+            55, 205, 156, 52, 194, 186, 253, 134, 3, 91, 137, 64, 60,
+        ],
+        [
+            80, 193, 154, 56, 1, 162, 178, 97, 39, 58, 89, 158, 81, 12, 66, 239, 39, 78, 240, 163,
+            245, 197, 106, 91, 36, 144, 179, 175, 242, 170, 115, 9,
+        ],
+        [
+            88, 53, 242, 253, 61, 8, 226, 3, 32, 199, 199, 180, 38, 237, 102, 177, 91, 144, 79, 16,
+            43, 224, 47, 42, 149, 106, 48, 178, 185, 78, 194, 13,
+        ],
+        [
+            185, 170, 69, 129, 68, 165, 94, 97, 241, 117, 27, 40, 168, 74, 208, 125, 41, 231, 207,
+            184, 204, 188, 239, 161, 170, 101, 109, 96, 40, 127, 9, 47,
+        ],
+        [
+            81, 215, 213, 32, 75, 212, 14, 16, 55, 113, 242, 220, 197, 92, 200, 96, 231, 48, 87,
+            21, 233, 175, 160, 133, 37, 83, 165, 1, 105, 134, 137, 53,
+        ],
+        [
+            42, 175, 116, 152, 103, 108, 52, 117, 235, 100, 55, 253, 99, 9, 170, 189, 196, 204,
+            243, 121, 96, 28, 164, 2, 84, 75, 93, 32, 35, 74, 106, 19,
+        ],
+        [
+            205, 37, 25, 223, 168, 4, 64, 239, 149, 231, 158, 24, 100, 88, 21, 68, 153, 174, 171,
+            142, 203, 23, 79, 195, 120, 135, 251, 184, 199, 198, 118, 59,
+        ],
+    ],
+    [
+        [
+            236, 72, 236, 182, 97, 100, 170, 247, 194, 142, 191, 163, 104, 232, 55, 188, 179, 3,
+            241, 161, 130, 187, 201, 135, 36, 107, 194, 11, 58, 37, 198, 21,
+        ],
+        [
+            162, 108, 210, 213, 229, 7, 184, 128, 48, 218, 122, 152, 34, 44, 255, 129, 8, 7, 70,
+            159, 165, 102, 133, 198, 89, 136, 9, 210, 81, 209, 125, 62,
+        ],
+        [
+            19, 122, 208, 53, 54, 195, 80, 105, 130, 108, 101, 232, 213, 250, 94, 143, 34, 16, 123,
+            22, 85, 24, 222, 116, 81, 77, 146, 123, 63, 109, 155, 25,
+        ],
+        [
+            20, 202, 194, 34, 23, 228, 108, 225, 197, 169, 220, 145, 3, 87, 252, 183, 201, 134, 9,
+            70, 26, 33, 233, 245, 90, 40, 9, 193, 145, 177, 137, 30,
+        ],
+        [
+            142, 118, 192, 79, 106, 86, 122, 98, 133, 200, 92, 17, 203, 195, 232, 141, 214, 22,
+            103, 255, 60, 51, 44, 88, 64, 130, 184, 251, 182, 235, 174, 33,
+        ],
+        [
+            136, 174, 114, 92, 123, 204, 141, 133, 43, 185, 26, 57, 221, 186, 86, 185, 32, 212, 97,
+            202, 226, 129, 224, 47, 143, 83, 70, 209, 87, 203, 198, 21,
+        ],
+        [
+            59, 223, 14, 205, 86, 189, 127, 244, 44, 140, 133, 52, 255, 246, 253, 24, 44, 25, 191,
+            198, 49, 247, 200, 84, 150, 16, 205, 200, 110, 226, 60, 51,
+        ],
+        [
+            196, 65, 164, 48, 29, 211, 202, 47, 236, 1, 149, 74, 82, 175, 50, 154, 47, 128, 24,
+            144, 152, 172, 164, 95, 48, 1, 175, 159, 21, 247, 184, 45,
+        ],
+    ],
+    [
+        [
+            113, 63, 185, 131, 212, 136, 143, 154, 164, 166, 141, 78, 33, 22, 153, 205, 188, 108,
+            173, 204, 209, 27, 18, 248, 69, 250, 136, 134, 86, 66, 2, 25,
+        ],
+        [
+            81, 213, 197, 160, 99, 146, 255, 95, 58, 208, 199, 37, 174, 131, 30, 27, 44, 119, 238,
+            23, 8, 85, 177, 30, 23, 198, 236, 206, 160, 196, 192, 37,
+        ],
+        [
+            137, 140, 108, 240, 119, 166, 103, 173, 83, 168, 239, 88, 58, 195, 143, 255, 23, 197,
+            34, 204, 167, 220, 180, 119, 136, 63, 224, 235, 87, 32, 22, 19,
+        ],
+        [
+            9, 120, 1, 228, 172, 242, 68, 238, 34, 31, 73, 46, 221, 161, 229, 216, 212, 51, 236,
+            60, 129, 118, 235, 30, 173, 98, 105, 92, 38, 48, 179, 63,
+        ],
+        [
+            101, 254, 224, 108, 2, 7, 51, 58, 155, 127, 90, 231, 44, 99, 139, 228, 104, 107, 248,
+            235, 10, 231, 131, 133, 26, 9, 5, 238, 79, 173, 149, 53,
+        ],
+        [
+            173, 174, 13, 8, 187, 48, 186, 134, 32, 196, 154, 196, 109, 220, 41, 70, 235, 190, 7,
+            157, 94, 233, 100, 151, 26, 193, 252, 252, 204, 166, 215, 19,
+        ],
+        [
+            28, 95, 198, 85, 93, 171, 70, 119, 154, 50, 27, 16, 190, 246, 143, 130, 168, 183, 89,
+            119, 4, 58, 205, 161, 105, 28, 156, 158, 83, 20, 197, 49,
+        ],
+        [
+            113, 106, 199, 144, 147, 223, 231, 150, 7, 222, 112, 180, 120, 139, 99, 219, 8, 246,
+            89, 224, 255, 179, 139, 176, 16, 103, 178, 74, 156, 40, 204, 37,
+        ],
+    ],
+    [
+        [
+            38, 34, 221, 71, 220, 112, 148, 120, 84, 22, 39, 92, 53, 80, 244, 119, 64, 234, 90, 97,
+            135, 161, 115, 110, 22, 189, 44, 36, 23, 85, 38, 60,
+        ],
+        [
+            213, 170, 91, 62, 172, 9, 75, 190, 253, 21, 22, 180, 194, 51, 94, 46, 65, 244, 206,
+            220, 81, 152, 136, 195, 45, 33, 133, 242, 112, 223, 144, 7,
+        ],
+        [
+            29, 76, 103, 10, 234, 122, 243, 58, 113, 123, 43, 25, 116, 213, 214, 178, 247, 113,
+            135, 238, 148, 58, 116, 97, 83, 203, 1, 208, 121, 52, 38, 13,
+        ],
+        [
+            23, 152, 157, 192, 12, 28, 52, 28, 155, 182, 184, 142, 66, 105, 69, 154, 59, 92, 117,
+            37, 115, 67, 17, 111, 24, 253, 41, 147, 51, 203, 39, 46,
+        ],
+        [
+            255, 207, 178, 103, 215, 12, 12, 158, 83, 240, 123, 146, 137, 235, 116, 25, 102, 144,
+            56, 182, 234, 251, 238, 201, 56, 41, 137, 96, 239, 216, 162, 34,
+        ],
+        [
+            148, 146, 139, 236, 159, 116, 15, 54, 141, 119, 201, 163, 202, 166, 244, 120, 14, 220,
+            191, 209, 31, 121, 208, 243, 120, 106, 102, 3, 129, 135, 29, 36,
+        ],
+        [
+            80, 37, 232, 226, 149, 80, 204, 156, 22, 11, 19, 34, 221, 211, 204, 75, 173, 150, 68,
+            253, 109, 0, 156, 187, 182, 100, 79, 74, 250, 255, 2, 62,
+        ],
+        [
+            155, 207, 110, 75, 63, 173, 133, 240, 21, 108, 245, 233, 80, 114, 0, 221, 114, 148, 5,
+            141, 127, 163, 96, 9, 253, 75, 91, 74, 137, 126, 94, 59,
+        ],
+    ],
+    [
+        [
+            235, 150, 195, 122, 252, 131, 216, 100, 102, 193, 233, 212, 79, 117, 151, 50, 246, 124,
+            8, 1, 247, 254, 208, 90, 247, 231, 240, 3, 86, 82, 75, 58,
+        ],
+        [
+            41, 49, 135, 170, 77, 96, 175, 215, 190, 42, 192, 62, 122, 169, 219, 246, 241, 143, 42,
+            119, 172, 141, 224, 125, 128, 75, 40, 154, 90, 163, 236, 9,
+        ],
+        [
+            206, 138, 164, 80, 147, 233, 240, 203, 111, 52, 22, 4, 38, 199, 245, 224, 203, 7, 14,
+            101, 212, 245, 30, 178, 177, 76, 194, 55, 43, 124, 155, 15,
+        ],
+        [
+            93, 30, 127, 191, 82, 233, 253, 219, 58, 221, 171, 157, 164, 145, 223, 121, 11, 152,
+            114, 200, 186, 150, 146, 87, 11, 48, 157, 85, 162, 36, 127, 8,
+        ],
+        [
+            95, 35, 201, 218, 74, 87, 138, 236, 183, 10, 32, 124, 190, 37, 47, 8, 136, 96, 117,
+            164, 62, 4, 77, 251, 40, 70, 172, 22, 186, 85, 29, 30,
+        ],
+        [
+            133, 23, 191, 232, 143, 103, 124, 29, 186, 196, 156, 170, 254, 197, 48, 205, 114, 31,
+            159, 157, 72, 26, 86, 115, 177, 128, 75, 211, 207, 109, 187, 40,
+        ],
+        [
+            129, 18, 198, 231, 250, 247, 65, 206, 32, 191, 126, 179, 56, 192, 26, 255, 151, 215,
+            103, 101, 40, 182, 203, 39, 100, 126, 202, 129, 173, 114, 208, 46,
+        ],
+        [
+            232, 235, 95, 198, 201, 94, 246, 81, 82, 104, 27, 178, 133, 79, 120, 171, 186, 171, 89,
+            233, 83, 28, 26, 22, 73, 23, 229, 8, 239, 200, 19, 27,
+        ],
+    ],
+    [
+        [
+            210, 71, 108, 215, 152, 32, 62, 185, 111, 112, 16, 4, 13, 227, 37, 156, 126, 114, 174,
+            38, 138, 245, 46, 170, 103, 115, 52, 113, 17, 234, 43, 34,
+        ],
+        [
+            210, 57, 57, 191, 219, 197, 56, 74, 5, 219, 191, 250, 122, 229, 56, 27, 192, 255, 143,
+            226, 134, 81, 82, 20, 228, 137, 206, 11, 203, 171, 194, 2,
+        ],
+        [
+            2, 78, 48, 95, 121, 129, 100, 124, 153, 168, 144, 254, 51, 226, 117, 249, 102, 93, 236,
+            209, 195, 58, 248, 173, 65, 106, 174, 194, 116, 87, 96, 57,
+        ],
+        [
+            241, 60, 10, 54, 190, 93, 196, 234, 99, 112, 230, 21, 141, 232, 41, 30, 250, 202, 112,
+            58, 179, 160, 100, 1, 209, 6, 141, 184, 63, 124, 137, 38,
+        ],
+        [
+            58, 21, 254, 142, 179, 18, 16, 67, 218, 111, 138, 59, 181, 29, 207, 76, 39, 76, 177,
+            120, 66, 64, 22, 178, 208, 40, 155, 120, 211, 84, 207, 21,
+        ],
+        [
+            174, 159, 153, 25, 242, 221, 84, 226, 243, 117, 42, 141, 100, 128, 90, 79, 193, 255,
+            179, 12, 31, 233, 79, 219, 143, 35, 12, 139, 59, 105, 189, 25,
+        ],
+        [
+            218, 68, 43, 94, 237, 195, 110, 37, 78, 248, 223, 30, 109, 144, 98, 161, 59, 211, 240,
+            180, 222, 116, 134, 183, 183, 166, 97, 66, 241, 222, 53, 18,
+        ],
+        [
+            245, 148, 191, 198, 199, 1, 171, 246, 89, 150, 11, 34, 102, 248, 117, 200, 37, 182,
+            103, 126, 70, 226, 218, 203, 11, 125, 121, 32, 18, 230, 243, 18,
+        ],
+    ],
+    [
+        [
+            255, 144, 208, 132, 52, 254, 117, 148, 102, 19, 153, 74, 6, 56, 14, 56, 0, 104, 184,
+            201, 182, 204, 210, 221, 180, 73, 127, 109, 252, 126, 24, 33,
+        ],
+        [
+            47, 153, 208, 169, 51, 149, 24, 41, 69, 165, 93, 193, 209, 66, 187, 89, 18, 193, 252,
+            170, 55, 6, 107, 77, 170, 123, 155, 171, 170, 110, 41, 13,
+        ],
+        [
+            168, 134, 125, 156, 48, 7, 212, 22, 221, 205, 11, 8, 187, 85, 52, 124, 218, 128, 24,
+            106, 88, 190, 65, 166, 34, 120, 160, 186, 50, 209, 57, 27,
+        ],
+        [
+            12, 230, 242, 95, 27, 44, 255, 38, 151, 185, 224, 26, 193, 155, 36, 198, 219, 80, 217,
+            78, 29, 16, 14, 160, 95, 137, 114, 98, 32, 28, 117, 16,
+        ],
+        [
+            19, 221, 130, 39, 185, 145, 167, 178, 12, 122, 174, 141, 109, 15, 59, 92, 217, 193, 8,
+            140, 77, 168, 45, 8, 43, 157, 217, 73, 46, 223, 82, 23,
+        ],
+        [
+            11, 218, 183, 42, 61, 124, 53, 72, 153, 53, 169, 155, 23, 136, 33, 20, 216, 88, 174,
+            50, 165, 138, 100, 174, 31, 151, 244, 200, 102, 163, 211, 45,
+        ],
+        [
+            40, 208, 183, 220, 99, 217, 214, 147, 127, 3, 227, 197, 133, 174, 177, 28, 89, 48, 195,
+            227, 55, 51, 79, 76, 252, 236, 8, 4, 74, 196, 102, 57,
+        ],
+        [
+            217, 25, 168, 251, 68, 161, 167, 143, 58, 241, 41, 14, 245, 47, 92, 191, 48, 195, 26,
+            228, 238, 180, 236, 8, 105, 149, 218, 119, 31, 56, 177, 56,
+        ],
+    ],
+    [
+        [
+            31, 98, 35, 5, 253, 140, 112, 75, 250, 170, 119, 208, 186, 119, 54, 79, 34, 155, 132,
+            123, 178, 111, 84, 7, 45, 231, 74, 65, 216, 235, 174, 16,
+        ],
+        [
+            197, 28, 157, 33, 185, 182, 123, 128, 223, 137, 177, 196, 237, 219, 169, 53, 32, 100,
+            251, 238, 92, 182, 118, 231, 8, 2, 229, 32, 143, 187, 243, 11,
+        ],
+        [
+            53, 49, 78, 10, 50, 233, 255, 107, 193, 56, 21, 50, 236, 45, 145, 145, 147, 62, 44,
+            111, 70, 71, 175, 53, 203, 148, 52, 67, 100, 19, 26, 3,
+        ],
+        [
+            161, 103, 224, 78, 117, 78, 234, 195, 253, 216, 60, 242, 228, 181, 84, 115, 93, 60, 78,
+            177, 233, 239, 55, 51, 87, 29, 91, 73, 160, 22, 171, 28,
+        ],
+        [
+            106, 94, 122, 161, 158, 123, 47, 190, 164, 230, 236, 39, 112, 190, 86, 119, 220, 119,
+            136, 5, 205, 153, 136, 144, 195, 36, 8, 31, 156, 77, 197, 7,
+        ],
+        [
+            84, 189, 79, 111, 149, 133, 18, 214, 25, 129, 102, 3, 255, 214, 137, 117, 145, 219,
+            122, 117, 251, 157, 67, 103, 112, 156, 101, 60, 196, 24, 228, 9,
+        ],
+        [
+            221, 128, 184, 19, 209, 70, 94, 235, 168, 5, 193, 131, 176, 112, 12, 162, 60, 52, 126,
+            165, 78, 106, 205, 247, 39, 129, 58, 66, 183, 218, 92, 34,
+        ],
+        [
+            37, 90, 158, 71, 194, 0, 179, 71, 130, 53, 224, 14, 163, 30, 186, 122, 241, 4, 160,
+            224, 157, 159, 58, 19, 72, 213, 191, 207, 214, 79, 97, 7,
+        ],
+    ],
+    [
+        [
+            17, 77, 140, 150, 199, 124, 25, 200, 242, 238, 45, 141, 236, 5, 130, 183, 54, 235, 128,
+            228, 212, 54, 81, 133, 39, 76, 208, 190, 12, 132, 119, 11,
+        ],
+        [
+            107, 215, 140, 18, 7, 122, 91, 92, 146, 39, 245, 151, 85, 68, 229, 96, 154, 146, 33,
+            101, 126, 111, 236, 5, 204, 109, 157, 205, 70, 121, 217, 0,
+        ],
+        [
+            70, 94, 179, 106, 229, 170, 170, 47, 55, 65, 230, 43, 24, 82, 194, 151, 155, 198, 165,
+            155, 205, 28, 14, 104, 20, 71, 197, 140, 250, 71, 125, 17,
+        ],
+        [
+            106, 252, 217, 245, 224, 67, 205, 117, 213, 48, 7, 135, 102, 189, 26, 18, 4, 54, 28,
+            251, 124, 84, 93, 0, 40, 66, 115, 117, 204, 79, 228, 22,
+        ],
+        [
+            242, 35, 187, 88, 191, 59, 140, 236, 161, 109, 107, 209, 136, 246, 243, 27, 223, 98,
+            151, 100, 212, 119, 181, 232, 39, 21, 93, 43, 28, 54, 121, 28,
+        ],
+        [
+            71, 151, 100, 227, 73, 205, 19, 3, 130, 251, 173, 106, 89, 57, 39, 39, 122, 133, 165,
+            156, 3, 206, 44, 215, 128, 92, 207, 248, 158, 242, 254, 0,
+        ],
+        [
+            135, 68, 93, 82, 180, 183, 2, 251, 43, 188, 239, 107, 205, 155, 212, 29, 221, 31, 106,
+            214, 183, 206, 119, 193, 233, 125, 198, 221, 69, 92, 33, 62,
+        ],
+        [
+            30, 16, 32, 89, 21, 239, 233, 59, 207, 112, 12, 6, 215, 78, 169, 126, 167, 25, 242, 72,
+            91, 134, 70, 202, 21, 211, 175, 45, 241, 46, 126, 19,
+        ],
+    ],
+    [
+        [
+            239, 132, 33, 38, 102, 212, 72, 89, 11, 15, 97, 253, 10, 0, 7, 0, 193, 147, 176, 43,
+            213, 38, 141, 110, 55, 61, 127, 15, 217, 159, 199, 41,
+        ],
+        [
+            214, 253, 151, 31, 243, 238, 244, 4, 240, 234, 253, 169, 181, 192, 6, 57, 219, 163,
+            185, 123, 103, 228, 127, 129, 214, 214, 43, 225, 63, 75, 182, 53,
+        ],
+        [
+            32, 79, 73, 179, 13, 71, 33, 110, 122, 154, 127, 57, 134, 49, 208, 108, 5, 172, 153,
+            147, 192, 46, 212, 252, 33, 114, 20, 39, 244, 63, 96, 59,
+        ],
+        [
+            235, 135, 102, 44, 198, 110, 108, 192, 212, 172, 181, 10, 197, 131, 11, 220, 40, 83,
+            211, 8, 182, 147, 94, 90, 76, 129, 90, 194, 77, 213, 126, 55,
+        ],
+        [
+            134, 43, 3, 60, 183, 128, 197, 163, 170, 11, 127, 13, 12, 251, 24, 190, 45, 105, 181,
+            131, 97, 232, 88, 155, 212, 247, 110, 50, 247, 242, 78, 11,
+        ],
+        [
+            107, 99, 135, 228, 201, 238, 31, 15, 7, 159, 61, 63, 134, 124, 107, 227, 233, 133, 57,
+            126, 106, 183, 205, 196, 222, 230, 130, 213, 208, 64, 99, 20,
+        ],
+        [
+            136, 191, 122, 221, 143, 194, 149, 206, 210, 101, 122, 87, 41, 73, 39, 0, 203, 249,
+            255, 105, 157, 67, 114, 227, 107, 204, 112, 134, 137, 141, 192, 40,
+        ],
+        [
+            53, 251, 202, 6, 165, 211, 68, 162, 219, 79, 119, 243, 221, 34, 46, 97, 240, 59, 81,
+            62, 192, 122, 250, 188, 247, 91, 173, 184, 16, 162, 228, 42,
+        ],
+    ],
+    [
+        [
+            207, 188, 203, 116, 227, 47, 15, 94, 109, 85, 244, 221, 60, 114, 166, 91, 220, 124,
+            217, 87, 15, 10, 223, 41, 201, 185, 195, 188, 26, 179, 0, 42,
+        ],
+        [
+            169, 222, 42, 237, 79, 30, 175, 161, 31, 217, 5, 161, 189, 73, 91, 163, 120, 84, 89,
+            232, 151, 51, 37, 39, 130, 149, 209, 68, 215, 4, 169, 47,
+        ],
+        [
+            227, 83, 192, 240, 71, 1, 222, 202, 123, 190, 215, 154, 182, 192, 122, 211, 174, 143,
+            187, 185, 69, 74, 141, 161, 31, 218, 147, 239, 72, 246, 120, 4,
+        ],
+        [
+            137, 27, 69, 79, 29, 209, 12, 234, 186, 93, 226, 104, 95, 211, 110, 68, 30, 100, 164,
+            236, 245, 45, 0, 29, 59, 22, 176, 196, 130, 184, 217, 27,
+        ],
+        [
+            26, 62, 9, 239, 203, 49, 46, 166, 96, 81, 208, 1, 72, 8, 94, 190, 19, 237, 242, 213,
+            15, 157, 31, 240, 39, 122, 94, 8, 171, 16, 159, 28,
+        ],
+        [
+            191, 213, 238, 242, 171, 187, 13, 177, 204, 117, 29, 64, 237, 164, 165, 236, 142, 220,
+            60, 63, 61, 57, 146, 155, 58, 206, 128, 15, 73, 253, 188, 9,
+        ],
+        [
+            184, 134, 37, 128, 143, 22, 57, 204, 184, 89, 54, 236, 170, 123, 109, 20, 114, 172,
+            121, 243, 37, 217, 219, 38, 71, 67, 51, 49, 13, 31, 79, 36,
+        ],
+        [
+            223, 219, 38, 58, 177, 64, 40, 107, 71, 58, 211, 112, 35, 73, 154, 52, 180, 252, 153,
+            239, 154, 5, 210, 15, 116, 102, 250, 226, 17, 79, 2, 0,
+        ],
+    ],
+    [
+        [
+            86, 108, 216, 34, 154, 182, 132, 72, 67, 161, 20, 204, 92, 218, 109, 31, 146, 215, 73,
+            85, 186, 63, 178, 83, 74, 63, 115, 248, 215, 203, 131, 31,
+        ],
+        [
+            68, 146, 252, 110, 32, 80, 133, 118, 93, 102, 51, 124, 114, 76, 141, 132, 243, 175, 35,
+            2, 151, 83, 90, 137, 188, 59, 33, 45, 144, 241, 77, 59,
+        ],
+        [
+            199, 168, 25, 87, 146, 91, 7, 45, 196, 18, 34, 77, 121, 59, 49, 171, 218, 111, 121,
+            144, 67, 17, 163, 60, 41, 184, 123, 35, 107, 158, 204, 42,
+        ],
+        [
+            81, 34, 122, 126, 218, 213, 211, 210, 132, 204, 13, 131, 85, 187, 237, 173, 173, 72,
+            210, 134, 63, 167, 97, 139, 126, 221, 254, 217, 147, 76, 48, 36,
+        ],
+        [
+            212, 17, 78, 238, 49, 160, 218, 85, 86, 250, 124, 160, 63, 77, 80, 153, 20, 197, 70,
+            88, 8, 92, 28, 108, 34, 214, 138, 234, 220, 191, 6, 42,
+        ],
+        [
+            121, 219, 39, 10, 207, 76, 241, 73, 84, 53, 101, 47, 129, 70, 245, 235, 249, 253, 118,
+            193, 89, 63, 27, 201, 16, 103, 193, 199, 206, 22, 188, 4,
+        ],
+        [
+            32, 135, 154, 90, 39, 88, 11, 21, 28, 118, 172, 80, 157, 117, 227, 194, 95, 21, 193,
+            244, 134, 48, 20, 209, 135, 51, 22, 226, 172, 35, 170, 32,
+        ],
+        [
+            43, 221, 151, 128, 141, 210, 207, 198, 229, 190, 198, 122, 10, 175, 184, 64, 55, 212,
+            147, 45, 67, 156, 35, 168, 175, 147, 89, 191, 250, 231, 99, 62,
+        ],
+    ],
+    [
+        [
+            243, 133, 64, 65, 91, 46, 144, 139, 138, 115, 84, 217, 89, 221, 170, 23, 2, 205, 113,
+            152, 46, 159, 81, 126, 63, 7, 137, 165, 116, 51, 40, 11,
+        ],
+        [
+            109, 94, 105, 247, 230, 206, 57, 126, 225, 207, 205, 33, 125, 9, 155, 204, 119, 58,
+            221, 209, 138, 16, 203, 96, 189, 26, 45, 92, 3, 36, 48, 9,
+        ],
+        [
+            254, 204, 107, 219, 208, 50, 17, 142, 30, 121, 107, 37, 62, 51, 152, 159, 53, 134, 215,
+            86, 73, 214, 25, 237, 64, 69, 212, 112, 191, 153, 246, 44,
+        ],
+        [
+            99, 148, 101, 253, 131, 235, 77, 241, 22, 107, 74, 217, 103, 175, 136, 203, 69, 61,
+            221, 193, 214, 8, 102, 175, 83, 121, 218, 128, 206, 159, 25, 23,
+        ],
+        [
+            111, 64, 79, 248, 50, 79, 231, 252, 52, 151, 216, 18, 195, 193, 18, 109, 126, 164, 43,
+            102, 23, 39, 211, 247, 10, 29, 172, 211, 182, 31, 245, 13,
+        ],
+        [
+            3, 86, 28, 24, 154, 35, 148, 150, 230, 16, 146, 211, 24, 184, 121, 224, 111, 36, 128,
+            45, 67, 71, 97, 234, 173, 172, 203, 44, 219, 134, 47, 22,
+        ],
+        [
+            62, 127, 47, 223, 234, 188, 44, 197, 94, 21, 47, 75, 38, 226, 46, 82, 214, 220, 94,
+            205, 176, 252, 226, 208, 85, 7, 191, 28, 217, 158, 83, 13,
+        ],
+        [
+            96, 225, 72, 121, 83, 10, 196, 69, 54, 68, 161, 232, 58, 131, 166, 200, 208, 196, 134,
+            18, 85, 234, 37, 244, 239, 42, 197, 250, 60, 118, 37, 4,
+        ],
+    ],
+    [
+        [
+            100, 154, 11, 180, 188, 20, 222, 46, 29, 254, 104, 147, 128, 159, 209, 246, 95, 79, 6,
+            158, 211, 154, 74, 202, 45, 8, 199, 59, 67, 89, 31, 36,
+        ],
+        [
+            59, 218, 141, 48, 106, 107, 91, 63, 20, 57, 51, 66, 177, 136, 20, 151, 170, 87, 166,
+            122, 26, 134, 223, 101, 144, 92, 104, 253, 117, 115, 198, 48,
+        ],
+        [
+            6, 234, 190, 8, 45, 67, 212, 14, 215, 229, 43, 147, 98, 177, 241, 248, 142, 172, 9, 27,
+            42, 223, 91, 180, 75, 219, 159, 182, 205, 5, 110, 1,
+        ],
+        [
+            139, 41, 229, 150, 94, 20, 37, 79, 90, 170, 31, 21, 106, 60, 63, 40, 225, 44, 156, 254,
+            70, 77, 196, 147, 128, 130, 180, 151, 41, 75, 158, 33,
+        ],
+        [
+            139, 111, 3, 218, 41, 122, 103, 61, 112, 106, 17, 227, 74, 93, 112, 194, 70, 21, 101,
+            116, 48, 164, 124, 20, 170, 241, 78, 147, 89, 107, 12, 37,
+        ],
+        [
+            135, 10, 234, 73, 60, 129, 112, 145, 165, 224, 166, 60, 131, 105, 236, 222, 39, 59,
+            227, 161, 113, 246, 119, 103, 24, 162, 5, 55, 245, 221, 19, 11,
+        ],
+        [
+            79, 204, 186, 89, 248, 255, 253, 34, 43, 99, 55, 53, 162, 27, 15, 51, 206, 113, 185,
+            154, 102, 75, 154, 80, 115, 51, 169, 203, 111, 57, 253, 15,
+        ],
+        [
+            241, 70, 150, 96, 14, 181, 110, 248, 200, 60, 151, 32, 56, 236, 1, 160, 207, 239, 204,
+            96, 180, 20, 114, 141, 204, 79, 222, 42, 233, 93, 86, 4,
+        ],
+    ],
+    [
+        [
+            133, 42, 108, 146, 9, 233, 159, 193, 246, 146, 58, 201, 35, 57, 51, 79, 31, 110, 185,
+            80, 198, 123, 90, 212, 230, 44, 5, 125, 69, 245, 133, 8,
+        ],
+        [
+            229, 72, 83, 102, 213, 54, 195, 176, 137, 144, 238, 18, 31, 192, 209, 173, 251, 255,
+            140, 176, 244, 204, 213, 213, 163, 231, 2, 147, 229, 252, 61, 45,
+        ],
+        [
+            71, 127, 51, 61, 4, 61, 154, 153, 6, 190, 184, 184, 246, 195, 97, 120, 73, 143, 135,
+            84, 154, 23, 119, 144, 120, 38, 55, 242, 88, 180, 27, 19,
+        ],
+        [
+            75, 52, 60, 75, 156, 190, 238, 12, 77, 247, 183, 176, 64, 156, 173, 107, 27, 154, 11,
+            252, 58, 116, 8, 98, 74, 169, 127, 147, 196, 228, 107, 32,
+        ],
+        [
+            148, 235, 145, 32, 227, 216, 189, 85, 81, 174, 122, 74, 29, 157, 193, 199, 131, 131,
+            215, 200, 40, 168, 165, 204, 234, 158, 148, 212, 238, 62, 183, 18,
+        ],
+        [
+            154, 181, 252, 201, 70, 152, 237, 106, 10, 69, 44, 207, 168, 233, 5, 104, 110, 68, 207,
+            203, 85, 242, 149, 191, 125, 123, 34, 246, 37, 233, 36, 44,
+        ],
+        [
+            211, 231, 62, 59, 210, 172, 126, 106, 177, 163, 74, 94, 201, 226, 57, 90, 138, 213,
+            177, 154, 128, 11, 241, 24, 122, 183, 243, 189, 220, 68, 234, 7,
+        ],
+        [
+            56, 235, 124, 129, 101, 66, 101, 95, 248, 36, 151, 219, 71, 118, 126, 54, 161, 159,
+            130, 62, 236, 239, 129, 232, 227, 45, 180, 127, 204, 15, 191, 41,
+        ],
+    ],
+    [
+        [
+            58, 7, 140, 180, 114, 238, 131, 202, 207, 64, 62, 207, 210, 71, 132, 77, 52, 11, 81,
+            73, 215, 25, 106, 0, 178, 254, 238, 8, 223, 22, 116, 55,
+        ],
+        [
+            223, 58, 89, 147, 0, 219, 48, 190, 127, 47, 35, 39, 120, 55, 84, 162, 29, 15, 239, 70,
+            105, 190, 179, 179, 161, 77, 68, 62, 74, 245, 2, 0,
+        ],
+        [
+            119, 42, 91, 164, 172, 227, 112, 30, 94, 87, 129, 68, 103, 131, 240, 24, 28, 173, 61,
+            51, 123, 176, 110, 204, 238, 162, 214, 123, 67, 43, 77, 61,
+        ],
+        [
+            234, 137, 155, 145, 183, 245, 247, 147, 139, 194, 96, 144, 204, 154, 159, 94, 97, 150,
+            59, 129, 113, 213, 0, 184, 73, 215, 212, 114, 207, 10, 31, 30,
+        ],
+        [
+            42, 90, 73, 230, 113, 98, 152, 59, 179, 244, 222, 133, 142, 178, 172, 225, 57, 210, 95,
+            96, 162, 203, 63, 245, 108, 203, 167, 94, 125, 54, 162, 58,
+        ],
+        [
+            240, 196, 76, 186, 213, 181, 225, 51, 212, 188, 155, 194, 158, 183, 234, 110, 181, 97,
+            93, 116, 201, 160, 208, 67, 218, 169, 210, 210, 11, 33, 212, 7,
+        ],
+        [
+            68, 105, 62, 121, 37, 69, 237, 189, 194, 25, 197, 246, 64, 28, 252, 193, 66, 110, 140,
+            255, 218, 86, 133, 31, 198, 252, 165, 237, 73, 22, 15, 60,
+        ],
+        [
+            210, 33, 63, 244, 100, 40, 160, 16, 81, 38, 120, 211, 176, 13, 155, 255, 113, 214, 10,
+            73, 204, 178, 186, 189, 207, 91, 142, 112, 152, 74, 42, 17,
+        ],
+    ],
+    [
+        [
+            65, 190, 3, 42, 54, 225, 195, 120, 113, 25, 19, 40, 59, 78, 139, 70, 53, 104, 84, 240,
+            93, 38, 233, 201, 29, 218, 43, 14, 16, 238, 1, 3,
+        ],
+        [
+            94, 85, 50, 4, 205, 48, 215, 233, 248, 185, 111, 219, 70, 219, 70, 1, 2, 75, 187, 253,
+            5, 210, 180, 219, 163, 252, 251, 224, 27, 158, 205, 35,
+        ],
+        [
+            145, 45, 21, 30, 132, 8, 164, 37, 104, 121, 240, 200, 86, 247, 240, 166, 128, 202, 205,
+            12, 252, 53, 120, 60, 180, 106, 148, 158, 111, 18, 126, 40,
+        ],
+        [
+            53, 47, 28, 89, 156, 147, 71, 72, 158, 73, 217, 107, 73, 132, 49, 120, 42, 30, 182,
+            213, 150, 114, 90, 223, 215, 71, 92, 251, 21, 142, 200, 0,
+        ],
+        [
+            21, 187, 146, 84, 186, 214, 154, 62, 147, 23, 51, 157, 249, 201, 137, 79, 187, 184,
+            129, 149, 53, 241, 85, 154, 207, 58, 122, 229, 14, 246, 154, 7,
+        ],
+        [
+            71, 228, 225, 174, 83, 69, 84, 246, 152, 5, 21, 70, 130, 252, 61, 162, 9, 28, 95, 31,
+            115, 251, 224, 36, 219, 224, 124, 5, 249, 147, 129, 52,
+        ],
+        [
+            99, 84, 54, 113, 53, 228, 153, 72, 229, 33, 119, 65, 136, 127, 25, 133, 51, 92, 140,
+            149, 34, 123, 82, 14, 117, 69, 132, 126, 250, 215, 130, 47,
+        ],
+        [
+            158, 108, 91, 43, 179, 230, 110, 55, 17, 10, 220, 62, 145, 238, 91, 226, 158, 83, 51,
+            101, 189, 13, 71, 78, 184, 42, 243, 17, 201, 181, 140, 11,
+        ],
+    ],
+    [
+        [
+            194, 241, 4, 81, 158, 51, 209, 249, 35, 115, 149, 92, 55, 91, 174, 251, 202, 167, 82,
+            52, 253, 32, 43, 121, 206, 222, 164, 43, 248, 220, 122, 12,
+        ],
+        [
+            99, 154, 211, 41, 184, 45, 22, 111, 12, 195, 48, 243, 13, 253, 200, 229, 24, 205, 149,
+            165, 148, 197, 251, 209, 182, 19, 159, 152, 94, 232, 156, 4,
+        ],
+        [
+            0, 100, 188, 149, 90, 163, 159, 111, 0, 244, 218, 168, 18, 83, 125, 222, 206, 144, 226,
+            94, 118, 121, 221, 75, 14, 17, 94, 243, 202, 242, 253, 27,
+        ],
+        [
+            240, 46, 2, 247, 182, 224, 144, 79, 143, 124, 223, 40, 51, 131, 25, 96, 132, 163, 48,
+            24, 133, 37, 180, 92, 120, 224, 236, 140, 128, 1, 189, 40,
+        ],
+        [
+            119, 221, 95, 119, 141, 17, 159, 165, 72, 131, 170, 156, 220, 250, 5, 111, 209, 99, 9,
+            38, 230, 163, 50, 149, 172, 255, 56, 203, 136, 161, 48, 21,
+        ],
+        [
+            116, 77, 45, 31, 77, 80, 76, 36, 84, 112, 49, 174, 101, 182, 116, 15, 15, 242, 172,
+            150, 114, 212, 46, 120, 187, 34, 145, 212, 0, 158, 239, 36,
+        ],
+        [
+            234, 22, 164, 104, 165, 197, 122, 166, 202, 123, 178, 133, 187, 135, 235, 194, 206,
+            219, 58, 179, 30, 245, 147, 110, 141, 124, 206, 1, 148, 209, 101, 4,
+        ],
+        [
+            242, 73, 177, 217, 169, 198, 140, 205, 216, 73, 28, 38, 255, 90, 182, 211, 219, 192,
+            108, 40, 247, 162, 57, 211, 108, 105, 233, 230, 138, 168, 92, 63,
+        ],
+    ],
+    [
+        [
+            173, 95, 90, 146, 119, 75, 98, 69, 145, 115, 239, 18, 233, 216, 75, 241, 80, 100, 96,
+            37, 221, 214, 199, 94, 228, 153, 135, 100, 155, 155, 216, 2,
+        ],
+        [
+            150, 79, 236, 24, 163, 31, 70, 201, 143, 232, 204, 60, 220, 195, 134, 231, 11, 12, 144,
+            0, 193, 32, 61, 209, 239, 139, 83, 197, 150, 64, 148, 59,
+        ],
+        [
+            131, 108, 159, 162, 122, 223, 253, 251, 52, 16, 253, 139, 103, 224, 54, 119, 11, 188,
+            86, 103, 124, 47, 156, 143, 37, 30, 210, 118, 193, 210, 84, 34,
+        ],
+        [
+            43, 173, 230, 170, 177, 240, 16, 6, 56, 146, 203, 212, 135, 78, 45, 36, 207, 117, 225,
+            215, 190, 197, 187, 20, 2, 61, 52, 114, 11, 136, 193, 10,
+        ],
+        [
+            13, 77, 75, 121, 118, 79, 49, 124, 11, 205, 176, 65, 144, 48, 236, 222, 67, 180, 109,
+            168, 43, 77, 168, 27, 2, 222, 123, 135, 11, 103, 6, 22,
+        ],
+        [
+            214, 232, 233, 41, 25, 210, 118, 90, 85, 18, 143, 98, 244, 50, 251, 225, 101, 170, 229,
+            58, 207, 175, 175, 233, 208, 5, 52, 27, 209, 230, 169, 31,
+        ],
+        [
+            129, 131, 148, 184, 182, 36, 79, 246, 200, 243, 153, 36, 187, 3, 93, 208, 186, 153,
+            173, 154, 142, 119, 197, 27, 57, 122, 240, 85, 105, 206, 17, 50,
+        ],
+        [
+            241, 75, 9, 108, 156, 226, 162, 237, 221, 84, 169, 167, 11, 25, 191, 150, 233, 203, 61,
+            64, 95, 176, 96, 79, 39, 143, 83, 172, 33, 238, 82, 10,
+        ],
+    ],
+    [
+        [
+            249, 64, 46, 51, 246, 45, 133, 33, 65, 155, 225, 183, 65, 194, 179, 149, 118, 11, 201,
+            218, 20, 8, 7, 98, 19, 54, 211, 59, 226, 174, 181, 30,
+        ],
+        [
+            78, 52, 33, 54, 74, 139, 14, 51, 38, 151, 205, 116, 207, 250, 247, 61, 67, 250, 220,
+            248, 184, 120, 243, 69, 81, 143, 46, 190, 151, 25, 209, 7,
+        ],
+        [
+            117, 44, 92, 67, 68, 250, 114, 230, 86, 95, 107, 31, 210, 141, 32, 48, 43, 80, 5, 102,
+            72, 39, 215, 25, 246, 7, 20, 183, 170, 130, 203, 40,
+        ],
+        [
+            248, 52, 236, 99, 245, 230, 43, 187, 159, 164, 252, 246, 45, 35, 142, 166, 203, 99,
+            243, 180, 131, 234, 104, 61, 198, 159, 140, 136, 45, 120, 20, 55,
+        ],
+        [
+            197, 252, 78, 164, 142, 18, 216, 81, 116, 199, 65, 0, 35, 6, 95, 105, 67, 83, 162, 56,
+            231, 180, 36, 75, 119, 162, 211, 252, 162, 108, 87, 7,
+        ],
+        [
+            67, 43, 183, 166, 242, 83, 163, 0, 72, 129, 240, 196, 178, 90, 3, 33, 144, 139, 80,
+            173, 176, 17, 119, 45, 223, 30, 157, 64, 198, 232, 11, 8,
+        ],
+        [
+            236, 216, 184, 177, 72, 88, 104, 89, 162, 120, 101, 134, 110, 49, 69, 253, 105, 171,
+            109, 13, 86, 253, 38, 253, 135, 146, 38, 248, 160, 88, 12, 6,
+        ],
+        [
+            87, 44, 230, 170, 54, 93, 209, 204, 5, 240, 55, 102, 218, 228, 105, 33, 171, 112, 84,
+            227, 131, 207, 119, 121, 115, 23, 26, 179, 8, 111, 253, 3,
+        ],
+    ],
+    [
+        [
+            100, 157, 27, 13, 92, 74, 138, 226, 131, 160, 172, 107, 65, 128, 45, 170, 169, 90, 155,
+            25, 167, 166, 136, 89, 232, 252, 203, 155, 70, 6, 182, 32,
+        ],
+        [
+            159, 197, 68, 197, 232, 244, 71, 69, 251, 104, 129, 20, 231, 138, 116, 216, 109, 77,
+            148, 92, 134, 5, 135, 227, 146, 116, 246, 221, 236, 104, 83, 26,
+        ],
+        [
+            149, 158, 108, 59, 214, 113, 52, 126, 198, 118, 186, 164, 142, 109, 2, 1, 124, 233, 0,
+            84, 130, 41, 182, 172, 37, 217, 212, 126, 222, 145, 202, 4,
+        ],
+        [
+            165, 213, 205, 252, 170, 149, 33, 185, 40, 200, 132, 94, 128, 188, 2, 243, 141, 30,
+            126, 208, 209, 234, 78, 69, 70, 69, 205, 216, 154, 51, 86, 10,
+        ],
+        [
+            153, 122, 142, 76, 38, 219, 144, 223, 227, 232, 9, 56, 225, 5, 191, 92, 100, 51, 155,
+            107, 205, 202, 74, 170, 103, 189, 30, 159, 68, 61, 202, 13,
+        ],
+        [
+            134, 38, 203, 216, 65, 140, 214, 94, 24, 224, 177, 151, 140, 7, 41, 124, 40, 41, 1, 51,
+            59, 89, 30, 130, 108, 87, 127, 214, 162, 183, 246, 22,
+        ],
+        [
+            187, 193, 99, 160, 244, 73, 163, 177, 215, 30, 255, 31, 114, 223, 43, 85, 84, 226, 220,
+            164, 67, 0, 238, 185, 249, 231, 198, 124, 172, 35, 149, 60,
+        ],
+        [
+            45, 186, 4, 252, 12, 240, 229, 162, 18, 91, 136, 107, 201, 227, 77, 8, 175, 8, 198,
+            103, 34, 168, 221, 193, 176, 128, 72, 93, 195, 26, 172, 3,
+        ],
+    ],
+    [
+        [
+            91, 46, 86, 226, 133, 67, 28, 86, 126, 29, 234, 89, 216, 65, 179, 40, 36, 237, 114,
+            194, 111, 26, 250, 5, 252, 24, 131, 155, 178, 92, 10, 11,
+        ],
+        [
+            67, 208, 75, 127, 148, 190, 127, 53, 27, 219, 88, 183, 139, 50, 201, 19, 250, 158, 128,
+            169, 150, 92, 76, 50, 89, 132, 55, 122, 219, 124, 16, 11,
+        ],
+        [
+            140, 159, 86, 156, 195, 225, 138, 7, 78, 241, 245, 181, 207, 152, 209, 52, 121, 95, 35,
+            65, 101, 20, 101, 88, 9, 130, 39, 135, 135, 74, 9, 1,
+        ],
+        [
+            253, 181, 175, 91, 246, 184, 164, 214, 93, 116, 66, 47, 57, 58, 32, 0, 45, 28, 106, 79,
+            214, 62, 176, 226, 255, 241, 191, 101, 224, 247, 9, 29,
+        ],
+        [
+            233, 235, 128, 119, 38, 23, 25, 207, 212, 163, 148, 62, 177, 73, 115, 228, 237, 228,
+            174, 133, 58, 20, 187, 192, 111, 239, 218, 119, 132, 233, 147, 28,
+        ],
+        [
+            102, 191, 62, 245, 131, 141, 134, 94, 211, 147, 155, 226, 34, 19, 146, 177, 54, 235,
+            23, 15, 176, 169, 246, 97, 178, 252, 103, 39, 105, 178, 162, 51,
+        ],
+        [
+            7, 50, 217, 129, 106, 152, 234, 81, 110, 193, 51, 82, 62, 50, 179, 59, 89, 116, 206,
+            117, 204, 73, 35, 115, 85, 176, 39, 231, 60, 170, 116, 47,
+        ],
+        [
+            75, 196, 187, 39, 241, 38, 201, 59, 230, 232, 134, 175, 19, 66, 71, 243, 254, 64, 242,
+            14, 160, 95, 24, 130, 33, 51, 183, 120, 216, 162, 193, 32,
+        ],
+    ],
+    [
+        [
+            80, 139, 231, 43, 42, 117, 92, 23, 23, 28, 89, 92, 0, 118, 252, 26, 197, 165, 70, 191,
+            196, 203, 169, 72, 141, 197, 13, 103, 216, 197, 184, 13,
+        ],
+        [
+            171, 152, 143, 232, 240, 5, 166, 106, 27, 18, 57, 228, 232, 129, 41, 209, 77, 30, 210,
+            74, 209, 33, 45, 74, 163, 209, 238, 156, 80, 77, 158, 15,
+        ],
+        [
+            96, 136, 152, 220, 61, 122, 124, 180, 101, 158, 18, 10, 19, 70, 9, 13, 228, 26, 191,
+            48, 235, 92, 34, 90, 241, 180, 94, 57, 155, 70, 144, 42,
+        ],
+        [
+            179, 252, 92, 89, 59, 253, 147, 136, 110, 199, 105, 197, 235, 217, 159, 216, 232, 248,
+            23, 191, 13, 61, 223, 38, 104, 236, 204, 89, 222, 220, 240, 61,
+        ],
+        [
+            217, 91, 66, 69, 68, 44, 20, 147, 18, 87, 88, 66, 142, 170, 173, 93, 77, 15, 82, 94,
+            26, 144, 31, 224, 164, 45, 203, 84, 24, 139, 14, 23,
+        ],
+        [
+            61, 139, 126, 42, 167, 228, 59, 215, 79, 212, 163, 10, 48, 212, 246, 81, 180, 25, 156,
+            101, 209, 148, 57, 138, 78, 49, 193, 14, 101, 158, 189, 55,
+        ],
+        [
+            159, 6, 43, 236, 178, 210, 174, 111, 168, 153, 94, 23, 184, 185, 247, 237, 207, 133,
+            190, 220, 41, 179, 2, 74, 193, 144, 244, 247, 129, 121, 73, 41,
+        ],
+        [
+            73, 81, 174, 197, 26, 219, 123, 128, 63, 219, 134, 33, 79, 124, 244, 18, 207, 94, 155,
+            181, 248, 239, 24, 32, 62, 101, 30, 162, 200, 148, 17, 59,
+        ],
+    ],
+    [
+        [
+            21, 11, 152, 124, 138, 60, 93, 36, 7, 60, 214, 84, 45, 154, 172, 52, 35, 153, 17, 9,
+            203, 118, 210, 182, 10, 95, 57, 145, 126, 8, 5, 42,
+        ],
+        [
+            71, 101, 167, 15, 118, 90, 63, 8, 124, 156, 180, 28, 65, 161, 49, 86, 131, 205, 169,
+            69, 84, 231, 193, 228, 214, 212, 145, 49, 194, 101, 242, 29,
+        ],
+        [
+            7, 34, 97, 70, 161, 98, 83, 134, 241, 74, 132, 136, 64, 214, 70, 28, 200, 90, 12, 111,
+            86, 123, 8, 251, 164, 2, 58, 177, 195, 146, 182, 21,
+        ],
+        [
+            164, 230, 11, 145, 185, 76, 76, 97, 238, 93, 215, 40, 162, 213, 31, 242, 100, 67, 139,
+            137, 118, 188, 204, 150, 253, 175, 94, 60, 210, 138, 9, 32,
+        ],
+        [
+            108, 48, 162, 95, 78, 234, 152, 114, 166, 28, 255, 6, 184, 151, 224, 174, 128, 95, 140,
+            153, 230, 85, 248, 241, 64, 210, 182, 139, 32, 250, 41, 32,
+        ],
+        [
+            154, 194, 221, 96, 105, 253, 154, 78, 151, 82, 214, 33, 56, 41, 200, 160, 107, 92, 70,
+            233, 152, 50, 229, 239, 233, 141, 44, 101, 191, 20, 37, 8,
+        ],
+        [
+            87, 249, 195, 51, 136, 74, 211, 133, 253, 248, 97, 146, 179, 28, 66, 93, 36, 153, 66,
+            239, 16, 69, 135, 216, 35, 151, 73, 200, 68, 9, 32, 13,
+        ],
+        [
+            184, 229, 139, 19, 69, 111, 241, 199, 83, 10, 138, 24, 203, 217, 63, 209, 81, 219, 24,
+            37, 49, 241, 79, 9, 138, 240, 48, 107, 29, 46, 55, 4,
+        ],
+    ],
+    [
+        [
+            222, 18, 27, 133, 130, 121, 92, 228, 235, 31, 219, 249, 77, 230, 39, 140, 187, 30, 119,
+            112, 172, 56, 28, 218, 242, 51, 136, 143, 49, 179, 27, 25,
+        ],
+        [
+            2, 99, 67, 80, 156, 33, 160, 127, 126, 26, 10, 176, 146, 164, 212, 207, 172, 162, 165,
+            143, 181, 41, 188, 59, 128, 2, 140, 243, 6, 191, 47, 50,
+        ],
+        [
+            80, 146, 67, 231, 83, 95, 75, 75, 198, 78, 97, 42, 71, 41, 87, 178, 100, 226, 240, 179,
+            51, 94, 229, 133, 55, 227, 162, 161, 155, 14, 160, 51,
+        ],
+        [
+            184, 82, 151, 20, 59, 61, 157, 47, 88, 40, 125, 76, 132, 98, 13, 220, 157, 43, 174,
+            135, 113, 131, 232, 159, 134, 112, 131, 61, 229, 56, 187, 31,
+        ],
+        [
+            103, 159, 75, 105, 229, 173, 33, 147, 222, 198, 216, 51, 158, 126, 253, 155, 209, 71,
+            97, 213, 227, 160, 59, 169, 255, 4, 158, 246, 202, 37, 41, 55,
+        ],
+        [
+            70, 44, 245, 153, 162, 248, 57, 34, 159, 124, 179, 43, 174, 127, 126, 62, 239, 103, 71,
+            230, 168, 6, 1, 249, 202, 249, 58, 64, 50, 84, 166, 49,
+        ],
+        [
+            24, 11, 169, 224, 141, 175, 98, 63, 54, 81, 30, 229, 141, 220, 77, 48, 160, 66, 234,
+            155, 148, 214, 56, 206, 162, 192, 93, 21, 37, 68, 223, 20,
+        ],
+        [
+            12, 206, 30, 240, 150, 168, 254, 195, 216, 250, 139, 93, 74, 204, 177, 206, 186, 183,
+            11, 216, 8, 219, 75, 55, 158, 241, 27, 121, 158, 126, 89, 37,
+        ],
+    ],
+    [
+        [
+            126, 244, 161, 84, 141, 63, 108, 50, 97, 130, 49, 143, 229, 206, 114, 37, 17, 244, 30,
+            5, 5, 65, 90, 231, 102, 176, 228, 110, 42, 206, 59, 7,
+        ],
+        [
+            171, 250, 110, 27, 19, 51, 98, 97, 147, 101, 9, 200, 255, 24, 103, 220, 213, 243, 63,
+            100, 129, 94, 129, 237, 192, 53, 44, 54, 81, 150, 163, 49,
+        ],
+        [
+            207, 235, 227, 240, 49, 150, 106, 200, 76, 72, 90, 46, 38, 172, 83, 132, 225, 207, 25,
+            95, 29, 88, 178, 163, 130, 5, 41, 2, 35, 56, 242, 5,
+        ],
+        [
+            150, 235, 254, 218, 81, 133, 9, 45, 179, 227, 128, 87, 212, 188, 250, 90, 210, 132, 40,
+            16, 118, 238, 125, 165, 27, 219, 224, 239, 34, 178, 94, 39,
+        ],
+        [
+            104, 208, 155, 48, 14, 222, 119, 22, 228, 238, 214, 217, 249, 175, 117, 113, 143, 198,
+            122, 25, 87, 198, 212, 60, 57, 28, 213, 213, 91, 130, 12, 38,
+        ],
+        [
+            201, 85, 96, 155, 78, 135, 127, 238, 44, 177, 100, 78, 247, 155, 175, 223, 170, 205,
+            210, 140, 238, 45, 94, 95, 244, 19, 5, 32, 43, 139, 214, 48,
+        ],
+        [
+            249, 240, 53, 215, 1, 213, 54, 151, 143, 107, 23, 223, 161, 19, 249, 213, 102, 137,
+            228, 184, 2, 78, 237, 177, 23, 49, 218, 85, 55, 62, 215, 20,
+        ],
+        [
+            96, 201, 226, 19, 157, 94, 105, 10, 170, 204, 220, 109, 21, 94, 224, 26, 132, 56, 89,
+            173, 176, 87, 145, 180, 174, 90, 228, 72, 206, 159, 48, 45,
+        ],
+    ],
+    [
+        [
+            113, 76, 55, 16, 2, 198, 219, 166, 149, 128, 101, 84, 86, 171, 12, 5, 131, 54, 86, 113,
+            196, 45, 45, 11, 118, 194, 183, 17, 58, 196, 31, 10,
+        ],
+        [
+            172, 125, 221, 60, 54, 229, 101, 125, 102, 252, 27, 200, 177, 87, 186, 178, 60, 164,
+            109, 220, 15, 121, 133, 105, 9, 238, 96, 11, 36, 59, 9, 30,
+        ],
+        [
+            183, 108, 71, 108, 153, 232, 119, 177, 137, 136, 110, 110, 3, 219, 142, 115, 255, 120,
+            114, 121, 148, 17, 97, 46, 218, 123, 63, 232, 214, 16, 147, 41,
+        ],
+        [
+            173, 231, 224, 166, 86, 142, 54, 70, 179, 225, 252, 2, 244, 75, 83, 118, 10, 20, 156,
+            247, 202, 76, 237, 164, 61, 66, 13, 122, 141, 245, 173, 44,
+        ],
+        [
+            108, 239, 77, 249, 18, 117, 63, 85, 58, 86, 175, 32, 30, 153, 255, 100, 84, 29, 190,
+            31, 229, 96, 136, 89, 133, 204, 51, 185, 137, 216, 164, 20,
+        ],
+        [
+            59, 220, 40, 70, 32, 241, 241, 203, 179, 230, 248, 247, 43, 169, 181, 150, 156, 133,
+            147, 122, 253, 248, 32, 86, 24, 136, 5, 111, 169, 164, 215, 56,
+        ],
+        [
+            98, 209, 76, 142, 205, 4, 81, 26, 135, 170, 10, 201, 252, 197, 53, 94, 254, 105, 146,
+            81, 160, 43, 12, 97, 126, 94, 64, 186, 207, 201, 68, 56,
+        ],
+        [
+            201, 190, 210, 46, 86, 174, 226, 108, 128, 111, 77, 178, 211, 163, 110, 111, 62, 61,
+            153, 63, 216, 125, 9, 48, 127, 164, 43, 106, 64, 147, 129, 57,
+        ],
+    ],
+    [
+        [
+            255, 240, 106, 196, 39, 210, 196, 148, 144, 253, 91, 141, 51, 240, 165, 236, 108, 169,
+            69, 223, 235, 23, 160, 124, 2, 48, 44, 255, 167, 134, 112, 57,
+        ],
+        [
+            124, 68, 80, 75, 141, 236, 245, 254, 13, 176, 89, 204, 71, 154, 156, 56, 117, 53, 210,
+            213, 47, 41, 149, 84, 28, 125, 7, 64, 72, 79, 177, 38,
+        ],
+        [
+            61, 71, 251, 185, 213, 100, 253, 192, 180, 4, 68, 195, 221, 45, 113, 19, 246, 221, 88,
+            76, 165, 136, 14, 114, 197, 112, 100, 42, 89, 152, 91, 5,
+        ],
+        [
+            42, 226, 253, 216, 123, 40, 107, 109, 166, 66, 10, 217, 98, 141, 231, 69, 243, 226, 46,
+            114, 123, 117, 180, 33, 18, 136, 116, 160, 222, 248, 162, 11,
+        ],
+        [
+            34, 220, 174, 123, 63, 171, 95, 68, 127, 18, 102, 15, 252, 35, 255, 63, 161, 228, 65,
+            19, 218, 181, 243, 128, 113, 164, 244, 94, 67, 79, 147, 56,
+        ],
+        [
+            209, 56, 211, 64, 210, 9, 133, 186, 36, 212, 196, 71, 50, 82, 23, 95, 76, 75, 155, 87,
+            37, 250, 226, 170, 148, 75, 75, 60, 138, 186, 40, 37,
+        ],
+        [
+            220, 163, 215, 26, 244, 235, 220, 165, 176, 44, 86, 158, 231, 85, 52, 25, 149, 119,
+            195, 200, 49, 40, 140, 123, 192, 128, 4, 162, 187, 171, 90, 9,
+        ],
+        [
+            225, 7, 90, 21, 111, 77, 213, 55, 198, 207, 93, 231, 90, 26, 147, 18, 234, 190, 254,
+            163, 41, 26, 104, 7, 234, 53, 80, 54, 100, 142, 14, 48,
+        ],
+    ],
+    [
+        [
+            103, 49, 41, 63, 34, 209, 87, 117, 41, 188, 144, 57, 24, 205, 210, 209, 219, 178, 104,
+            6, 21, 18, 145, 241, 202, 73, 252, 3, 136, 255, 16, 36,
+        ],
+        [
+            126, 141, 157, 92, 89, 211, 65, 46, 189, 255, 55, 182, 185, 222, 254, 89, 158, 15, 249,
+            216, 37, 35, 39, 19, 124, 89, 81, 246, 62, 174, 73, 47,
+        ],
+        [
+            224, 229, 224, 38, 180, 80, 136, 160, 85, 100, 115, 226, 227, 6, 130, 184, 52, 91, 188,
+            70, 78, 48, 79, 177, 179, 45, 224, 193, 145, 116, 220, 6,
+        ],
+        [
+            240, 89, 82, 251, 24, 123, 117, 60, 200, 187, 3, 66, 226, 200, 129, 133, 208, 196, 24,
+            206, 61, 85, 56, 87, 169, 251, 87, 152, 109, 102, 86, 10,
+        ],
+        [
+            219, 120, 137, 97, 77, 109, 105, 128, 53, 170, 171, 221, 142, 205, 205, 243, 140, 73,
+            150, 192, 58, 248, 218, 204, 10, 22, 80, 10, 145, 140, 23, 7,
+        ],
+        [
+            97, 62, 153, 212, 157, 7, 197, 172, 187, 181, 216, 197, 154, 222, 232, 25, 162, 34,
+            115, 231, 82, 58, 59, 23, 244, 49, 112, 205, 47, 222, 162, 59,
+        ],
+        [
+            67, 55, 27, 153, 104, 30, 226, 63, 37, 218, 100, 170, 15, 229, 63, 147, 159, 80, 136,
+            152, 199, 99, 121, 227, 100, 146, 169, 44, 76, 162, 53, 15,
+        ],
+        [
+            44, 140, 65, 137, 229, 185, 246, 138, 6, 180, 68, 32, 124, 9, 94, 142, 211, 153, 126,
+            82, 82, 90, 75, 97, 238, 201, 97, 201, 147, 106, 102, 45,
+        ],
+    ],
+    [
+        [
+            154, 78, 13, 175, 144, 144, 181, 254, 86, 176, 140, 173, 101, 106, 138, 95, 233, 97,
+            107, 87, 110, 243, 211, 168, 113, 244, 0, 143, 106, 163, 103, 49,
+        ],
+        [
+            113, 86, 6, 11, 223, 129, 113, 20, 87, 6, 149, 189, 142, 165, 81, 44, 77, 211, 189,
+            211, 155, 63, 227, 198, 235, 245, 238, 220, 145, 222, 131, 0,
+        ],
+        [
+            239, 34, 158, 133, 28, 172, 184, 246, 211, 95, 144, 164, 222, 37, 57, 217, 243, 104,
+            162, 216, 71, 180, 230, 178, 65, 102, 237, 102, 33, 27, 64, 29,
+        ],
+        [
+            189, 2, 47, 8, 126, 160, 149, 81, 2, 192, 56, 35, 16, 216, 1, 185, 78, 101, 205, 142,
+            248, 26, 138, 78, 19, 227, 132, 76, 211, 101, 143, 36,
+        ],
+        [
+            9, 244, 15, 160, 155, 180, 106, 160, 138, 78, 142, 12, 224, 162, 60, 80, 62, 44, 201,
+            200, 85, 40, 69, 242, 28, 63, 119, 55, 55, 1, 187, 48,
+        ],
+        [
+            230, 52, 100, 80, 122, 148, 40, 24, 136, 15, 108, 33, 241, 1, 150, 97, 30, 12, 157, 14,
+            247, 86, 117, 42, 218, 238, 93, 130, 148, 50, 76, 9,
+        ],
+        [
+            204, 114, 216, 224, 115, 175, 115, 198, 33, 211, 13, 20, 101, 254, 128, 182, 219, 99,
+            49, 136, 34, 104, 131, 176, 57, 127, 217, 238, 87, 74, 149, 41,
+        ],
+        [
+            252, 28, 170, 15, 158, 141, 226, 80, 34, 113, 118, 234, 44, 161, 4, 180, 81, 42, 246,
+            29, 137, 65, 208, 21, 184, 245, 74, 248, 211, 96, 223, 42,
+        ],
+    ],
+    [
+        [
+            99, 73, 57, 46, 43, 160, 177, 18, 52, 120, 173, 225, 193, 243, 102, 8, 209, 4, 27, 211,
+            18, 8, 26, 208, 100, 9, 229, 162, 211, 226, 100, 8,
+        ],
+        [
+            89, 148, 122, 14, 37, 150, 254, 164, 84, 248, 1, 148, 99, 59, 136, 157, 50, 211, 11,
+            131, 52, 223, 87, 90, 47, 199, 113, 72, 114, 117, 27, 16,
+        ],
+        [
+            54, 224, 16, 104, 41, 121, 198, 104, 97, 16, 200, 211, 177, 6, 144, 107, 166, 233, 125,
+            93, 81, 144, 234, 166, 100, 27, 56, 198, 215, 110, 191, 8,
+        ],
+        [
+            120, 49, 186, 107, 174, 192, 21, 80, 127, 55, 201, 252, 245, 21, 234, 199, 197, 0, 127,
+            79, 165, 21, 163, 227, 148, 6, 201, 182, 212, 74, 85, 60,
+        ],
+        [
+            32, 206, 13, 185, 245, 1, 247, 16, 12, 178, 178, 51, 66, 213, 224, 253, 141, 191, 123,
+            215, 206, 96, 242, 167, 21, 252, 216, 198, 200, 113, 138, 23,
+        ],
+        [
+            214, 146, 47, 116, 13, 140, 129, 199, 78, 218, 105, 47, 184, 183, 37, 176, 138, 116,
+            29, 152, 211, 234, 236, 128, 221, 19, 16, 180, 5, 31, 38, 52,
+        ],
+        [
+            53, 22, 251, 54, 25, 10, 180, 124, 152, 90, 251, 137, 121, 218, 152, 77, 36, 39, 110,
+            131, 149, 164, 253, 218, 195, 159, 8, 17, 163, 180, 48, 54,
+        ],
+        [
+            79, 222, 175, 84, 68, 207, 171, 218, 9, 173, 100, 196, 4, 209, 60, 217, 95, 220, 33,
+            210, 226, 131, 0, 236, 216, 61, 217, 44, 220, 178, 178, 22,
+        ],
+    ],
+    [
+        [
+            107, 105, 93, 217, 54, 82, 75, 109, 105, 29, 83, 80, 248, 146, 161, 232, 150, 85, 45,
+            8, 3, 22, 194, 208, 55, 67, 26, 125, 7, 148, 129, 37,
+        ],
+        [
+            29, 95, 48, 152, 141, 85, 76, 104, 69, 146, 226, 5, 55, 108, 221, 235, 242, 85, 175,
+            127, 92, 127, 161, 193, 47, 225, 40, 74, 235, 163, 158, 32,
+        ],
+        [
+            227, 244, 182, 232, 84, 114, 73, 222, 186, 128, 35, 45, 188, 135, 174, 135, 186, 197,
+            229, 218, 9, 125, 136, 27, 131, 145, 163, 103, 77, 34, 43, 33,
+        ],
+        [
+            195, 68, 118, 100, 210, 211, 111, 3, 155, 3, 156, 224, 132, 248, 95, 134, 129, 212, 28,
+            125, 239, 111, 143, 163, 225, 20, 226, 153, 87, 30, 30, 19,
+        ],
+        [
+            142, 241, 239, 103, 84, 171, 22, 132, 95, 60, 94, 44, 167, 21, 215, 45, 59, 120, 47, 0,
+            131, 89, 140, 239, 48, 106, 10, 231, 219, 66, 142, 39,
+        ],
+        [
+            198, 220, 99, 166, 20, 56, 174, 133, 222, 155, 196, 81, 30, 232, 17, 138, 240, 13, 195,
+            17, 216, 102, 91, 153, 195, 251, 189, 122, 157, 150, 7, 5,
+        ],
+        [
+            13, 239, 171, 80, 251, 163, 115, 201, 8, 163, 26, 149, 243, 103, 167, 155, 194, 39,
+            226, 136, 8, 190, 219, 117, 165, 246, 254, 248, 156, 148, 87, 30,
+        ],
+        [
+            104, 157, 26, 155, 195, 128, 35, 82, 221, 218, 54, 250, 194, 68, 185, 187, 136, 145,
+            79, 166, 157, 58, 86, 9, 247, 239, 103, 175, 218, 226, 137, 19,
+        ],
+    ],
+    [
+        [
+            76, 222, 120, 1, 103, 34, 213, 86, 193, 6, 130, 96, 165, 215, 27, 94, 77, 215, 179,
+            150, 125, 6, 171, 65, 24, 8, 61, 139, 250, 144, 31, 31,
+        ],
+        [
+            134, 23, 114, 162, 211, 19, 156, 246, 34, 170, 93, 193, 218, 142, 88, 4, 248, 192, 40,
+            118, 53, 217, 131, 17, 168, 129, 200, 206, 4, 196, 235, 20,
+        ],
+        [
+            181, 35, 108, 194, 46, 27, 101, 145, 74, 17, 49, 227, 145, 110, 34, 95, 112, 64, 9,
+            241, 215, 205, 232, 135, 35, 194, 234, 141, 80, 6, 89, 37,
+        ],
+        [
+            184, 177, 62, 50, 1, 237, 106, 151, 102, 29, 108, 160, 83, 99, 212, 156, 164, 218, 16,
+            75, 167, 201, 62, 156, 91, 188, 199, 8, 195, 74, 196, 28,
+        ],
+        [
+            17, 89, 59, 91, 140, 2, 44, 45, 192, 13, 217, 135, 26, 70, 171, 156, 117, 198, 240, 1,
+            218, 24, 48, 197, 51, 45, 56, 194, 94, 94, 51, 40,
+        ],
+        [
+            158, 122, 35, 55, 187, 102, 254, 58, 132, 214, 105, 217, 35, 171, 216, 216, 152, 172,
+            126, 106, 107, 206, 127, 41, 164, 33, 165, 71, 247, 92, 143, 14,
+        ],
+        [
+            120, 71, 69, 120, 156, 189, 181, 43, 176, 232, 130, 201, 238, 12, 22, 58, 133, 25, 155,
+            146, 9, 188, 14, 153, 53, 156, 38, 212, 195, 134, 95, 7,
+        ],
+        [
+            157, 96, 229, 115, 219, 58, 67, 16, 224, 9, 44, 240, 209, 213, 218, 68, 247, 237, 57,
+            28, 228, 198, 146, 99, 140, 224, 145, 231, 119, 223, 118, 48,
+        ],
+    ],
+    [
+        [
+            213, 203, 57, 233, 35, 161, 91, 226, 27, 23, 16, 217, 18, 194, 126, 205, 148, 142, 190,
+            53, 58, 59, 253, 86, 70, 219, 212, 125, 153, 224, 6, 9,
+        ],
+        [
+            155, 137, 19, 65, 34, 199, 103, 121, 244, 81, 27, 130, 6, 116, 234, 102, 44, 199, 4,
+            19, 80, 173, 42, 110, 70, 143, 130, 125, 159, 106, 236, 39,
+        ],
+        [
+            122, 10, 176, 127, 83, 36, 22, 172, 72, 92, 139, 199, 151, 96, 70, 203, 154, 81, 240,
+            22, 29, 6, 119, 248, 46, 45, 132, 169, 166, 30, 90, 22,
+        ],
+        [
+            26, 13, 5, 45, 142, 71, 73, 137, 254, 3, 246, 242, 178, 98, 165, 194, 210, 131, 252,
+            15, 162, 70, 72, 143, 67, 161, 142, 16, 152, 79, 80, 61,
+        ],
+        [
+            19, 13, 118, 209, 24, 155, 176, 112, 201, 217, 188, 152, 118, 164, 78, 191, 232, 62,
+            216, 249, 142, 131, 126, 180, 90, 1, 150, 49, 78, 96, 75, 31,
+        ],
+        [
+            26, 242, 23, 163, 221, 125, 25, 226, 219, 86, 141, 10, 85, 252, 140, 215, 130, 142,
+            159, 229, 169, 103, 118, 242, 183, 177, 223, 236, 90, 61, 233, 55,
+        ],
+        [
+            10, 208, 13, 145, 192, 166, 233, 172, 141, 58, 55, 234, 155, 69, 41, 247, 190, 194, 81,
+            157, 179, 146, 197, 146, 251, 187, 218, 11, 60, 144, 237, 58,
+        ],
+        [
+            240, 206, 55, 40, 176, 39, 191, 197, 6, 96, 136, 229, 46, 153, 100, 47, 62, 60, 214,
+            146, 206, 84, 114, 69, 26, 45, 157, 102, 40, 72, 91, 28,
+        ],
+    ],
+    [
+        [
+            43, 161, 254, 90, 188, 123, 114, 200, 17, 242, 129, 50, 94, 237, 177, 114, 185, 147,
+            161, 2, 170, 118, 128, 252, 95, 241, 149, 1, 49, 204, 201, 59,
+        ],
+        [
+            122, 217, 240, 150, 125, 123, 87, 55, 111, 22, 243, 27, 215, 190, 60, 91, 116, 68, 96,
+            197, 18, 223, 203, 149, 121, 151, 239, 104, 126, 189, 132, 5,
+        ],
+        [
+            121, 57, 216, 35, 130, 22, 227, 222, 233, 39, 46, 77, 2, 167, 64, 44, 59, 50, 64, 48,
+            204, 175, 113, 77, 238, 211, 91, 23, 98, 243, 90, 14,
+        ],
+        [
+            90, 181, 29, 181, 36, 252, 218, 201, 12, 206, 43, 100, 88, 235, 1, 117, 73, 51, 208,
+            240, 30, 133, 64, 151, 40, 151, 233, 173, 66, 146, 212, 22,
+        ],
+        [
+            85, 121, 202, 247, 237, 164, 240, 148, 100, 11, 187, 140, 202, 183, 225, 244, 244, 207,
+            198, 197, 209, 28, 26, 58, 202, 83, 113, 214, 181, 78, 222, 41,
+        ],
+        [
+            180, 231, 142, 160, 125, 98, 227, 7, 143, 3, 69, 171, 93, 224, 114, 156, 125, 17, 181,
+            18, 0, 115, 49, 15, 15, 34, 81, 186, 185, 117, 184, 45,
+        ],
+        [
+            66, 196, 173, 255, 17, 239, 59, 139, 157, 5, 120, 107, 8, 206, 0, 133, 65, 23, 102, 73,
+            131, 86, 172, 35, 99, 27, 238, 142, 167, 99, 224, 29,
+        ],
+        [
+            87, 234, 21, 65, 77, 92, 71, 146, 253, 59, 106, 150, 122, 185, 113, 28, 4, 114, 34,
+            172, 19, 85, 11, 106, 118, 8, 215, 10, 29, 202, 109, 56,
+        ],
+    ],
+    [
+        [
+            204, 119, 78, 168, 255, 167, 165, 38, 156, 195, 194, 168, 90, 72, 102, 86, 246, 39, 82,
+            194, 147, 87, 28, 41, 208, 198, 242, 252, 144, 50, 134, 56,
+        ],
+        [
+            89, 168, 85, 62, 11, 67, 112, 59, 249, 65, 53, 37, 136, 204, 207, 189, 131, 40, 126,
+            21, 99, 186, 208, 46, 113, 66, 38, 133, 191, 32, 81, 56,
+        ],
+        [
+            59, 65, 171, 57, 1, 188, 192, 11, 248, 82, 69, 83, 153, 237, 51, 109, 39, 20, 9, 93,
+            219, 37, 123, 106, 255, 133, 228, 77, 110, 85, 86, 12,
+        ],
+        [
+            220, 71, 156, 57, 178, 156, 43, 207, 183, 201, 186, 96, 127, 23, 55, 116, 0, 21, 158,
+            116, 250, 252, 242, 252, 253, 8, 81, 42, 200, 209, 23, 7,
+        ],
+        [
+            152, 231, 245, 77, 243, 134, 75, 92, 238, 114, 243, 21, 28, 94, 81, 19, 67, 215, 7,
+            155, 62, 252, 92, 137, 224, 23, 81, 196, 41, 120, 45, 31,
+        ],
+        [
+            88, 86, 212, 205, 201, 188, 34, 237, 245, 154, 110, 89, 224, 247, 247, 53, 251, 109,
+            178, 217, 100, 216, 154, 42, 254, 31, 115, 102, 112, 207, 154, 22,
+        ],
+        [
+            227, 134, 163, 64, 117, 82, 220, 198, 240, 28, 86, 151, 125, 205, 72, 70, 186, 42, 142,
+            20, 138, 239, 66, 221, 249, 247, 198, 177, 8, 226, 29, 62,
+        ],
+        [
+            90, 225, 249, 139, 11, 83, 149, 107, 183, 239, 107, 72, 71, 9, 216, 151, 44, 79, 63,
+            221, 56, 152, 219, 200, 185, 214, 29, 93, 202, 116, 166, 47,
+        ],
+    ],
+    [
+        [
+            228, 25, 203, 131, 72, 219, 121, 155, 238, 243, 156, 151, 72, 209, 251, 93, 197, 32,
+            228, 115, 26, 13, 254, 51, 249, 232, 59, 57, 46, 81, 82, 55,
+        ],
+        [
+            78, 128, 240, 159, 205, 127, 13, 51, 72, 25, 28, 151, 53, 55, 190, 169, 240, 58, 252,
+            198, 109, 187, 49, 106, 176, 72, 218, 91, 146, 127, 109, 52,
+        ],
+        [
+            240, 19, 94, 221, 101, 239, 76, 3, 110, 229, 128, 156, 74, 63, 200, 43, 28, 157, 127,
+            164, 254, 141, 137, 22, 137, 103, 214, 120, 105, 215, 42, 31,
+        ],
+        [
+            218, 88, 204, 255, 86, 211, 52, 151, 180, 145, 248, 64, 196, 167, 68, 246, 119, 170,
+            90, 21, 120, 194, 93, 3, 12, 145, 33, 24, 91, 50, 116, 19,
+        ],
+        [
+            148, 134, 195, 91, 255, 65, 238, 49, 239, 141, 111, 9, 94, 137, 1, 152, 121, 224, 25,
+            170, 66, 243, 161, 10, 215, 177, 161, 60, 36, 9, 75, 20,
+        ],
+        [
+            184, 101, 185, 170, 85, 116, 0, 47, 172, 203, 160, 18, 109, 98, 250, 162, 255, 213,
+            245, 164, 53, 87, 62, 30, 115, 76, 152, 245, 10, 217, 214, 43,
+        ],
+        [
+            111, 35, 157, 172, 67, 135, 219, 111, 41, 3, 184, 115, 38, 234, 133, 124, 249, 119,
+            160, 155, 221, 133, 28, 122, 176, 170, 19, 151, 104, 79, 85, 51,
+        ],
+        [
+            181, 239, 109, 111, 233, 193, 199, 150, 223, 181, 215, 54, 196, 216, 251, 35, 21, 10,
+            6, 44, 120, 98, 170, 250, 231, 90, 99, 189, 50, 189, 19, 60,
+        ],
+    ],
+    [
+        [
+            40, 12, 194, 46, 247, 222, 58, 252, 87, 215, 47, 154, 251, 107, 52, 13, 128, 24, 213,
+            13, 195, 35, 191, 235, 68, 93, 189, 189, 252, 252, 167, 24,
+        ],
+        [
+            38, 105, 73, 132, 137, 11, 105, 85, 16, 244, 223, 124, 93, 158, 118, 81, 177, 159, 1,
+            69, 113, 28, 17, 50, 79, 17, 28, 208, 35, 218, 212, 25,
+        ],
+        [
+            76, 198, 33, 207, 191, 213, 53, 3, 200, 102, 78, 223, 93, 40, 61, 123, 106, 236, 185,
+            131, 214, 106, 80, 153, 115, 228, 225, 71, 31, 140, 113, 57,
+        ],
+        [
+            214, 79, 107, 70, 115, 107, 122, 106, 0, 239, 195, 79, 62, 111, 169, 40, 204, 73, 217,
+            164, 131, 200, 145, 244, 54, 62, 40, 186, 182, 44, 248, 23,
+        ],
+        [
+            242, 254, 205, 32, 90, 19, 103, 203, 170, 64, 162, 67, 182, 13, 75, 230, 28, 194, 34,
+            240, 204, 197, 198, 219, 78, 74, 72, 236, 11, 206, 32, 46,
+        ],
+        [
+            152, 23, 75, 211, 211, 169, 146, 12, 223, 100, 17, 184, 84, 89, 76, 194, 212, 15, 78,
+            245, 16, 56, 80, 218, 164, 120, 72, 246, 19, 28, 116, 28,
+        ],
+        [
+            74, 5, 117, 170, 126, 141, 251, 3, 12, 184, 128, 229, 31, 147, 243, 221, 79, 250, 241,
+            162, 81, 183, 76, 169, 164, 167, 195, 37, 111, 145, 214, 51,
+        ],
+        [
+            71, 243, 35, 221, 187, 141, 25, 109, 57, 157, 201, 174, 128, 157, 50, 164, 198, 111,
+            235, 150, 36, 252, 127, 131, 76, 90, 169, 91, 222, 26, 201, 6,
+        ],
+    ],
+    [
+        [
+            213, 238, 194, 146, 94, 121, 106, 132, 205, 35, 198, 73, 149, 185, 16, 238, 184, 3, 36,
+            162, 134, 91, 66, 150, 229, 202, 155, 71, 36, 244, 31, 18,
+        ],
+        [
+            114, 6, 174, 91, 0, 229, 59, 73, 36, 11, 45, 159, 105, 145, 142, 172, 102, 234, 203,
+            14, 22, 138, 48, 23, 194, 172, 140, 16, 65, 157, 119, 42,
+        ],
+        [
+            242, 66, 98, 57, 205, 27, 28, 168, 126, 141, 54, 41, 206, 178, 252, 138, 29, 199, 151,
+            192, 196, 176, 69, 22, 45, 185, 84, 64, 200, 215, 82, 19,
+        ],
+        [
+            50, 189, 133, 225, 116, 129, 14, 69, 207, 164, 13, 13, 250, 172, 186, 243, 244, 127,
+            185, 242, 1, 232, 229, 7, 170, 2, 10, 118, 44, 62, 29, 63,
+        ],
+        [
+            134, 20, 230, 242, 6, 31, 69, 27, 232, 249, 58, 102, 106, 148, 1, 224, 138, 125, 66,
+            223, 207, 45, 175, 235, 24, 152, 126, 136, 97, 120, 156, 26,
+        ],
+        [
+            206, 69, 248, 240, 137, 112, 230, 15, 55, 6, 9, 161, 176, 42, 199, 151, 177, 92, 10,
+            76, 38, 22, 158, 101, 58, 246, 68, 112, 208, 242, 223, 31,
+        ],
+        [
+            9, 185, 158, 109, 54, 50, 170, 95, 16, 229, 14, 119, 229, 171, 193, 73, 205, 98, 125,
+            87, 205, 43, 194, 214, 47, 121, 248, 196, 175, 28, 71, 18,
+        ],
+        [
+            166, 6, 125, 245, 207, 115, 3, 74, 255, 191, 88, 77, 92, 152, 122, 155, 252, 125, 203,
+            199, 219, 49, 179, 95, 85, 60, 174, 52, 41, 46, 122, 57,
+        ],
+    ],
+    [
+        [
+            215, 197, 242, 170, 148, 210, 105, 84, 28, 246, 154, 48, 114, 11, 47, 104, 198, 29, 79,
+            121, 85, 192, 83, 226, 104, 221, 36, 167, 10, 230, 9, 44,
+        ],
+        [
+            38, 101, 71, 27, 235, 109, 39, 104, 162, 219, 2, 102, 130, 75, 149, 224, 208, 106, 36,
+            35, 126, 77, 200, 120, 248, 70, 189, 98, 147, 56, 196, 33,
+        ],
+        [
+            43, 254, 197, 70, 182, 96, 195, 113, 109, 4, 37, 174, 86, 22, 45, 155, 149, 166, 47,
+            41, 235, 155, 60, 143, 107, 202, 246, 174, 99, 81, 182, 37,
+        ],
+        [
+            204, 133, 71, 6, 137, 11, 247, 251, 200, 146, 71, 8, 134, 144, 30, 115, 180, 230, 96,
+            37, 126, 8, 96, 241, 78, 104, 95, 13, 231, 243, 172, 0,
+        ],
+        [
+            19, 155, 215, 193, 160, 46, 131, 2, 59, 139, 238, 194, 57, 178, 12, 140, 3, 243, 64,
+            237, 112, 40, 81, 250, 124, 241, 12, 117, 130, 116, 254, 40,
+        ],
+        [
+            137, 165, 36, 240, 128, 172, 202, 88, 237, 127, 204, 45, 69, 177, 242, 25, 100, 146,
+            236, 198, 192, 92, 215, 18, 69, 4, 245, 4, 1, 10, 43, 52,
+        ],
+        [
+            3, 158, 53, 179, 240, 14, 146, 201, 182, 180, 67, 159, 181, 33, 165, 229, 217, 247, 33,
+            27, 167, 152, 110, 131, 85, 43, 206, 221, 226, 250, 123, 23,
+        ],
+        [
+            229, 92, 186, 133, 10, 181, 79, 50, 154, 37, 248, 83, 217, 228, 33, 159, 103, 149, 143,
+            33, 8, 183, 95, 113, 63, 102, 224, 73, 156, 251, 98, 37,
+        ],
+    ],
+    [
+        [
+            247, 74, 62, 239, 168, 228, 32, 209, 222, 23, 144, 181, 39, 128, 160, 88, 15, 214, 249,
+            216, 183, 217, 18, 79, 72, 114, 111, 253, 179, 143, 225, 48,
+        ],
+        [
+            40, 173, 194, 76, 40, 155, 20, 143, 254, 219, 116, 6, 91, 177, 224, 105, 43, 133, 196,
+            4, 242, 87, 73, 118, 249, 232, 136, 223, 69, 92, 238, 24,
+        ],
+        [
+            158, 53, 48, 117, 246, 139, 220, 102, 7, 22, 194, 218, 130, 117, 34, 146, 1, 31, 87,
+            139, 146, 132, 54, 142, 233, 247, 135, 110, 93, 193, 162, 4,
+        ],
+        [
+            134, 20, 204, 240, 252, 33, 224, 236, 178, 214, 249, 240, 220, 247, 221, 114, 160, 124,
+            110, 165, 70, 19, 132, 54, 244, 161, 6, 225, 112, 95, 154, 35,
+        ],
+        [
+            106, 46, 14, 29, 169, 215, 146, 162, 206, 26, 154, 130, 201, 59, 173, 149, 168, 203,
+            105, 14, 148, 193, 107, 250, 103, 1, 79, 222, 39, 226, 119, 0,
+        ],
+        [
+            234, 18, 118, 231, 14, 17, 232, 50, 40, 103, 81, 18, 143, 207, 224, 52, 62, 0, 102,
+            217, 182, 165, 217, 235, 230, 180, 13, 68, 2, 18, 40, 40,
+        ],
+        [
+            75, 123, 96, 255, 76, 203, 72, 134, 54, 123, 235, 42, 70, 231, 240, 72, 34, 190, 255,
+            142, 236, 80, 214, 84, 148, 191, 46, 41, 191, 9, 249, 49,
+        ],
+        [
+            81, 106, 77, 254, 224, 248, 86, 236, 175, 228, 23, 60, 12, 21, 156, 181, 16, 96, 194,
+            65, 43, 72, 84, 213, 169, 23, 235, 175, 17, 160, 101, 40,
+        ],
+    ],
+    [
+        [
+            255, 202, 243, 40, 59, 189, 65, 206, 36, 58, 220, 59, 32, 50, 215, 251, 250, 199, 144,
+            167, 60, 147, 124, 145, 211, 191, 40, 253, 45, 57, 65, 62,
+        ],
+        [
+            216, 142, 222, 34, 95, 115, 109, 52, 136, 6, 48, 112, 55, 233, 214, 65, 188, 63, 63,
+            188, 30, 125, 219, 228, 96, 39, 2, 232, 216, 236, 36, 24,
+        ],
+        [
+            49, 214, 133, 89, 17, 232, 45, 73, 222, 70, 231, 0, 157, 115, 175, 226, 197, 144, 161,
+            60, 109, 17, 96, 18, 208, 193, 222, 87, 232, 106, 203, 63,
+        ],
+        [
+            222, 205, 168, 98, 100, 250, 218, 211, 223, 20, 227, 19, 84, 40, 183, 228, 179, 174,
+            193, 9, 150, 36, 54, 235, 138, 48, 91, 217, 90, 2, 68, 12,
+        ],
+        [
+            248, 49, 13, 135, 252, 104, 109, 197, 85, 103, 6, 201, 50, 224, 152, 124, 78, 50, 46,
+            240, 133, 124, 241, 227, 25, 35, 192, 2, 228, 37, 30, 58,
+        ],
+        [
+            14, 157, 212, 178, 33, 141, 195, 233, 148, 209, 99, 31, 162, 136, 5, 142, 120, 233,
+            220, 15, 79, 175, 177, 241, 146, 49, 102, 211, 252, 130, 121, 9,
+        ],
+        [
+            221, 245, 13, 62, 16, 26, 233, 246, 17, 220, 110, 118, 6, 251, 172, 236, 231, 108, 147,
+            73, 160, 123, 205, 72, 54, 107, 216, 172, 212, 227, 197, 56,
+        ],
+        [
+            26, 183, 159, 163, 99, 211, 238, 142, 63, 162, 131, 254, 192, 50, 122, 30, 11, 165, 0,
+            34, 137, 201, 18, 44, 35, 67, 75, 29, 91, 3, 64, 24,
+        ],
+    ],
+    [
+        [
+            217, 170, 198, 82, 164, 156, 48, 78, 243, 8, 162, 5, 161, 214, 26, 30, 105, 121, 221,
+            15, 178, 235, 126, 91, 240, 231, 234, 164, 129, 163, 23, 54,
+        ],
+        [
+            254, 124, 232, 46, 154, 234, 41, 132, 147, 167, 82, 156, 255, 152, 165, 188, 194, 112,
+            118, 106, 96, 179, 109, 52, 246, 42, 79, 35, 107, 57, 212, 26,
+        ],
+        [
+            38, 115, 40, 37, 250, 17, 254, 56, 6, 112, 253, 115, 15, 36, 210, 211, 238, 33, 204,
+            253, 199, 143, 3, 65, 134, 74, 79, 33, 60, 28, 170, 43,
+        ],
+        [
+            19, 156, 2, 238, 173, 43, 201, 213, 118, 138, 29, 250, 53, 73, 7, 189, 20, 61, 113,
+            139, 64, 230, 97, 1, 225, 169, 162, 11, 77, 134, 136, 53,
+        ],
+        [
+            78, 97, 56, 58, 166, 149, 113, 8, 98, 0, 137, 188, 8, 124, 162, 118, 177, 116, 251,
+            177, 116, 210, 102, 31, 183, 243, 26, 52, 83, 79, 186, 33,
+        ],
+        [
+            51, 200, 124, 61, 128, 141, 234, 223, 108, 47, 120, 168, 202, 74, 72, 146, 10, 40, 157,
+            61, 25, 196, 20, 146, 157, 45, 194, 230, 131, 171, 53, 16,
+        ],
+        [
+            181, 85, 36, 16, 18, 181, 21, 254, 141, 102, 213, 159, 132, 1, 57, 130, 9, 143, 121,
+            68, 15, 119, 7, 171, 143, 183, 193, 1, 249, 253, 36, 20,
+        ],
+        [
+            107, 77, 204, 52, 72, 81, 22, 230, 177, 54, 238, 49, 183, 222, 112, 78, 164, 255, 134,
+            65, 123, 8, 4, 195, 184, 24, 216, 143, 48, 172, 114, 26,
+        ],
+    ],
+    [
+        [
+            224, 165, 239, 181, 244, 151, 129, 54, 85, 87, 124, 240, 174, 1, 70, 118, 30, 155, 51,
+            250, 142, 68, 46, 119, 171, 232, 52, 161, 115, 45, 192, 28,
+        ],
+        [
+            177, 83, 89, 10, 98, 235, 250, 204, 137, 157, 85, 57, 213, 67, 50, 214, 196, 32, 115,
+            160, 55, 99, 37, 105, 50, 158, 157, 95, 87, 89, 12, 6,
+        ],
+        [
+            31, 181, 62, 233, 183, 232, 177, 247, 241, 220, 131, 89, 222, 45, 15, 22, 2, 29, 216,
+            31, 154, 176, 224, 163, 152, 55, 230, 74, 194, 64, 29, 1,
+        ],
+        [
+            174, 31, 125, 191, 176, 122, 35, 41, 104, 113, 68, 147, 119, 17, 103, 38, 222, 44, 81,
+            3, 250, 74, 9, 106, 176, 7, 241, 139, 171, 202, 152, 32,
+        ],
+        [
+            54, 165, 3, 154, 4, 5, 149, 0, 125, 146, 154, 23, 61, 148, 76, 158, 82, 143, 229, 163,
+            204, 218, 102, 166, 23, 255, 201, 209, 86, 160, 68, 15,
+        ],
+        [
+            107, 49, 88, 210, 239, 78, 195, 211, 215, 223, 154, 25, 177, 128, 228, 39, 237, 211,
+            251, 201, 51, 177, 160, 171, 26, 199, 234, 13, 143, 210, 6, 19,
+        ],
+        [
+            129, 220, 49, 186, 238, 46, 18, 145, 214, 116, 177, 103, 238, 253, 156, 98, 208, 242,
+            61, 98, 82, 77, 93, 237, 42, 106, 139, 37, 40, 119, 94, 21,
+        ],
+        [
+            99, 86, 197, 177, 154, 78, 39, 72, 132, 166, 108, 253, 48, 59, 67, 185, 2, 130, 56,
+            151, 148, 78, 188, 50, 138, 40, 127, 115, 8, 30, 195, 47,
+        ],
+    ],
+    [
+        [
+            161, 97, 38, 183, 81, 130, 85, 252, 94, 241, 250, 149, 204, 211, 68, 21, 144, 223, 76,
+            73, 67, 83, 162, 151, 197, 108, 157, 32, 148, 143, 62, 26,
+        ],
+        [
+            186, 237, 123, 78, 107, 54, 30, 146, 192, 222, 165, 177, 2, 125, 183, 167, 236, 168,
+            96, 121, 6, 147, 225, 117, 86, 8, 15, 115, 149, 199, 1, 31,
+        ],
+        [
+            91, 208, 64, 25, 137, 126, 121, 244, 6, 205, 13, 56, 5, 211, 30, 139, 68, 85, 197, 221,
+            100, 14, 18, 32, 193, 3, 151, 227, 148, 4, 192, 0,
+        ],
+        [
+            132, 233, 13, 214, 23, 47, 150, 6, 226, 216, 88, 203, 152, 212, 8, 231, 1, 141, 112,
+            240, 220, 127, 199, 201, 254, 112, 119, 135, 253, 128, 237, 24,
+        ],
+        [
+            208, 154, 28, 21, 219, 23, 84, 233, 114, 177, 88, 89, 112, 204, 130, 28, 13, 124, 13,
+            71, 67, 197, 83, 80, 157, 25, 105, 158, 2, 150, 133, 47,
+        ],
+        [
+            102, 50, 242, 246, 255, 157, 245, 139, 43, 72, 245, 232, 239, 122, 214, 227, 114, 31,
+            59, 175, 126, 249, 229, 161, 47, 124, 232, 45, 116, 187, 11, 6,
+        ],
+        [
+            195, 235, 184, 23, 101, 52, 32, 120, 163, 252, 87, 10, 118, 21, 95, 10, 118, 95, 109,
+            88, 251, 173, 11, 86, 187, 194, 230, 32, 85, 54, 187, 6,
+        ],
+        [
+            11, 77, 255, 109, 67, 103, 249, 253, 225, 160, 107, 82, 170, 72, 28, 221, 50, 158, 118,
+            22, 15, 51, 157, 150, 64, 174, 9, 18, 110, 94, 134, 63,
+        ],
+    ],
+    [
+        [
+            22, 249, 212, 177, 47, 64, 198, 103, 181, 243, 4, 164, 46, 243, 160, 120, 81, 116, 50,
+            224, 30, 154, 199, 23, 49, 128, 92, 209, 125, 1, 248, 10,
+        ],
+        [
+            202, 149, 25, 118, 221, 245, 101, 65, 28, 151, 69, 128, 19, 207, 9, 86, 54, 248, 254,
+            163, 143, 209, 12, 53, 158, 149, 44, 216, 140, 192, 33, 1,
+        ],
+        [
+            160, 220, 56, 72, 111, 111, 70, 75, 244, 213, 20, 118, 166, 117, 67, 124, 122, 251, 51,
+            98, 117, 157, 56, 173, 9, 19, 156, 208, 121, 109, 33, 7,
+        ],
+        [
+            88, 192, 255, 45, 177, 228, 254, 60, 125, 5, 56, 103, 211, 6, 132, 123, 20, 169, 138,
+            89, 208, 137, 112, 92, 166, 113, 164, 47, 31, 242, 69, 19,
+        ],
+        [
+            71, 100, 47, 249, 20, 104, 251, 81, 0, 130, 176, 233, 221, 69, 63, 21, 95, 229, 105,
+            213, 176, 43, 152, 148, 63, 203, 237, 97, 68, 27, 5, 46,
+        ],
+        [
+            213, 68, 150, 155, 57, 103, 131, 237, 51, 253, 41, 186, 132, 242, 66, 88, 43, 204, 111,
+            137, 65, 204, 245, 92, 57, 182, 47, 87, 206, 38, 232, 56,
+        ],
+        [
+            5, 222, 1, 109, 48, 37, 104, 111, 196, 51, 129, 84, 228, 187, 45, 176, 46, 194, 26,
+            108, 193, 235, 216, 205, 73, 148, 115, 216, 187, 176, 202, 33,
+        ],
+        [
+            52, 125, 84, 43, 125, 255, 223, 79, 212, 184, 34, 97, 130, 37, 146, 155, 142, 123, 197,
+            113, 16, 190, 149, 192, 3, 69, 64, 162, 2, 247, 186, 39,
+        ],
+    ],
+    [
+        [
+            100, 246, 118, 128, 108, 93, 29, 54, 43, 222, 151, 194, 22, 167, 184, 64, 178, 30, 254,
+            104, 231, 101, 219, 176, 100, 66, 227, 21, 60, 56, 141, 30,
+        ],
+        [
+            25, 82, 5, 57, 97, 112, 70, 14, 177, 181, 80, 33, 243, 121, 214, 125, 15, 56, 54, 178,
+            173, 129, 105, 53, 204, 161, 47, 31, 104, 212, 113, 30,
+        ],
+        [
+            165, 241, 162, 162, 146, 225, 123, 214, 227, 9, 94, 232, 224, 33, 220, 126, 140, 230,
+            100, 6, 146, 206, 32, 87, 34, 226, 9, 137, 94, 24, 29, 56,
+        ],
+        [
+            210, 204, 192, 45, 111, 180, 6, 42, 143, 142, 209, 66, 70, 70, 165, 125, 177, 136, 61,
+            170, 218, 137, 47, 140, 145, 98, 97, 201, 242, 38, 159, 13,
+        ],
+        [
+            145, 131, 248, 82, 176, 63, 234, 187, 225, 244, 68, 228, 160, 221, 168, 229, 196, 111,
+            210, 249, 182, 190, 50, 110, 79, 189, 198, 201, 186, 177, 167, 22,
+        ],
+        [
+            64, 115, 113, 246, 255, 216, 234, 56, 117, 195, 120, 55, 240, 134, 160, 169, 39, 37,
+            80, 157, 183, 5, 183, 141, 102, 99, 209, 75, 179, 115, 212, 40,
+        ],
+        [
+            168, 252, 46, 212, 207, 192, 61, 237, 74, 29, 184, 78, 230, 155, 18, 104, 17, 182, 192,
+            138, 131, 165, 221, 197, 28, 227, 210, 173, 81, 160, 166, 58,
+        ],
+        [
+            77, 53, 146, 43, 89, 3, 223, 140, 112, 124, 116, 255, 250, 126, 220, 113, 46, 150, 26,
+            249, 193, 109, 169, 1, 91, 73, 98, 140, 174, 75, 63, 15,
+        ],
+    ],
+    [
+        [
+            27, 205, 44, 170, 203, 156, 219, 207, 220, 128, 50, 89, 195, 109, 65, 110, 108, 8, 55,
+            253, 180, 73, 204, 109, 234, 238, 167, 255, 123, 234, 84, 24,
+        ],
+        [
+            127, 219, 25, 52, 81, 140, 114, 75, 213, 68, 108, 1, 95, 51, 226, 118, 149, 197, 171,
+            220, 251, 33, 88, 169, 50, 122, 38, 100, 3, 102, 47, 31,
+        ],
+        [
+            116, 246, 165, 168, 166, 54, 240, 34, 61, 44, 75, 36, 18, 76, 242, 135, 212, 88, 133,
+            169, 34, 137, 102, 214, 6, 14, 5, 61, 212, 36, 247, 51,
+        ],
+        [
+            181, 3, 99, 237, 164, 47, 170, 88, 174, 148, 98, 149, 163, 57, 231, 192, 105, 214, 110,
+            164, 11, 208, 98, 230, 184, 137, 159, 127, 173, 163, 196, 36,
+        ],
+        [
+            62, 15, 190, 131, 36, 208, 162, 22, 187, 30, 242, 168, 211, 115, 26, 134, 153, 102, 79,
+            19, 117, 123, 31, 37, 200, 237, 190, 49, 222, 82, 194, 6,
+        ],
+        [
+            130, 193, 193, 11, 20, 203, 1, 24, 41, 18, 242, 33, 158, 52, 92, 183, 150, 111, 127,
+            153, 106, 13, 55, 96, 121, 87, 76, 174, 91, 50, 8, 21,
+        ],
+        [
+            25, 206, 189, 81, 111, 245, 100, 197, 220, 52, 174, 171, 137, 120, 124, 247, 234, 110,
+            216, 252, 100, 114, 82, 52, 23, 134, 212, 218, 74, 119, 94, 20,
+        ],
+        [
+            222, 24, 83, 2, 137, 110, 39, 174, 67, 16, 243, 169, 132, 178, 196, 239, 153, 218, 85,
+            165, 204, 160, 193, 202, 190, 116, 134, 156, 227, 79, 126, 31,
+        ],
+    ],
+    [
+        [
+            78, 127, 250, 132, 73, 120, 250, 80, 235, 105, 226, 127, 217, 64, 142, 70, 102, 179,
+            220, 176, 43, 150, 213, 22, 220, 27, 16, 110, 202, 206, 150, 2,
+        ],
+        [
+            59, 135, 36, 89, 92, 38, 243, 89, 157, 94, 193, 187, 36, 198, 31, 210, 144, 172, 169,
+            226, 100, 166, 162, 107, 179, 124, 242, 58, 192, 181, 120, 31,
+        ],
+        [
+            244, 226, 171, 215, 32, 82, 150, 4, 29, 112, 228, 54, 44, 49, 219, 85, 165, 229, 235,
+            179, 29, 52, 144, 132, 17, 254, 63, 120, 60, 4, 33, 28,
+        ],
+        [
+            94, 250, 234, 126, 51, 236, 214, 132, 207, 148, 71, 2, 99, 254, 12, 161, 167, 46, 79,
+            54, 232, 205, 208, 140, 236, 34, 79, 62, 195, 152, 152, 44,
+        ],
+        [
+            236, 54, 144, 91, 214, 215, 143, 43, 147, 135, 206, 43, 142, 33, 216, 123, 160, 20,
+            128, 138, 19, 57, 31, 213, 191, 145, 230, 241, 196, 67, 228, 45,
+        ],
+        [
+            209, 246, 124, 2, 205, 158, 164, 155, 232, 52, 224, 121, 49, 167, 125, 186, 64, 190,
+            110, 213, 253, 154, 230, 8, 203, 72, 208, 156, 224, 14, 26, 36,
+        ],
+        [
+            2, 163, 112, 13, 243, 117, 175, 20, 37, 74, 70, 184, 159, 43, 64, 58, 196, 60, 58, 97,
+            217, 56, 155, 232, 182, 122, 231, 235, 63, 244, 85, 54,
+        ],
+        [
+            198, 207, 127, 56, 2, 173, 97, 18, 140, 235, 98, 17, 74, 58, 229, 135, 107, 233, 107,
+            97, 101, 167, 19, 153, 50, 196, 142, 26, 74, 12, 31, 24,
+        ],
+    ],
+    [
+        [
+            27, 63, 161, 142, 183, 196, 17, 99, 100, 98, 158, 20, 142, 103, 84, 220, 11, 21, 113,
+            159, 248, 107, 32, 78, 227, 20, 95, 12, 63, 74, 188, 50,
+        ],
+        [
+            202, 124, 66, 161, 185, 74, 107, 125, 210, 209, 173, 82, 129, 191, 17, 80, 68, 23, 17,
+            109, 138, 102, 163, 219, 39, 177, 231, 178, 186, 189, 100, 41,
+        ],
+        [
+            165, 199, 235, 218, 57, 201, 68, 38, 225, 8, 202, 8, 122, 10, 9, 3, 108, 9, 192, 10,
+            77, 228, 225, 137, 192, 34, 172, 150, 3, 144, 72, 50,
+        ],
+        [
+            243, 144, 241, 83, 19, 129, 69, 136, 39, 17, 21, 64, 217, 91, 137, 38, 123, 162, 240,
+            193, 242, 181, 40, 21, 87, 126, 38, 49, 184, 28, 16, 7,
+        ],
+        [
+            238, 195, 172, 123, 53, 111, 247, 70, 103, 77, 54, 97, 229, 183, 174, 143, 101, 174,
+            158, 2, 5, 2, 30, 76, 208, 223, 129, 66, 119, 241, 118, 17,
+        ],
+        [
+            94, 251, 39, 193, 48, 215, 167, 73, 107, 136, 251, 46, 162, 178, 167, 131, 148, 160,
+            247, 72, 132, 67, 69, 217, 32, 144, 252, 60, 155, 172, 213, 11,
+        ],
+        [
+            136, 203, 58, 211, 248, 4, 150, 29, 122, 226, 157, 183, 129, 29, 48, 15, 99, 138, 246,
+            99, 67, 146, 78, 105, 219, 58, 247, 132, 205, 250, 234, 13,
+        ],
+        [
+            131, 246, 106, 110, 134, 217, 32, 180, 116, 227, 242, 87, 223, 171, 248, 156, 56, 249,
+            118, 66, 102, 195, 13, 122, 117, 15, 166, 104, 223, 110, 200, 38,
+        ],
+    ],
+    [
+        [
+            248, 41, 85, 64, 78, 103, 70, 171, 95, 20, 190, 196, 220, 19, 20, 34, 203, 240, 224,
+            22, 20, 168, 71, 249, 105, 188, 34, 115, 181, 131, 207, 26,
+        ],
+        [
+            130, 35, 15, 37, 46, 188, 165, 135, 236, 67, 238, 130, 228, 16, 12, 182, 223, 202, 150,
+            47, 130, 124, 225, 5, 183, 157, 197, 97, 133, 28, 77, 6,
+        ],
+        [
+            200, 136, 113, 135, 204, 108, 67, 234, 187, 200, 171, 194, 9, 124, 29, 232, 155, 249,
+            23, 190, 69, 94, 168, 236, 104, 122, 134, 228, 92, 98, 135, 15,
+        ],
+        [
+            40, 64, 67, 103, 146, 167, 207, 42, 161, 242, 39, 181, 77, 11, 239, 91, 33, 194, 4,
+            143, 210, 181, 34, 134, 240, 253, 73, 170, 44, 240, 204, 60,
+        ],
+        [
+            251, 77, 3, 112, 185, 64, 10, 145, 1, 112, 49, 180, 162, 46, 158, 133, 19, 73, 150,
+            189, 121, 207, 13, 244, 198, 103, 144, 22, 66, 97, 93, 20,
+        ],
+        [
+            127, 204, 42, 168, 86, 226, 173, 153, 6, 106, 143, 186, 137, 126, 128, 239, 134, 108,
+            77, 33, 189, 136, 242, 212, 142, 45, 206, 210, 159, 136, 78, 12,
+        ],
+        [
+            15, 253, 114, 72, 101, 192, 37, 62, 200, 113, 200, 20, 58, 212, 84, 36, 71, 29, 81,
+            225, 177, 24, 48, 98, 16, 4, 235, 72, 37, 79, 154, 60,
+        ],
+        [
+            153, 113, 168, 211, 229, 185, 26, 190, 217, 41, 18, 202, 163, 69, 193, 138, 93, 70, 45,
+            180, 29, 242, 126, 146, 176, 107, 25, 21, 253, 61, 191, 36,
+        ],
+    ],
+    [
+        [
+            246, 253, 20, 245, 213, 217, 176, 5, 165, 120, 172, 185, 67, 63, 124, 64, 27, 206, 210,
+            204, 46, 74, 6, 24, 213, 23, 24, 173, 66, 6, 232, 7,
+        ],
+        [
+            186, 109, 215, 209, 176, 2, 5, 129, 174, 195, 12, 193, 252, 117, 125, 60, 202, 235, 90,
+            58, 214, 95, 228, 254, 112, 219, 85, 209, 23, 135, 95, 56,
+        ],
+        [
+            148, 69, 223, 63, 194, 200, 74, 105, 138, 211, 153, 65, 156, 196, 218, 23, 227, 33,
+            197, 145, 61, 189, 254, 92, 219, 252, 232, 247, 238, 135, 155, 25,
+        ],
+        [
+            16, 74, 65, 243, 138, 145, 137, 152, 228, 22, 218, 130, 235, 43, 33, 254, 132, 238,
+            221, 161, 148, 92, 148, 30, 29, 84, 186, 39, 228, 47, 56, 44,
+        ],
+        [
+            114, 111, 3, 54, 230, 233, 73, 242, 188, 183, 225, 49, 201, 217, 39, 206, 215, 138, 72,
+            191, 187, 215, 115, 117, 156, 251, 68, 31, 186, 218, 56, 62,
+        ],
+        [
+            174, 161, 85, 223, 12, 89, 158, 140, 24, 219, 99, 174, 136, 215, 56, 209, 179, 109, 87,
+            118, 194, 55, 18, 230, 34, 87, 235, 151, 247, 40, 15, 9,
+        ],
+        [
+            188, 199, 8, 222, 231, 93, 94, 85, 25, 248, 96, 68, 134, 135, 102, 132, 189, 31, 19,
+            187, 49, 97, 47, 124, 106, 216, 69, 133, 160, 167, 141, 62,
+        ],
+        [
+            158, 55, 224, 15, 244, 146, 13, 184, 185, 172, 203, 161, 20, 202, 230, 1, 78, 165, 72,
+            73, 127, 2, 36, 55, 110, 119, 241, 238, 23, 86, 241, 23,
+        ],
+    ],
+    [
+        [
+            135, 127, 214, 177, 50, 175, 15, 156, 209, 192, 69, 139, 50, 0, 233, 92, 181, 39, 10,
+            69, 65, 8, 254, 137, 208, 22, 174, 245, 220, 39, 224, 49,
+        ],
+        [
+            89, 164, 61, 68, 166, 224, 4, 27, 209, 222, 1, 46, 57, 173, 182, 122, 135, 238, 56,
+            170, 111, 216, 230, 184, 201, 196, 196, 111, 52, 252, 149, 31,
+        ],
+        [
+            44, 67, 177, 56, 207, 234, 197, 117, 53, 180, 148, 180, 138, 63, 54, 133, 255, 80, 171,
+            53, 5, 133, 46, 157, 122, 49, 143, 26, 210, 189, 190, 56,
+        ],
+        [
+            97, 11, 237, 129, 221, 220, 1, 91, 199, 236, 87, 251, 50, 166, 242, 156, 29, 149, 195,
+            211, 215, 89, 109, 129, 216, 39, 165, 199, 238, 33, 118, 18,
+        ],
+        [
+            173, 167, 107, 119, 184, 254, 187, 104, 208, 100, 103, 46, 4, 153, 8, 135, 55, 157, 79,
+            182, 182, 244, 11, 141, 124, 43, 93, 138, 221, 251, 107, 61,
+        ],
+        [
+            35, 15, 241, 4, 169, 175, 97, 122, 64, 8, 38, 135, 20, 128, 36, 135, 7, 241, 86, 36,
+            227, 18, 58, 52, 156, 65, 251, 13, 51, 40, 1, 62,
+        ],
+        [
+            51, 214, 155, 250, 163, 83, 17, 145, 93, 141, 84, 108, 188, 234, 73, 63, 21, 220, 19,
+            70, 34, 254, 118, 13, 101, 146, 8, 159, 246, 201, 62, 9,
+        ],
+        [
+            42, 79, 34, 69, 94, 116, 129, 61, 198, 162, 167, 131, 186, 165, 197, 204, 39, 114, 19,
+            170, 141, 174, 239, 143, 233, 204, 27, 176, 172, 62, 211, 19,
+        ],
+    ],
+    [
+        [
+            11, 146, 12, 170, 203, 61, 124, 253, 186, 30, 3, 132, 3, 164, 20, 218, 152, 38, 222,
+            27, 241, 100, 118, 24, 108, 196, 164, 220, 168, 167, 65, 43,
+        ],
+        [
+            56, 137, 74, 113, 79, 61, 238, 6, 241, 48, 30, 175, 59, 105, 39, 66, 42, 235, 181, 21,
+            93, 90, 98, 121, 104, 211, 8, 30, 95, 51, 143, 17,
+        ],
+        [
+            60, 233, 97, 79, 255, 211, 206, 175, 40, 250, 215, 143, 238, 202, 102, 55, 30, 120, 62,
+            152, 92, 135, 110, 174, 8, 230, 16, 108, 211, 6, 76, 48,
+        ],
+        [
+            150, 98, 90, 96, 10, 194, 174, 119, 245, 44, 32, 222, 185, 134, 169, 110, 150, 234,
+            207, 3, 247, 241, 123, 96, 227, 44, 194, 88, 206, 67, 79, 60,
+        ],
+        [
+            231, 190, 200, 68, 220, 134, 95, 81, 234, 146, 172, 193, 126, 114, 165, 46, 10, 32,
+            188, 216, 92, 197, 110, 121, 224, 230, 85, 185, 195, 221, 182, 43,
+        ],
+        [
+            136, 228, 204, 68, 47, 198, 41, 175, 24, 45, 174, 97, 56, 168, 205, 226, 158, 67, 146,
+            78, 214, 241, 137, 115, 247, 95, 3, 43, 191, 50, 72, 8,
+        ],
+        [
+            252, 139, 167, 182, 91, 54, 101, 249, 218, 222, 216, 145, 121, 148, 42, 239, 125, 253,
+            192, 157, 169, 4, 134, 248, 242, 176, 20, 70, 253, 215, 235, 10,
+        ],
+        [
+            122, 194, 254, 40, 70, 70, 110, 39, 34, 206, 80, 159, 44, 21, 73, 57, 96, 107, 154, 37,
+            162, 44, 188, 179, 64, 145, 122, 9, 170, 208, 180, 42,
+        ],
+    ],
+    [
+        [
+            140, 93, 7, 187, 156, 138, 71, 223, 25, 250, 16, 248, 240, 31, 202, 232, 177, 222, 30,
+            229, 189, 102, 196, 144, 189, 121, 65, 16, 249, 168, 130, 42,
+        ],
+        [
+            111, 180, 120, 71, 245, 37, 82, 193, 217, 93, 132, 203, 59, 47, 30, 247, 231, 188, 194,
+            215, 197, 25, 185, 86, 89, 33, 212, 138, 138, 126, 129, 40,
+        ],
+        [
+            156, 59, 188, 165, 192, 116, 8, 175, 249, 205, 27, 121, 79, 17, 148, 80, 75, 228, 1,
+            107, 20, 121, 226, 166, 82, 171, 242, 115, 149, 163, 96, 60,
+        ],
+        [
+            45, 235, 1, 13, 44, 236, 199, 11, 58, 20, 32, 81, 144, 62, 102, 97, 31, 14, 155, 161,
+            193, 6, 141, 114, 110, 193, 54, 254, 148, 188, 62, 25,
+        ],
+        [
+            121, 92, 222, 72, 218, 89, 183, 106, 4, 64, 223, 224, 171, 98, 19, 105, 146, 15, 179,
+            92, 172, 246, 197, 249, 51, 137, 124, 218, 98, 21, 105, 15,
+        ],
+        [
+            171, 221, 122, 139, 130, 21, 237, 201, 5, 138, 198, 110, 44, 60, 79, 49, 185, 87, 190,
+            128, 122, 241, 184, 31, 77, 60, 167, 95, 209, 122, 194, 49,
+        ],
+        [
+            3, 199, 82, 229, 54, 214, 97, 104, 6, 223, 90, 80, 207, 165, 154, 190, 228, 253, 248,
+            89, 72, 20, 183, 139, 172, 180, 81, 7, 179, 47, 163, 43,
+        ],
+        [
+            23, 206, 138, 108, 6, 214, 33, 144, 242, 253, 75, 234, 133, 244, 122, 168, 41, 181,
+            167, 62, 99, 40, 18, 100, 20, 61, 142, 234, 208, 41, 17, 34,
+        ],
+    ],
+];
+
+pub fn generator() -> pallas::Affine {
+    pallas::Affine::from_xy(
+        pallas::Base::from_bytes(&GENERATOR.0).unwrap(),
+        pallas::Base::from_bytes(&GENERATOR.1).unwrap(),
+    )
+    .unwrap()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::{
+        test_lagrange_coeffs, test_zs_and_us, NOTE_COMMITMENT_PERSONALIZATION, NUM_WINDOWS,
+    };
+    use super::*;
+    use crate::primitives::sinsemilla::CommitDomain;
+    use group::Curve;
+    use pasta_curves::{
+        arithmetic::{CurveAffine, FieldExt},
+        pallas,
+    };
+
+    #[test]
+    fn generator() {
+        let domain = CommitDomain::new(NOTE_COMMITMENT_PERSONALIZATION);
+        let point = domain.R();
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(*coords.x(), pallas::Base::from_bytes(&GENERATOR.0).unwrap());
+        assert_eq!(*coords.y(), pallas::Base::from_bytes(&GENERATOR.1).unwrap());
+    }
+
+    #[test]
+    fn lagrange_coeffs() {
+        let base = super::generator();
+        test_lagrange_coeffs(base, NUM_WINDOWS);
+    }
+
+    #[test]
+    fn z() {
+        let base = super::generator();
+        test_zs_and_us(base, &Z, &U, NUM_WINDOWS);
+    }
+}

+ 2963 - 0
examples/halo2/src/constants/nullifier_k.rs

@@ -0,0 +1,2963 @@
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+pub const GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        117, 202, 71, 228, 167, 106, 111, 211, 155, 219, 181, 204, 146, 177, 126, 94, 207, 201,
+        244, 250, 113, 85, 55, 46, 141, 25, 168, 156, 22, 170, 231, 37,
+    ],
+    [
+        204, 1, 224, 26, 226, 220, 184, 45, 51, 180, 193, 193, 158, 164, 224, 95, 117, 255, 8, 32,
+        68, 115, 4, 136, 132, 51, 26, 27, 133, 31, 92, 21,
+    ],
+);
+
+/// Full-width z-values for GENERATOR
+pub const Z: [u64; super::NUM_WINDOWS] = [
+    34374, 173069, 40776, 220066, 45494, 37762, 5245, 11979, 33386, 238556, 128731, 12128, 89982,
+    85351, 9804, 12820, 80455, 100009, 24382, 17854, 26367, 7067, 102106, 64293, 114999, 172304,
+    36687, 11287, 66386, 41470, 182654, 12214, 36528, 16257, 26179, 15660, 106189, 211703, 12936,
+    2506, 149799, 82965, 117810, 98881, 296, 146201, 63200, 31766, 78221, 6587, 27974, 126041,
+    19927, 79339, 210060, 127148, 10109, 19815, 107452, 10296, 642, 11828, 3985, 2984, 30806,
+    12554, 1815, 19894, 16790, 33748, 12879, 1742, 30858, 118563, 26855, 75617, 10167, 17660,
+    33638, 89236, 50234, 30489, 67488, 50229, 29277,
+];
+
+/// Full-width u-values for GENERATOR
+pub const U: [[[u8; 32]; super::H]; super::NUM_WINDOWS] = [
+    [
+        [
+            8, 177, 117, 90, 104, 127, 169, 131, 254, 128, 23, 151, 181, 247, 22, 208, 55, 1, 147,
+            216, 84, 35, 129, 16, 134, 195, 231, 78, 90, 27, 48, 24,
+        ],
+        [
+            85, 52, 30, 137, 203, 92, 107, 164, 157, 0, 160, 220, 77, 151, 245, 43, 236, 219, 6,
+            127, 136, 136, 255, 80, 178, 129, 223, 223, 100, 205, 206, 60,
+        ],
+        [
+            180, 42, 81, 35, 92, 89, 115, 34, 230, 154, 57, 180, 27, 241, 82, 7, 29, 18, 87, 188,
+            15, 115, 37, 92, 226, 71, 117, 25, 58, 188, 84, 2,
+        ],
+        [
+            120, 152, 127, 75, 237, 238, 241, 80, 87, 202, 187, 80, 67, 210, 115, 228, 187, 183,
+            190, 104, 143, 201, 79, 59, 88, 235, 35, 30, 112, 142, 245, 41,
+        ],
+        [
+            137, 203, 204, 3, 111, 36, 152, 243, 202, 11, 171, 157, 74, 86, 136, 224, 134, 228, 83,
+            142, 77, 3, 87, 124, 174, 254, 51, 139, 199, 223, 108, 33,
+        ],
+        [
+            253, 61, 90, 128, 49, 47, 137, 144, 47, 195, 161, 160, 78, 225, 222, 129, 15, 194, 150,
+            16, 41, 55, 82, 238, 34, 87, 98, 170, 213, 158, 15, 50,
+        ],
+        [
+            47, 235, 116, 15, 252, 144, 163, 83, 0, 21, 138, 234, 11, 181, 189, 10, 246, 121, 216,
+            134, 47, 95, 213, 3, 238, 46, 179, 91, 217, 89, 45, 51,
+        ],
+        [
+            14, 37, 210, 28, 30, 181, 151, 46, 9, 92, 16, 9, 143, 179, 209, 165, 243, 236, 31, 73,
+            1, 41, 26, 125, 225, 42, 241, 153, 7, 72, 154, 28,
+        ],
+    ],
+    [
+        [
+            155, 23, 107, 105, 142, 88, 223, 1, 145, 75, 68, 196, 138, 223, 209, 168, 178, 183,
+            154, 186, 235, 94, 192, 81, 170, 238, 26, 126, 159, 204, 87, 18,
+        ],
+        [
+            23, 143, 212, 151, 42, 93, 52, 146, 4, 240, 71, 229, 183, 45, 75, 117, 31, 86, 162,
+            145, 194, 110, 118, 145, 36, 1, 110, 255, 119, 221, 191, 4,
+        ],
+        [
+            43, 199, 119, 40, 42, 43, 118, 185, 214, 192, 11, 20, 35, 124, 64, 65, 126, 39, 23,
+            136, 102, 196, 220, 99, 190, 252, 163, 189, 215, 110, 5, 26,
+        ],
+        [
+            231, 221, 137, 18, 190, 54, 27, 37, 198, 161, 251, 131, 26, 85, 24, 253, 119, 85, 63,
+            73, 4, 205, 90, 160, 68, 17, 124, 250, 142, 144, 165, 7,
+        ],
+        [
+            83, 50, 206, 53, 156, 115, 230, 212, 31, 155, 204, 33, 132, 233, 228, 213, 249, 252,
+            224, 9, 157, 163, 184, 220, 25, 118, 167, 180, 145, 86, 59, 27,
+        ],
+        [
+            245, 214, 106, 201, 143, 76, 98, 94, 184, 16, 72, 167, 42, 124, 18, 182, 124, 0, 122,
+            151, 24, 228, 104, 144, 81, 240, 105, 126, 158, 79, 213, 60,
+        ],
+        [
+            117, 59, 119, 9, 69, 161, 159, 137, 154, 195, 28, 54, 240, 214, 26, 97, 138, 121, 199,
+            4, 28, 17, 159, 186, 52, 216, 186, 6, 65, 17, 155, 53,
+        ],
+        [
+            131, 74, 9, 131, 251, 243, 140, 39, 209, 183, 173, 30, 223, 144, 252, 210, 71, 196,
+            218, 92, 149, 114, 87, 13, 176, 167, 135, 21, 79, 51, 166, 21,
+        ],
+    ],
+    [
+        [
+            106, 53, 57, 143, 70, 101, 179, 227, 157, 251, 249, 89, 23, 241, 33, 172, 138, 109,
+            112, 10, 239, 116, 201, 204, 70, 88, 47, 122, 115, 244, 190, 1,
+        ],
+        [
+            209, 215, 139, 155, 229, 13, 70, 83, 197, 215, 97, 80, 247, 86, 167, 76, 230, 225, 158,
+            160, 192, 121, 46, 212, 197, 12, 107, 161, 225, 174, 226, 6,
+        ],
+        [
+            112, 160, 94, 22, 110, 32, 8, 135, 32, 51, 220, 110, 15, 225, 140, 230, 76, 199, 123,
+            151, 87, 211, 19, 62, 21, 129, 16, 60, 12, 108, 165, 31,
+        ],
+        [
+            204, 30, 64, 88, 48, 86, 118, 103, 250, 219, 102, 20, 56, 126, 52, 226, 0, 61, 113,
+            192, 116, 132, 99, 78, 111, 44, 138, 247, 154, 143, 219, 27,
+        ],
+        [
+            234, 175, 176, 17, 157, 210, 254, 209, 26, 205, 38, 46, 13, 146, 162, 67, 133, 126, 0,
+            137, 173, 137, 151, 97, 177, 226, 59, 43, 155, 198, 51, 45,
+        ],
+        [
+            197, 96, 86, 193, 80, 242, 4, 255, 18, 52, 82, 105, 29, 253, 234, 3, 160, 233, 99, 224,
+            58, 44, 97, 40, 194, 99, 173, 127, 62, 47, 208, 37,
+        ],
+        [
+            22, 149, 249, 163, 1, 218, 101, 70, 94, 230, 144, 57, 241, 33, 6, 232, 196, 115, 108,
+            223, 76, 188, 1, 17, 42, 214, 155, 247, 149, 148, 238, 35,
+        ],
+        [
+            13, 87, 74, 130, 84, 86, 209, 2, 50, 148, 189, 154, 138, 103, 165, 188, 10, 34, 149,
+            21, 75, 83, 63, 88, 162, 137, 118, 232, 60, 157, 137, 53,
+        ],
+    ],
+    [
+        [
+            233, 74, 133, 175, 252, 244, 95, 128, 64, 52, 236, 30, 62, 251, 20, 39, 136, 210, 13,
+            125, 220, 122, 12, 168, 132, 0, 203, 121, 166, 114, 89, 55,
+        ],
+        [
+            23, 16, 81, 254, 130, 74, 96, 191, 239, 107, 112, 232, 193, 231, 115, 168, 222, 76,
+            200, 25, 29, 74, 120, 123, 219, 38, 10, 170, 159, 38, 151, 59,
+        ],
+        [
+            123, 54, 39, 213, 60, 136, 244, 129, 49, 166, 51, 223, 82, 7, 141, 210, 150, 80, 71,
+            91, 48, 195, 52, 32, 17, 149, 25, 63, 179, 211, 116, 44,
+        ],
+        [
+            109, 212, 117, 221, 214, 8, 16, 202, 176, 94, 85, 170, 181, 234, 43, 86, 151, 193, 42,
+            9, 185, 141, 187, 197, 32, 149, 233, 82, 135, 196, 226, 55,
+        ],
+        [
+            167, 160, 99, 140, 33, 119, 82, 182, 166, 50, 48, 229, 46, 170, 178, 22, 52, 2, 60,
+            138, 235, 97, 75, 141, 32, 166, 120, 45, 103, 212, 212, 54,
+        ],
+        [
+            127, 109, 31, 40, 88, 39, 93, 49, 112, 214, 201, 84, 181, 82, 212, 26, 236, 67, 108,
+            50, 59, 188, 242, 182, 163, 230, 153, 128, 207, 86, 214, 18,
+        ],
+        [
+            246, 232, 168, 240, 223, 17, 25, 238, 68, 106, 81, 83, 149, 255, 179, 85, 215, 221,
+            161, 98, 211, 255, 34, 100, 244, 171, 34, 77, 13, 97, 7, 31,
+        ],
+        [
+            203, 28, 143, 74, 174, 27, 47, 59, 154, 247, 128, 8, 70, 108, 73, 167, 25, 171, 132,
+            99, 192, 80, 53, 69, 93, 132, 35, 224, 141, 157, 182, 27,
+        ],
+    ],
+    [
+        [
+            158, 175, 208, 26, 183, 200, 147, 77, 15, 124, 87, 17, 47, 238, 228, 184, 132, 87, 24,
+            159, 255, 90, 200, 42, 118, 110, 207, 49, 100, 156, 40, 17,
+        ],
+        [
+            214, 80, 143, 90, 122, 14, 85, 237, 43, 157, 103, 184, 14, 213, 121, 149, 38, 12, 185,
+            162, 65, 76, 175, 234, 33, 6, 128, 70, 87, 64, 121, 32,
+        ],
+        [
+            239, 204, 8, 172, 229, 121, 210, 167, 213, 113, 34, 212, 58, 196, 246, 231, 235, 249,
+            10, 1, 133, 180, 234, 122, 185, 209, 137, 42, 151, 187, 90, 49,
+        ],
+        [
+            38, 201, 204, 153, 118, 114, 213, 247, 168, 32, 231, 172, 56, 74, 104, 185, 82, 10,
+            189, 39, 0, 120, 76, 60, 187, 40, 207, 49, 112, 7, 226, 13,
+        ],
+        [
+            49, 138, 24, 179, 17, 17, 139, 34, 66, 7, 206, 250, 69, 221, 34, 216, 233, 153, 230,
+            61, 129, 139, 206, 131, 48, 182, 148, 13, 71, 243, 111, 22,
+        ],
+        [
+            196, 88, 22, 46, 64, 213, 113, 115, 213, 31, 243, 86, 240, 86, 2, 152, 250, 26, 105,
+            171, 184, 61, 159, 95, 65, 29, 25, 78, 240, 245, 10, 21,
+        ],
+        [
+            78, 28, 8, 195, 230, 66, 59, 242, 40, 196, 240, 152, 11, 217, 164, 30, 69, 14, 45, 198,
+            239, 214, 233, 45, 101, 211, 98, 235, 100, 118, 55, 4,
+        ],
+        [
+            78, 224, 209, 126, 212, 30, 129, 15, 115, 153, 242, 115, 131, 124, 100, 161, 132, 191,
+            92, 106, 202, 67, 75, 214, 38, 188, 240, 124, 54, 224, 93, 45,
+        ],
+    ],
+    [
+        [
+            217, 244, 110, 79, 182, 134, 95, 114, 224, 131, 47, 250, 120, 210, 60, 25, 170, 192,
+            236, 37, 233, 77, 18, 29, 113, 70, 184, 210, 226, 211, 36, 23,
+        ],
+        [
+            97, 25, 216, 18, 187, 188, 60, 255, 57, 173, 195, 70, 147, 75, 123, 96, 32, 186, 235,
+            203, 168, 246, 177, 206, 183, 164, 219, 209, 70, 100, 221, 31,
+        ],
+        [
+            103, 65, 104, 143, 235, 96, 30, 14, 136, 100, 168, 208, 183, 133, 61, 209, 88, 171,
+            234, 144, 128, 186, 154, 57, 115, 217, 218, 65, 208, 15, 164, 5,
+        ],
+        [
+            129, 17, 125, 139, 223, 114, 198, 101, 118, 190, 54, 211, 209, 193, 119, 254, 191, 151,
+            210, 201, 167, 151, 199, 55, 144, 146, 28, 125, 15, 140, 64, 50,
+        ],
+        [
+            157, 114, 191, 73, 254, 85, 156, 148, 193, 78, 64, 118, 237, 231, 95, 96, 156, 223,
+            251, 161, 108, 104, 68, 68, 208, 108, 52, 36, 193, 20, 209, 39,
+        ],
+        [
+            153, 221, 73, 244, 97, 41, 144, 181, 6, 255, 117, 181, 73, 60, 182, 130, 126, 179, 61,
+            86, 141, 96, 33, 233, 132, 47, 145, 215, 219, 54, 147, 11,
+        ],
+        [
+            94, 107, 185, 219, 70, 23, 205, 149, 216, 21, 53, 23, 98, 243, 185, 235, 221, 198, 49,
+            177, 48, 56, 251, 180, 141, 119, 212, 20, 227, 194, 64, 19,
+        ],
+        [
+            85, 148, 121, 226, 36, 182, 97, 6, 122, 1, 31, 39, 92, 65, 36, 147, 205, 69, 204, 90,
+            204, 166, 179, 223, 5, 125, 68, 63, 64, 128, 63, 21,
+        ],
+    ],
+    [
+        [
+            2, 169, 25, 203, 212, 185, 124, 61, 150, 239, 166, 57, 177, 48, 11, 166, 89, 251, 110,
+            226, 49, 69, 226, 224, 250, 219, 252, 137, 18, 129, 43, 16,
+        ],
+        [
+            232, 38, 209, 98, 87, 176, 166, 69, 137, 12, 213, 116, 97, 229, 25, 53, 64, 231, 213,
+            255, 182, 234, 179, 255, 159, 162, 70, 169, 254, 193, 83, 31,
+        ],
+        [
+            120, 35, 170, 169, 134, 229, 114, 38, 97, 2, 84, 36, 156, 80, 255, 130, 168, 156, 195,
+            7, 97, 120, 214, 215, 145, 152, 211, 201, 5, 36, 62, 32,
+        ],
+        [
+            57, 117, 255, 121, 168, 160, 43, 168, 42, 239, 58, 130, 73, 244, 242, 252, 9, 27, 79,
+            245, 226, 201, 189, 164, 57, 142, 150, 162, 209, 17, 121, 53,
+        ],
+        [
+            36, 52, 2, 158, 240, 153, 97, 93, 33, 133, 153, 174, 3, 23, 116, 181, 157, 223, 70, 59,
+            100, 101, 102, 195, 6, 148, 63, 228, 72, 6, 27, 35,
+        ],
+        [
+            52, 197, 226, 140, 56, 213, 200, 104, 117, 7, 101, 250, 224, 176, 188, 134, 69, 59, 23,
+            121, 181, 197, 236, 229, 24, 199, 79, 243, 120, 143, 120, 4,
+        ],
+        [
+            148, 181, 32, 129, 234, 255, 140, 131, 155, 227, 16, 106, 1, 185, 148, 195, 165, 0,
+            152, 130, 138, 134, 208, 12, 171, 88, 26, 142, 46, 36, 140, 52,
+        ],
+        [
+            184, 10, 44, 43, 76, 195, 89, 67, 120, 15, 19, 199, 96, 229, 109, 115, 237, 50, 51,
+            156, 230, 142, 3, 95, 109, 79, 20, 130, 54, 41, 225, 62,
+        ],
+    ],
+    [
+        [
+            171, 227, 38, 163, 220, 64, 126, 70, 193, 140, 185, 136, 97, 117, 204, 177, 109, 139,
+            25, 38, 25, 5, 27, 31, 169, 30, 18, 188, 243, 99, 125, 29,
+        ],
+        [
+            22, 191, 88, 67, 150, 57, 68, 66, 95, 65, 24, 208, 188, 6, 1, 8, 62, 195, 83, 224, 113,
+            136, 61, 75, 90, 155, 228, 209, 155, 239, 250, 52,
+        ],
+        [
+            64, 110, 241, 54, 230, 252, 13, 172, 5, 83, 159, 231, 249, 166, 47, 196, 203, 230, 82,
+            234, 108, 75, 104, 217, 140, 93, 142, 42, 54, 10, 218, 13,
+        ],
+        [
+            119, 77, 69, 84, 160, 177, 65, 143, 32, 247, 4, 101, 44, 47, 38, 175, 53, 8, 239, 115,
+            177, 68, 166, 173, 245, 168, 188, 129, 49, 220, 136, 0,
+        ],
+        [
+            95, 4, 124, 89, 22, 199, 81, 164, 42, 73, 149, 244, 67, 141, 249, 132, 13, 55, 180, 2,
+            70, 238, 186, 129, 130, 196, 191, 36, 188, 89, 173, 3,
+        ],
+        [
+            185, 209, 66, 253, 215, 62, 233, 72, 67, 105, 81, 154, 41, 127, 66, 152, 203, 206, 232,
+            49, 28, 14, 132, 182, 245, 30, 42, 158, 61, 84, 55, 34,
+        ],
+        [
+            168, 36, 132, 217, 188, 230, 252, 8, 63, 232, 169, 205, 203, 35, 80, 7, 166, 179, 165,
+            178, 34, 108, 179, 252, 12, 77, 183, 64, 21, 134, 195, 58,
+        ],
+        [
+            167, 154, 142, 35, 246, 107, 255, 85, 225, 7, 179, 39, 11, 163, 211, 139, 38, 5, 130,
+            124, 212, 111, 10, 235, 206, 93, 247, 118, 97, 74, 76, 3,
+        ],
+    ],
+    [
+        [
+            17, 35, 231, 232, 187, 165, 56, 74, 129, 69, 48, 249, 182, 107, 89, 163, 51, 84, 170,
+            211, 242, 113, 166, 225, 78, 206, 206, 92, 51, 71, 168, 33,
+        ],
+        [
+            218, 32, 99, 108, 201, 243, 16, 42, 119, 238, 180, 204, 217, 64, 11, 181, 159, 187,
+            222, 68, 31, 23, 215, 14, 135, 43, 60, 234, 199, 136, 209, 56,
+        ],
+        [
+            229, 89, 20, 107, 93, 96, 226, 179, 225, 22, 59, 133, 30, 79, 105, 26, 42, 251, 35, 41,
+            45, 151, 73, 127, 72, 33, 32, 44, 114, 183, 200, 12,
+        ],
+        [
+            0, 214, 119, 87, 158, 203, 58, 209, 100, 45, 242, 75, 5, 118, 29, 75, 239, 159, 30,
+            192, 196, 58, 48, 65, 129, 192, 13, 14, 115, 79, 219, 26,
+        ],
+        [
+            98, 88, 236, 178, 70, 249, 24, 151, 194, 204, 95, 251, 142, 94, 94, 218, 19, 253, 216,
+            155, 109, 25, 166, 168, 213, 209, 169, 135, 244, 2, 153, 63,
+        ],
+        [
+            56, 137, 153, 59, 70, 236, 157, 224, 248, 77, 167, 238, 185, 216, 239, 54, 176, 54,
+            164, 172, 129, 29, 243, 226, 56, 188, 149, 113, 66, 53, 111, 29,
+        ],
+        [
+            175, 39, 133, 206, 20, 108, 5, 54, 187, 154, 174, 144, 23, 193, 58, 173, 223, 19, 181,
+            161, 102, 248, 146, 180, 241, 58, 121, 96, 8, 218, 201, 61,
+        ],
+        [
+            214, 255, 102, 226, 32, 197, 112, 142, 159, 244, 213, 201, 228, 8, 141, 112, 112, 6,
+            182, 31, 68, 215, 126, 66, 131, 203, 253, 206, 102, 155, 100, 9,
+        ],
+    ],
+    [
+        [
+            134, 183, 10, 76, 61, 159, 117, 15, 17, 79, 26, 161, 72, 129, 77, 56, 221, 0, 23, 32,
+            255, 12, 114, 208, 110, 133, 136, 7, 222, 63, 99, 63,
+        ],
+        [
+            144, 188, 53, 201, 167, 105, 34, 93, 26, 15, 121, 27, 37, 68, 230, 134, 119, 6, 76,
+            159, 120, 62, 200, 59, 205, 110, 251, 54, 132, 113, 216, 47,
+        ],
+        [
+            226, 242, 186, 127, 110, 179, 100, 138, 238, 127, 104, 131, 32, 98, 96, 244, 121, 154,
+            129, 71, 34, 157, 103, 53, 124, 131, 128, 159, 113, 77, 226, 52,
+        ],
+        [
+            149, 188, 192, 214, 255, 107, 1, 216, 118, 134, 46, 23, 126, 73, 234, 175, 39, 77, 232,
+            99, 36, 76, 27, 215, 134, 227, 12, 255, 98, 120, 110, 13,
+        ],
+        [
+            55, 19, 111, 30, 3, 196, 248, 249, 103, 123, 237, 222, 156, 152, 143, 182, 93, 209,
+            227, 184, 97, 233, 110, 31, 198, 108, 2, 144, 202, 161, 246, 48,
+        ],
+        [
+            89, 105, 183, 28, 13, 186, 20, 45, 187, 147, 254, 9, 196, 222, 10, 212, 208, 35, 59,
+            168, 234, 91, 53, 115, 119, 28, 240, 140, 226, 217, 16, 13,
+        ],
+        [
+            71, 90, 196, 184, 172, 101, 82, 49, 204, 76, 80, 24, 30, 132, 224, 136, 92, 236, 73,
+            240, 43, 152, 36, 240, 204, 168, 202, 133, 47, 56, 86, 21,
+        ],
+        [
+            137, 123, 99, 242, 15, 214, 23, 223, 103, 70, 184, 82, 212, 43, 109, 198, 1, 146, 88,
+            223, 141, 176, 98, 56, 8, 226, 123, 144, 58, 148, 80, 34,
+        ],
+    ],
+    [
+        [
+            112, 203, 118, 169, 67, 201, 121, 80, 95, 50, 206, 193, 132, 19, 44, 16, 100, 210, 169,
+            174, 43, 239, 197, 42, 153, 77, 189, 127, 134, 228, 51, 1,
+        ],
+        [
+            67, 82, 109, 220, 119, 200, 223, 134, 201, 18, 211, 184, 106, 158, 243, 17, 160, 51,
+            223, 227, 252, 83, 229, 84, 109, 162, 231, 240, 207, 99, 145, 49,
+        ],
+        [
+            127, 38, 205, 72, 71, 81, 43, 26, 72, 50, 220, 151, 66, 66, 41, 27, 99, 47, 96, 142, 1,
+            83, 210, 246, 201, 190, 8, 34, 223, 215, 84, 33,
+        ],
+        [
+            196, 65, 248, 47, 253, 158, 13, 126, 69, 77, 144, 88, 158, 188, 200, 138, 70, 7, 237,
+            81, 207, 18, 52, 77, 131, 187, 61, 208, 53, 15, 87, 28,
+        ],
+        [
+            142, 69, 186, 111, 164, 34, 17, 159, 95, 229, 106, 79, 178, 236, 40, 122, 205, 228, 56,
+            78, 187, 203, 150, 216, 228, 220, 77, 102, 101, 57, 73, 22,
+        ],
+        [
+            34, 97, 52, 100, 250, 150, 39, 93, 193, 188, 241, 25, 57, 178, 210, 228, 116, 102, 120,
+            194, 43, 92, 58, 223, 79, 172, 233, 206, 42, 252, 212, 23,
+        ],
+        [
+            255, 63, 76, 185, 74, 23, 208, 38, 220, 177, 232, 82, 75, 190, 205, 7, 107, 83, 37, 46,
+            184, 118, 15, 69, 3, 148, 140, 160, 31, 107, 64, 19,
+        ],
+        [
+            12, 74, 20, 81, 11, 141, 102, 144, 211, 239, 203, 214, 114, 193, 197, 27, 220, 229,
+            202, 253, 48, 109, 46, 125, 149, 151, 47, 224, 141, 201, 39, 41,
+        ],
+    ],
+    [
+        [
+            48, 45, 200, 86, 94, 46, 69, 245, 90, 200, 213, 189, 150, 174, 57, 226, 248, 5, 169,
+            162, 250, 242, 92, 40, 218, 149, 132, 31, 157, 36, 254, 60,
+        ],
+        [
+            81, 121, 54, 199, 38, 109, 10, 32, 0, 15, 80, 210, 86, 161, 85, 51, 217, 129, 254, 180,
+            183, 108, 178, 137, 49, 248, 205, 212, 55, 77, 123, 17,
+        ],
+        [
+            37, 248, 159, 204, 26, 229, 145, 238, 125, 74, 43, 139, 95, 23, 214, 19, 87, 91, 160,
+            213, 235, 11, 65, 199, 200, 90, 231, 254, 125, 91, 125, 49,
+        ],
+        [
+            178, 12, 107, 228, 177, 201, 160, 30, 244, 72, 143, 232, 142, 179, 253, 92, 117, 50,
+            44, 170, 122, 254, 72, 125, 220, 234, 140, 49, 161, 58, 153, 32,
+        ],
+        [
+            247, 237, 132, 219, 101, 146, 116, 139, 68, 147, 48, 176, 77, 83, 30, 181, 165, 91, 62,
+            137, 228, 23, 138, 14, 88, 132, 111, 111, 140, 123, 228, 58,
+        ],
+        [
+            18, 233, 193, 160, 178, 238, 235, 150, 3, 31, 61, 226, 24, 146, 32, 3, 177, 46, 49, 89,
+            49, 45, 71, 83, 119, 186, 203, 200, 163, 237, 116, 21,
+        ],
+        [
+            115, 144, 78, 114, 159, 231, 131, 65, 180, 121, 24, 139, 139, 29, 182, 131, 218, 81,
+            58, 73, 107, 254, 32, 46, 177, 216, 202, 137, 182, 124, 221, 10,
+        ],
+        [
+            223, 14, 173, 171, 179, 199, 71, 176, 71, 161, 186, 240, 0, 32, 204, 124, 160, 63, 112,
+            86, 71, 213, 245, 55, 138, 233, 228, 28, 149, 8, 9, 41,
+        ],
+    ],
+    [
+        [
+            21, 6, 131, 62, 42, 77, 174, 152, 2, 182, 147, 70, 52, 196, 221, 208, 21, 218, 63, 239,
+            142, 100, 80, 227, 206, 92, 178, 63, 213, 66, 228, 42,
+        ],
+        [
+            234, 98, 104, 233, 255, 69, 42, 117, 242, 174, 71, 237, 128, 208, 210, 92, 215, 80, 68,
+            54, 109, 133, 117, 120, 11, 193, 130, 150, 123, 248, 52, 50,
+        ],
+        [
+            42, 97, 215, 197, 142, 218, 220, 4, 99, 17, 179, 35, 227, 236, 159, 122, 227, 16, 41,
+            191, 142, 113, 7, 118, 168, 0, 200, 69, 87, 232, 203, 18,
+        ],
+        [
+            204, 101, 216, 98, 75, 52, 7, 133, 107, 63, 36, 58, 158, 102, 166, 65, 187, 189, 120,
+            36, 170, 181, 122, 231, 195, 77, 77, 164, 123, 199, 51, 45,
+        ],
+        [
+            69, 211, 219, 4, 90, 40, 61, 238, 40, 23, 38, 242, 82, 66, 124, 186, 78, 178, 158, 75,
+            9, 78, 88, 175, 124, 209, 52, 139, 154, 205, 152, 1,
+        ],
+        [
+            40, 177, 100, 175, 71, 133, 71, 147, 120, 232, 113, 156, 156, 171, 231, 14, 14, 48,
+            254, 27, 109, 239, 11, 41, 141, 122, 231, 120, 162, 61, 172, 53,
+        ],
+        [
+            138, 3, 230, 77, 88, 246, 242, 91, 53, 109, 136, 187, 226, 159, 63, 30, 210, 149, 85,
+            132, 19, 243, 108, 225, 16, 67, 206, 187, 22, 250, 158, 38,
+        ],
+        [
+            54, 230, 61, 20, 21, 69, 248, 130, 44, 13, 179, 216, 126, 95, 167, 29, 128, 81, 136,
+            81, 198, 181, 167, 108, 21, 92, 89, 163, 48, 9, 25, 49,
+        ],
+    ],
+    [
+        [
+            213, 68, 175, 186, 156, 48, 75, 216, 75, 120, 118, 229, 190, 251, 69, 197, 207, 233,
+            255, 33, 12, 44, 176, 102, 172, 203, 246, 139, 9, 148, 188, 21,
+        ],
+        [
+            59, 116, 78, 231, 0, 190, 4, 183, 254, 176, 57, 241, 16, 160, 195, 151, 109, 113, 65,
+            227, 234, 248, 162, 150, 59, 223, 226, 68, 211, 220, 124, 35,
+        ],
+        [
+            157, 241, 116, 218, 111, 20, 63, 220, 180, 253, 193, 124, 53, 174, 146, 115, 25, 21, 4,
+            184, 28, 62, 68, 1, 136, 40, 112, 99, 155, 130, 29, 25,
+        ],
+        [
+            107, 14, 195, 187, 170, 217, 205, 148, 49, 208, 203, 147, 220, 1, 216, 9, 235, 2, 23,
+            137, 226, 242, 113, 173, 119, 193, 192, 240, 96, 34, 203, 27,
+        ],
+        [
+            220, 189, 158, 255, 179, 2, 118, 209, 172, 32, 234, 150, 180, 140, 186, 88, 11, 146,
+            216, 229, 126, 96, 132, 108, 80, 11, 133, 21, 208, 31, 104, 23,
+        ],
+        [
+            34, 104, 190, 51, 173, 94, 133, 55, 100, 80, 120, 221, 114, 236, 129, 217, 2, 20, 117,
+            96, 59, 162, 69, 216, 80, 193, 215, 191, 222, 251, 213, 54,
+        ],
+        [
+            217, 173, 46, 115, 62, 139, 158, 81, 137, 145, 61, 242, 63, 26, 154, 80, 87, 23, 255,
+            158, 21, 151, 39, 16, 176, 188, 206, 50, 91, 132, 244, 48,
+        ],
+        [
+            125, 136, 4, 138, 60, 132, 107, 72, 160, 2, 185, 213, 99, 167, 64, 247, 133, 173, 139,
+            25, 250, 132, 174, 254, 31, 85, 94, 85, 52, 212, 209, 61,
+        ],
+    ],
+    [
+        [
+            220, 160, 48, 26, 85, 79, 138, 23, 139, 157, 143, 9, 40, 55, 28, 86, 243, 144, 211,
+            131, 58, 6, 188, 247, 0, 45, 174, 144, 19, 188, 181, 57,
+        ],
+        [
+            103, 128, 25, 9, 206, 137, 248, 46, 126, 157, 159, 0, 236, 255, 135, 58, 181, 227, 135,
+            176, 113, 94, 237, 66, 47, 151, 18, 229, 19, 72, 170, 8,
+        ],
+        [
+            46, 122, 169, 159, 37, 178, 130, 155, 49, 215, 123, 43, 108, 225, 225, 91, 74, 95, 1,
+            190, 16, 230, 9, 231, 61, 153, 72, 119, 42, 120, 10, 41,
+        ],
+        [
+            189, 179, 165, 203, 192, 23, 235, 85, 2, 155, 19, 118, 235, 123, 65, 219, 126, 163,
+            149, 241, 213, 44, 143, 103, 139, 91, 15, 175, 111, 183, 238, 35,
+        ],
+        [
+            52, 114, 250, 93, 151, 139, 135, 118, 40, 231, 118, 234, 63, 201, 15, 42, 126, 157,
+            136, 113, 54, 209, 76, 78, 136, 13, 28, 3, 57, 119, 28, 32,
+        ],
+        [
+            241, 223, 85, 153, 43, 88, 1, 195, 181, 239, 22, 16, 218, 11, 3, 91, 249, 42, 20, 25,
+            215, 41, 132, 194, 106, 145, 165, 100, 33, 215, 243, 54,
+        ],
+        [
+            185, 84, 49, 216, 187, 52, 40, 181, 184, 77, 168, 77, 5, 229, 36, 180, 82, 129, 99,
+            126, 222, 17, 2, 185, 176, 18, 198, 220, 41, 192, 84, 1,
+        ],
+        [
+            116, 111, 197, 38, 37, 6, 27, 181, 167, 142, 204, 148, 127, 82, 201, 197, 192, 133, 68,
+            126, 57, 93, 146, 225, 67, 223, 187, 252, 131, 16, 136, 46,
+        ],
+    ],
+    [
+        [
+            229, 194, 151, 215, 0, 49, 54, 48, 137, 138, 168, 12, 253, 114, 171, 220, 131, 85, 61,
+            41, 90, 111, 235, 175, 142, 32, 64, 15, 171, 10, 37, 55,
+        ],
+        [
+            179, 30, 248, 30, 85, 253, 191, 10, 66, 20, 9, 239, 72, 78, 126, 155, 5, 22, 16, 55,
+            236, 155, 48, 104, 120, 209, 179, 94, 72, 144, 136, 36,
+        ],
+        [
+            5, 85, 228, 82, 72, 151, 179, 40, 184, 104, 86, 64, 251, 178, 255, 222, 120, 33, 172,
+            13, 70, 48, 74, 179, 143, 139, 203, 101, 242, 164, 233, 11,
+        ],
+        [
+            155, 215, 194, 45, 223, 134, 9, 251, 102, 98, 255, 26, 99, 131, 158, 41, 28, 241, 244,
+            3, 14, 14, 150, 5, 198, 23, 195, 55, 67, 107, 145, 50,
+        ],
+        [
+            242, 66, 220, 115, 24, 115, 105, 247, 185, 102, 202, 149, 182, 74, 79, 71, 118, 46, 12,
+            174, 168, 154, 12, 49, 8, 175, 173, 107, 106, 231, 34, 46,
+        ],
+        [
+            218, 10, 168, 153, 218, 247, 27, 186, 177, 229, 129, 137, 17, 34, 173, 65, 77, 164,
+            106, 206, 109, 156, 174, 78, 141, 110, 2, 177, 136, 189, 222, 27,
+        ],
+        [
+            63, 206, 227, 252, 14, 115, 85, 145, 147, 2, 233, 37, 99, 52, 187, 61, 160, 216, 254,
+            113, 47, 202, 231, 30, 8, 95, 186, 3, 95, 93, 92, 46,
+        ],
+        [
+            194, 115, 177, 48, 84, 53, 255, 14, 255, 104, 86, 24, 225, 135, 136, 207, 223, 82, 248,
+            120, 107, 19, 233, 239, 239, 174, 182, 203, 11, 70, 33, 29,
+        ],
+    ],
+    [
+        [
+            255, 67, 169, 212, 128, 117, 218, 146, 73, 118, 113, 48, 51, 232, 221, 22, 69, 49, 118,
+            127, 159, 164, 25, 203, 45, 231, 32, 76, 20, 3, 182, 35,
+        ],
+        [
+            128, 192, 45, 222, 4, 111, 75, 67, 105, 135, 179, 9, 231, 6, 181, 241, 43, 60, 145,
+            129, 101, 107, 239, 197, 249, 142, 15, 73, 190, 55, 8, 32,
+        ],
+        [
+            75, 171, 221, 252, 200, 45, 18, 225, 108, 75, 63, 243, 49, 199, 160, 123, 50, 138, 70,
+            237, 85, 182, 107, 126, 116, 200, 23, 254, 122, 68, 35, 39,
+        ],
+        [
+            220, 204, 97, 165, 14, 201, 153, 93, 114, 166, 64, 88, 30, 193, 77, 84, 243, 228, 14,
+            33, 240, 75, 108, 168, 10, 68, 170, 110, 117, 133, 17, 14,
+        ],
+        [
+            7, 8, 119, 58, 124, 100, 81, 248, 160, 28, 127, 136, 223, 190, 172, 109, 44, 130, 189,
+            200, 120, 37, 118, 199, 93, 174, 13, 227, 228, 109, 77, 24,
+        ],
+        [
+            117, 48, 90, 251, 34, 191, 185, 106, 156, 198, 3, 244, 147, 116, 106, 125, 9, 98, 103,
+            25, 67, 247, 161, 20, 215, 143, 98, 56, 111, 192, 80, 12,
+        ],
+        [
+            75, 150, 146, 192, 192, 73, 4, 222, 31, 115, 161, 55, 189, 28, 254, 27, 140, 18, 245,
+            197, 156, 136, 196, 80, 24, 215, 69, 183, 144, 198, 218, 25,
+        ],
+        [
+            4, 59, 137, 5, 85, 187, 155, 254, 174, 111, 148, 55, 146, 77, 162, 139, 54, 133, 46,
+            24, 60, 78, 15, 39, 58, 21, 189, 95, 85, 66, 75, 11,
+        ],
+    ],
+    [
+        [
+            38, 12, 159, 91, 61, 126, 7, 197, 252, 179, 45, 40, 117, 226, 17, 100, 55, 150, 227,
+            217, 209, 62, 51, 50, 221, 205, 172, 219, 49, 51, 83, 32,
+        ],
+        [
+            57, 122, 44, 109, 85, 120, 81, 245, 24, 47, 86, 189, 244, 231, 243, 83, 100, 219, 109,
+            83, 65, 99, 251, 105, 85, 7, 198, 149, 255, 76, 29, 29,
+        ],
+        [
+            83, 248, 191, 219, 235, 44, 62, 170, 200, 75, 122, 207, 106, 115, 35, 184, 127, 201,
+            143, 180, 11, 25, 135, 78, 235, 106, 174, 203, 163, 11, 14, 1,
+        ],
+        [
+            3, 65, 229, 5, 70, 240, 200, 34, 11, 204, 14, 118, 49, 109, 108, 179, 116, 175, 211,
+            123, 3, 227, 30, 105, 244, 63, 147, 137, 174, 6, 58, 49,
+        ],
+        [
+            255, 44, 184, 49, 125, 73, 101, 79, 205, 191, 13, 181, 32, 246, 234, 221, 236, 168,
+            174, 34, 80, 203, 242, 216, 243, 28, 146, 97, 71, 119, 33, 37,
+        ],
+        [
+            66, 233, 66, 56, 132, 114, 180, 163, 103, 56, 133, 98, 139, 1, 125, 189, 147, 192, 40,
+            64, 96, 55, 15, 157, 50, 250, 230, 167, 42, 104, 5, 31,
+        ],
+        [
+            6, 183, 137, 208, 244, 75, 158, 179, 218, 29, 142, 60, 229, 162, 211, 232, 18, 152, 34,
+            85, 133, 122, 3, 251, 178, 144, 51, 171, 190, 238, 27, 3,
+        ],
+        [
+            129, 246, 203, 236, 115, 97, 172, 103, 209, 116, 141, 209, 172, 34, 244, 120, 19, 127,
+            229, 88, 113, 135, 129, 213, 94, 46, 29, 66, 93, 142, 188, 36,
+        ],
+    ],
+    [
+        [
+            194, 202, 86, 162, 6, 28, 7, 93, 217, 68, 231, 140, 53, 182, 117, 79, 205, 232, 162,
+            118, 84, 16, 245, 15, 199, 85, 234, 133, 4, 11, 210, 35,
+        ],
+        [
+            157, 145, 197, 39, 234, 104, 156, 193, 122, 16, 169, 90, 174, 93, 243, 193, 116, 187,
+            240, 105, 166, 97, 121, 195, 247, 81, 101, 251, 216, 51, 21, 54,
+        ],
+        [
+            61, 143, 204, 33, 38, 137, 156, 7, 19, 73, 71, 241, 59, 229, 100, 52, 53, 38, 189, 124,
+            89, 219, 37, 80, 179, 34, 169, 198, 3, 223, 233, 10,
+        ],
+        [
+            204, 47, 178, 44, 209, 241, 91, 185, 131, 159, 137, 31, 191, 153, 83, 229, 11, 23, 175,
+            81, 72, 20, 30, 65, 99, 191, 42, 182, 180, 250, 108, 44,
+        ],
+        [
+            223, 219, 203, 230, 21, 177, 178, 244, 62, 182, 248, 215, 254, 41, 219, 104, 64, 104,
+            105, 86, 234, 81, 171, 153, 179, 116, 16, 103, 192, 250, 50, 38,
+        ],
+        [
+            179, 15, 111, 91, 124, 136, 230, 38, 62, 52, 144, 140, 164, 57, 139, 56, 98, 70, 189,
+            251, 255, 55, 115, 97, 196, 57, 221, 165, 145, 80, 26, 46,
+        ],
+        [
+            21, 103, 9, 56, 143, 106, 41, 164, 169, 198, 100, 253, 71, 31, 238, 128, 240, 35, 71,
+            86, 44, 61, 61, 237, 182, 110, 207, 53, 238, 201, 246, 40,
+        ],
+        [
+            204, 177, 216, 11, 64, 47, 94, 27, 176, 61, 203, 218, 169, 142, 37, 95, 21, 172, 57, 9,
+            223, 126, 135, 241, 193, 203, 213, 144, 92, 248, 186, 35,
+        ],
+    ],
+    [
+        [
+            228, 75, 109, 106, 255, 254, 130, 13, 9, 11, 211, 140, 45, 161, 63, 69, 215, 182, 22,
+            59, 74, 170, 177, 7, 2, 115, 14, 109, 242, 13, 68, 25,
+        ],
+        [
+            6, 222, 179, 66, 171, 58, 140, 170, 192, 130, 16, 180, 206, 179, 253, 194, 92, 54, 196,
+            149, 116, 69, 233, 218, 100, 13, 63, 9, 144, 54, 85, 33,
+        ],
+        [
+            95, 33, 20, 56, 49, 62, 85, 56, 154, 215, 173, 198, 73, 95, 232, 119, 212, 167, 148,
+            120, 147, 204, 164, 27, 136, 69, 78, 130, 7, 206, 240, 36,
+        ],
+        [
+            109, 38, 215, 164, 103, 152, 172, 47, 244, 227, 72, 242, 229, 117, 198, 228, 89, 185,
+            207, 83, 21, 173, 187, 111, 41, 54, 183, 144, 61, 53, 193, 59,
+        ],
+        [
+            67, 218, 51, 136, 12, 221, 238, 123, 201, 104, 185, 13, 178, 54, 4, 239, 242, 103, 151,
+            232, 203, 231, 207, 63, 60, 240, 41, 187, 153, 2, 249, 22,
+        ],
+        [
+            175, 206, 167, 190, 93, 40, 120, 180, 117, 248, 121, 191, 230, 16, 16, 194, 194, 12,
+            146, 20, 128, 18, 44, 31, 48, 232, 16, 11, 84, 110, 68, 8,
+        ],
+        [
+            136, 156, 120, 102, 134, 205, 174, 55, 52, 71, 4, 165, 3, 97, 61, 249, 52, 110, 212,
+            234, 83, 197, 244, 93, 107, 88, 47, 120, 63, 80, 100, 28,
+        ],
+        [
+            237, 132, 106, 72, 25, 163, 185, 172, 196, 20, 116, 129, 247, 220, 212, 128, 76, 154,
+            10, 50, 26, 220, 50, 179, 252, 180, 239, 44, 147, 71, 71, 38,
+        ],
+    ],
+    [
+        [
+            195, 126, 226, 101, 232, 151, 83, 172, 247, 79, 222, 218, 214, 224, 68, 44, 234, 50,
+            156, 252, 136, 137, 56, 174, 225, 55, 8, 111, 153, 167, 160, 43,
+        ],
+        [
+            241, 114, 11, 165, 35, 58, 224, 96, 147, 243, 117, 49, 124, 82, 194, 138, 217, 81, 168,
+            235, 194, 7, 11, 112, 218, 164, 244, 225, 127, 222, 190, 7,
+        ],
+        [
+            210, 109, 146, 106, 46, 44, 15, 251, 15, 32, 213, 72, 138, 6, 104, 145, 147, 59, 192,
+            77, 53, 213, 36, 69, 191, 247, 20, 79, 43, 242, 181, 47,
+        ],
+        [
+            204, 85, 163, 37, 144, 235, 182, 50, 84, 214, 30, 210, 246, 198, 20, 48, 217, 247, 117,
+            180, 207, 150, 47, 224, 35, 81, 66, 231, 203, 126, 250, 7,
+        ],
+        [
+            251, 235, 48, 197, 117, 61, 99, 74, 158, 107, 9, 243, 137, 155, 185, 232, 53, 14, 195,
+            20, 2, 83, 162, 104, 55, 30, 229, 35, 167, 108, 91, 63,
+        ],
+        [
+            230, 107, 185, 57, 172, 171, 223, 240, 186, 182, 106, 85, 77, 252, 75, 255, 117, 50,
+            88, 60, 41, 76, 188, 39, 194, 16, 46, 117, 220, 130, 64, 10,
+        ],
+        [
+            228, 156, 144, 195, 138, 103, 97, 79, 225, 101, 43, 50, 232, 2, 152, 215, 232, 116,
+            177, 254, 13, 17, 224, 87, 217, 149, 255, 187, 18, 241, 16, 15,
+        ],
+        [
+            83, 173, 113, 34, 69, 81, 9, 148, 205, 79, 152, 7, 254, 207, 74, 31, 247, 197, 139, 66,
+            18, 219, 218, 37, 222, 252, 172, 80, 184, 147, 51, 41,
+        ],
+    ],
+    [
+        [
+            0, 89, 55, 87, 138, 18, 8, 243, 120, 2, 157, 224, 104, 227, 73, 235, 249, 187, 159,
+            136, 40, 1, 155, 200, 193, 125, 4, 81, 219, 169, 8, 56,
+        ],
+        [
+            116, 29, 157, 39, 107, 56, 158, 126, 218, 221, 193, 170, 23, 95, 163, 26, 206, 168,
+            133, 96, 36, 195, 59, 152, 44, 66, 146, 48, 61, 175, 172, 43,
+        ],
+        [
+            213, 48, 102, 181, 10, 10, 192, 234, 79, 4, 153, 169, 240, 170, 155, 171, 56, 254, 3,
+            110, 104, 41, 167, 162, 135, 231, 107, 109, 118, 222, 146, 3,
+        ],
+        [
+            165, 81, 105, 154, 149, 116, 129, 132, 226, 15, 34, 154, 113, 82, 142, 224, 187, 254,
+            157, 40, 127, 53, 13, 50, 6, 116, 44, 28, 171, 25, 57, 11,
+        ],
+        [
+            137, 173, 137, 148, 183, 45, 212, 173, 208, 103, 238, 190, 209, 217, 109, 115, 131,
+            170, 167, 157, 48, 105, 2, 225, 33, 144, 56, 104, 74, 90, 101, 45,
+        ],
+        [
+            37, 210, 32, 187, 166, 239, 15, 248, 101, 84, 62, 170, 65, 179, 205, 5, 155, 124, 68,
+            191, 56, 128, 71, 92, 106, 68, 1, 162, 177, 208, 131, 32,
+        ],
+        [
+            20, 40, 151, 188, 73, 233, 86, 220, 88, 77, 88, 18, 101, 114, 204, 242, 37, 68, 158,
+            216, 166, 213, 147, 74, 136, 177, 146, 127, 183, 9, 51, 51,
+        ],
+        [
+            35, 250, 252, 114, 37, 150, 90, 62, 182, 153, 4, 114, 89, 207, 137, 211, 221, 60, 38,
+            181, 33, 54, 11, 251, 225, 50, 39, 247, 36, 64, 59, 60,
+        ],
+    ],
+    [
+        [
+            3, 44, 176, 61, 155, 104, 167, 47, 197, 180, 112, 16, 213, 166, 109, 139, 47, 145, 213,
+            181, 28, 249, 251, 77, 66, 197, 100, 68, 46, 151, 197, 40,
+        ],
+        [
+            229, 35, 247, 127, 1, 20, 236, 233, 188, 17, 88, 74, 87, 15, 3, 29, 133, 223, 178, 245,
+            50, 63, 172, 25, 149, 238, 2, 154, 212, 51, 108, 23,
+        ],
+        [
+            186, 13, 97, 147, 88, 88, 217, 127, 47, 123, 233, 132, 148, 151, 181, 146, 56, 81, 20,
+            162, 72, 61, 131, 202, 209, 20, 131, 189, 7, 97, 130, 13,
+        ],
+        [
+            139, 153, 27, 151, 116, 240, 246, 218, 212, 68, 91, 52, 237, 242, 111, 7, 137, 76, 231,
+            210, 148, 216, 28, 108, 27, 231, 141, 34, 80, 138, 59, 56,
+        ],
+        [
+            253, 100, 45, 165, 2, 73, 249, 202, 254, 16, 147, 135, 31, 124, 231, 212, 212, 0, 79,
+            103, 51, 195, 6, 238, 158, 204, 61, 69, 129, 149, 202, 11,
+        ],
+        [
+            103, 190, 49, 80, 44, 51, 242, 50, 73, 31, 21, 63, 205, 25, 99, 107, 172, 204, 132, 57,
+            220, 222, 181, 200, 245, 232, 39, 33, 20, 227, 78, 40,
+        ],
+        [
+            85, 212, 71, 43, 217, 39, 72, 56, 143, 82, 141, 13, 180, 31, 10, 76, 187, 243, 38, 201,
+            119, 39, 155, 236, 217, 54, 223, 154, 194, 164, 134, 62,
+        ],
+        [
+            77, 5, 128, 184, 241, 69, 158, 253, 102, 134, 157, 97, 98, 242, 100, 188, 115, 143,
+            210, 202, 43, 167, 1, 228, 159, 25, 90, 97, 135, 29, 156, 31,
+        ],
+    ],
+    [
+        [
+            36, 72, 161, 85, 169, 138, 112, 236, 110, 59, 12, 214, 194, 22, 221, 138, 62, 109, 108,
+            237, 74, 210, 136, 75, 62, 166, 199, 109, 221, 86, 136, 29,
+        ],
+        [
+            140, 2, 200, 184, 189, 53, 142, 10, 137, 117, 249, 87, 40, 107, 43, 120, 46, 109, 193,
+            103, 206, 125, 50, 217, 13, 183, 23, 93, 30, 254, 235, 19,
+        ],
+        [
+            135, 255, 108, 83, 58, 92, 159, 201, 196, 233, 222, 140, 225, 114, 46, 196, 1, 113,
+            133, 89, 242, 84, 195, 115, 216, 206, 91, 136, 138, 11, 182, 40,
+        ],
+        [
+            43, 56, 228, 25, 206, 194, 106, 233, 211, 143, 222, 188, 69, 112, 67, 95, 44, 35, 141,
+            217, 190, 181, 140, 62, 217, 117, 135, 249, 33, 200, 62, 24,
+        ],
+        [
+            27, 86, 219, 191, 131, 228, 7, 155, 210, 136, 213, 240, 244, 130, 179, 191, 182, 222,
+            17, 154, 6, 97, 15, 123, 71, 182, 172, 41, 208, 234, 109, 21,
+        ],
+        [
+            223, 22, 81, 97, 125, 169, 6, 44, 41, 71, 184, 66, 241, 108, 28, 88, 120, 93, 200, 86,
+            150, 164, 255, 54, 241, 182, 103, 35, 29, 246, 255, 23,
+        ],
+        [
+            210, 52, 232, 184, 171, 196, 52, 49, 91, 18, 72, 164, 48, 119, 62, 14, 82, 171, 43, 64,
+            136, 163, 208, 132, 255, 220, 172, 227, 37, 160, 4, 13,
+        ],
+        [
+            158, 181, 213, 223, 176, 57, 134, 98, 137, 31, 26, 52, 93, 80, 212, 202, 96, 189, 24,
+            72, 94, 211, 23, 8, 135, 87, 25, 138, 244, 103, 178, 10,
+        ],
+    ],
+    [
+        [
+            240, 216, 75, 131, 74, 33, 115, 241, 209, 7, 112, 77, 251, 35, 7, 247, 247, 86, 143,
+            130, 144, 13, 181, 122, 153, 89, 125, 105, 99, 213, 33, 55,
+        ],
+        [
+            145, 235, 201, 158, 59, 22, 0, 15, 228, 200, 174, 78, 89, 87, 26, 249, 11, 155, 71, 79,
+            3, 34, 190, 254, 234, 73, 46, 92, 61, 216, 41, 17,
+        ],
+        [
+            43, 56, 20, 48, 194, 81, 86, 213, 164, 121, 220, 75, 76, 201, 36, 142, 56, 70, 75, 194,
+            140, 87, 136, 174, 210, 127, 214, 65, 193, 41, 107, 63,
+        ],
+        [
+            213, 92, 219, 226, 204, 5, 20, 13, 110, 238, 153, 209, 70, 249, 219, 212, 107, 56, 7,
+            179, 87, 36, 234, 35, 89, 18, 114, 25, 230, 192, 242, 11,
+        ],
+        [
+            226, 223, 162, 191, 16, 10, 133, 242, 11, 71, 12, 55, 220, 63, 111, 23, 30, 154, 90,
+            151, 140, 23, 118, 109, 212, 51, 99, 222, 98, 158, 237, 48,
+        ],
+        [
+            20, 38, 109, 230, 153, 122, 68, 236, 179, 59, 137, 231, 25, 246, 164, 211, 103, 164,
+            113, 21, 139, 125, 13, 45, 47, 207, 173, 18, 205, 128, 112, 16,
+        ],
+        [
+            133, 0, 26, 33, 217, 221, 37, 96, 168, 164, 192, 185, 154, 124, 126, 12, 113, 167, 105,
+            37, 99, 38, 76, 76, 244, 244, 98, 94, 185, 223, 178, 50,
+        ],
+        [
+            120, 250, 66, 188, 11, 58, 177, 140, 133, 4, 35, 210, 16, 107, 110, 139, 177, 78, 164,
+            108, 156, 193, 85, 154, 42, 199, 216, 70, 150, 47, 234, 38,
+        ],
+    ],
+    [
+        [
+            91, 250, 197, 122, 129, 9, 102, 216, 154, 110, 193, 132, 68, 224, 180, 95, 240, 62,
+            136, 1, 176, 233, 188, 19, 194, 229, 140, 112, 44, 133, 125, 24,
+        ],
+        [
+            249, 15, 38, 45, 54, 238, 216, 27, 31, 126, 65, 99, 176, 76, 76, 214, 121, 5, 114, 71,
+            130, 26, 237, 49, 235, 91, 254, 1, 144, 4, 163, 45,
+        ],
+        [
+            255, 229, 192, 133, 154, 196, 136, 105, 117, 96, 229, 23, 193, 198, 227, 47, 103, 66,
+            232, 204, 152, 70, 129, 24, 164, 199, 122, 63, 191, 92, 135, 20,
+        ],
+        [
+            145, 44, 90, 2, 241, 40, 255, 122, 79, 26, 250, 253, 187, 122, 164, 178, 138, 125, 75,
+            226, 146, 177, 191, 224, 93, 101, 229, 157, 138, 155, 12, 16,
+        ],
+        [
+            139, 122, 121, 78, 6, 21, 126, 230, 160, 18, 97, 42, 15, 118, 106, 37, 136, 251, 240,
+            227, 57, 51, 233, 199, 158, 70, 127, 104, 78, 185, 127, 8,
+        ],
+        [
+            200, 199, 55, 107, 21, 71, 88, 106, 158, 74, 81, 41, 158, 199, 169, 181, 24, 9, 235,
+            60, 232, 189, 129, 3, 44, 218, 123, 77, 232, 208, 128, 9,
+        ],
+        [
+            87, 199, 112, 222, 83, 57, 76, 182, 157, 113, 119, 150, 108, 143, 237, 75, 56, 50, 38,
+            66, 172, 194, 17, 165, 112, 37, 228, 185, 86, 2, 145, 62,
+        ],
+        [
+            140, 36, 76, 105, 203, 131, 114, 245, 40, 53, 57, 156, 212, 119, 252, 184, 23, 242, 29,
+            102, 122, 221, 83, 101, 87, 196, 251, 116, 162, 218, 192, 1,
+        ],
+    ],
+    [
+        [
+            97, 64, 127, 237, 110, 192, 220, 140, 59, 142, 248, 62, 234, 132, 188, 82, 67, 201,
+            217, 7, 201, 173, 228, 72, 105, 116, 5, 79, 175, 99, 110, 47,
+        ],
+        [
+            150, 89, 171, 150, 182, 170, 198, 17, 165, 5, 128, 18, 226, 2, 104, 242, 43, 208, 9,
+            148, 202, 37, 98, 172, 180, 251, 0, 83, 175, 210, 66, 58,
+        ],
+        [
+            17, 173, 81, 22, 153, 10, 186, 31, 241, 216, 106, 49, 89, 190, 84, 172, 253, 183, 24,
+            143, 238, 231, 209, 108, 168, 173, 98, 162, 198, 181, 254, 51,
+        ],
+        [
+            137, 210, 105, 132, 29, 175, 97, 107, 112, 74, 210, 47, 145, 197, 47, 143, 80, 208,
+            204, 127, 23, 42, 5, 235, 125, 56, 241, 210, 114, 164, 16, 20,
+        ],
+        [
+            132, 20, 239, 85, 238, 127, 107, 177, 97, 117, 240, 180, 115, 92, 140, 47, 146, 146,
+            209, 250, 105, 68, 254, 108, 179, 193, 247, 12, 193, 30, 102, 43,
+        ],
+        [
+            145, 126, 226, 38, 179, 157, 78, 13, 224, 130, 207, 125, 26, 174, 162, 43, 138, 2, 152,
+            36, 231, 146, 204, 225, 233, 239, 158, 247, 28, 56, 142, 26,
+        ],
+        [
+            91, 164, 60, 87, 26, 175, 68, 99, 255, 62, 87, 54, 247, 40, 87, 155, 223, 249, 133, 28,
+            117, 204, 149, 227, 61, 21, 58, 52, 75, 149, 250, 10,
+        ],
+        [
+            237, 191, 63, 71, 77, 84, 26, 130, 131, 163, 245, 220, 12, 111, 61, 79, 234, 238, 214,
+            176, 160, 20, 135, 93, 135, 186, 136, 38, 105, 93, 100, 15,
+        ],
+    ],
+    [
+        [
+            223, 170, 66, 190, 77, 208, 106, 211, 248, 2, 37, 34, 99, 11, 115, 188, 248, 104, 129,
+            217, 110, 246, 30, 138, 250, 119, 187, 198, 184, 231, 12, 7,
+        ],
+        [
+            120, 133, 72, 207, 98, 167, 236, 27, 52, 201, 169, 82, 14, 47, 143, 2, 249, 62, 196,
+            64, 24, 11, 206, 173, 64, 91, 37, 228, 197, 230, 184, 38,
+        ],
+        [
+            213, 11, 163, 125, 42, 99, 72, 223, 58, 183, 0, 153, 96, 92, 125, 212, 108, 65, 112,
+            252, 99, 25, 113, 161, 55, 130, 32, 116, 104, 18, 188, 46,
+        ],
+        [
+            142, 172, 196, 64, 209, 79, 68, 196, 33, 58, 63, 86, 184, 182, 233, 48, 38, 46, 86,
+            198, 52, 81, 36, 136, 62, 49, 52, 132, 26, 44, 174, 8,
+        ],
+        [
+            79, 79, 157, 236, 132, 179, 39, 72, 58, 22, 193, 191, 5, 165, 177, 232, 113, 76, 196,
+            135, 205, 206, 127, 137, 17, 121, 184, 142, 66, 50, 42, 30,
+        ],
+        [
+            140, 147, 23, 191, 59, 161, 110, 195, 158, 68, 129, 248, 198, 61, 3, 54, 198, 151, 148,
+            60, 165, 221, 201, 66, 76, 191, 167, 108, 16, 122, 2, 60,
+        ],
+        [
+            230, 31, 126, 106, 18, 212, 227, 114, 225, 54, 2, 184, 55, 2, 36, 148, 145, 243, 68,
+            157, 10, 231, 99, 227, 102, 179, 220, 245, 187, 202, 90, 3,
+        ],
+        [
+            131, 100, 10, 199, 130, 82, 185, 106, 12, 181, 129, 230, 230, 197, 136, 203, 147, 216,
+            212, 52, 200, 130, 43, 61, 218, 76, 160, 84, 61, 47, 4, 9,
+        ],
+    ],
+    [
+        [
+            55, 204, 232, 108, 99, 18, 152, 227, 32, 80, 114, 26, 128, 128, 125, 191, 206, 224,
+            241, 115, 26, 136, 84, 154, 148, 210, 33, 18, 177, 227, 22, 13,
+        ],
+        [
+            144, 114, 124, 2, 51, 175, 130, 107, 154, 122, 141, 251, 83, 165, 109, 160, 140, 155,
+            37, 33, 174, 241, 100, 50, 181, 99, 106, 235, 13, 20, 231, 49,
+        ],
+        [
+            216, 224, 156, 16, 159, 31, 195, 82, 159, 97, 74, 220, 80, 110, 13, 143, 225, 137, 212,
+            157, 20, 130, 117, 243, 6, 194, 113, 149, 109, 157, 117, 48,
+        ],
+        [
+            203, 152, 160, 212, 237, 116, 129, 128, 172, 159, 96, 132, 111, 87, 224, 76, 161, 186,
+            43, 113, 253, 239, 239, 247, 147, 215, 35, 210, 24, 189, 172, 42,
+        ],
+        [
+            127, 6, 186, 229, 204, 141, 254, 171, 184, 224, 28, 52, 14, 248, 229, 15, 103, 100,
+            189, 80, 135, 173, 32, 47, 15, 100, 230, 42, 42, 133, 116, 62,
+        ],
+        [
+            98, 43, 219, 88, 207, 92, 180, 93, 183, 130, 209, 52, 218, 197, 222, 121, 202, 82, 89,
+            163, 146, 136, 199, 138, 92, 229, 97, 45, 202, 14, 107, 3,
+        ],
+        [
+            240, 123, 106, 60, 50, 212, 31, 248, 89, 162, 207, 92, 59, 93, 219, 186, 97, 70, 183,
+            76, 226, 50, 124, 180, 170, 240, 86, 206, 208, 73, 143, 58,
+        ],
+        [
+            68, 34, 149, 125, 18, 250, 72, 119, 93, 236, 204, 129, 252, 238, 125, 83, 69, 110, 14,
+            140, 202, 10, 54, 156, 156, 245, 188, 186, 65, 147, 214, 58,
+        ],
+    ],
+    [
+        [
+            100, 148, 161, 249, 209, 68, 164, 245, 215, 120, 36, 73, 193, 207, 199, 211, 164, 112,
+            198, 111, 27, 1, 28, 72, 43, 84, 188, 15, 250, 159, 188, 26,
+        ],
+        [
+            253, 232, 39, 91, 86, 20, 213, 250, 200, 253, 181, 117, 94, 30, 220, 129, 132, 201,
+            156, 56, 249, 165, 70, 192, 24, 61, 24, 145, 187, 24, 7, 13,
+        ],
+        [
+            235, 160, 136, 133, 75, 13, 222, 161, 238, 179, 2, 106, 74, 63, 0, 248, 96, 26, 138,
+            196, 53, 150, 8, 73, 124, 157, 77, 23, 208, 245, 181, 10,
+        ],
+        [
+            224, 180, 160, 165, 136, 230, 75, 44, 173, 23, 88, 47, 214, 41, 208, 76, 49, 85, 171,
+            140, 128, 17, 207, 88, 157, 169, 101, 251, 90, 52, 114, 26,
+        ],
+        [
+            251, 247, 129, 11, 189, 220, 160, 126, 110, 241, 216, 126, 145, 176, 90, 92, 255, 164,
+            67, 155, 143, 105, 231, 221, 19, 4, 209, 247, 129, 79, 58, 49,
+        ],
+        [
+            55, 58, 1, 79, 198, 128, 28, 83, 10, 33, 83, 28, 178, 155, 41, 216, 238, 187, 174, 61,
+            201, 86, 87, 236, 92, 163, 208, 44, 86, 114, 54, 54,
+        ],
+        [
+            57, 169, 95, 175, 193, 90, 221, 121, 48, 104, 22, 110, 222, 88, 201, 207, 154, 16, 36,
+            26, 255, 141, 57, 222, 7, 189, 115, 238, 20, 167, 80, 40,
+        ],
+        [
+            47, 181, 105, 56, 58, 145, 115, 74, 79, 83, 212, 58, 126, 171, 44, 110, 219, 142, 60,
+            180, 182, 14, 17, 229, 248, 82, 81, 14, 170, 126, 147, 54,
+        ],
+    ],
+    [
+        [
+            128, 20, 45, 17, 172, 230, 162, 59, 42, 143, 8, 76, 33, 186, 248, 116, 42, 73, 85, 228,
+            40, 39, 54, 88, 181, 90, 54, 87, 55, 177, 229, 48,
+        ],
+        [
+            102, 173, 199, 114, 55, 226, 31, 35, 68, 39, 12, 40, 107, 135, 27, 73, 112, 191, 44,
+            71, 245, 185, 21, 25, 255, 200, 88, 114, 110, 229, 161, 22,
+        ],
+        [
+            242, 13, 62, 36, 95, 118, 193, 245, 50, 127, 84, 98, 54, 154, 247, 225, 103, 249, 157,
+            187, 31, 199, 119, 56, 69, 142, 166, 156, 124, 182, 243, 30,
+        ],
+        [
+            169, 44, 97, 74, 69, 161, 72, 96, 128, 26, 55, 131, 150, 94, 84, 17, 234, 77, 2, 152,
+            17, 35, 18, 95, 191, 22, 140, 116, 110, 72, 104, 40,
+        ],
+        [
+            23, 99, 66, 21, 11, 139, 224, 24, 118, 30, 242, 229, 10, 83, 69, 203, 47, 187, 184,
+            170, 182, 204, 151, 96, 55, 203, 201, 45, 173, 76, 21, 62,
+        ],
+        [
+            174, 56, 175, 37, 18, 168, 92, 220, 126, 59, 122, 128, 188, 14, 11, 76, 224, 185, 52,
+            56, 171, 1, 76, 94, 170, 201, 52, 223, 143, 143, 65, 0,
+        ],
+        [
+            105, 252, 232, 233, 233, 184, 240, 251, 105, 190, 199, 191, 40, 128, 70, 127, 50, 153,
+            218, 78, 159, 152, 131, 91, 144, 74, 196, 12, 72, 3, 98, 60,
+        ],
+        [
+            86, 118, 204, 12, 44, 119, 238, 58, 14, 159, 108, 2, 205, 230, 12, 174, 118, 229, 14,
+            199, 87, 166, 74, 165, 221, 17, 87, 56, 146, 78, 20, 38,
+        ],
+    ],
+    [
+        [
+            17, 210, 205, 128, 203, 153, 80, 160, 236, 118, 114, 81, 57, 77, 237, 168, 120, 203,
+            243, 6, 165, 10, 37, 16, 19, 82, 193, 5, 125, 101, 1, 1,
+        ],
+        [
+            52, 57, 24, 226, 28, 210, 52, 197, 135, 76, 224, 159, 200, 11, 210, 84, 143, 91, 58,
+            149, 199, 147, 56, 115, 35, 77, 56, 29, 112, 225, 160, 21,
+        ],
+        [
+            103, 157, 74, 50, 168, 153, 10, 113, 111, 250, 147, 120, 97, 105, 30, 162, 84, 110,
+            181, 117, 25, 90, 57, 255, 1, 241, 61, 16, 55, 61, 65, 52,
+        ],
+        [
+            241, 161, 9, 88, 151, 232, 118, 42, 51, 245, 132, 81, 90, 123, 243, 30, 223, 21, 254,
+            64, 128, 203, 22, 56, 162, 74, 101, 8, 215, 253, 75, 7,
+        ],
+        [
+            168, 52, 111, 97, 141, 41, 127, 84, 216, 177, 7, 162, 249, 219, 97, 204, 187, 22, 8,
+            167, 81, 147, 177, 55, 76, 215, 129, 233, 167, 122, 131, 60,
+        ],
+        [
+            148, 157, 151, 154, 244, 40, 17, 161, 198, 20, 105, 212, 156, 158, 39, 23, 231, 137,
+            222, 84, 68, 27, 3, 207, 199, 230, 18, 44, 157, 202, 81, 52,
+        ],
+        [
+            77, 77, 79, 101, 89, 159, 81, 121, 236, 91, 174, 188, 38, 33, 130, 156, 128, 26, 22,
+            145, 39, 255, 241, 196, 151, 255, 82, 91, 148, 232, 71, 18,
+        ],
+        [
+            194, 196, 111, 238, 57, 75, 10, 99, 212, 187, 129, 199, 119, 92, 1, 108, 241, 170, 157,
+            183, 229, 228, 101, 27, 52, 174, 69, 134, 147, 83, 58, 54,
+        ],
+    ],
+    [
+        [
+            241, 63, 197, 8, 100, 206, 130, 195, 128, 98, 20, 252, 192, 60, 31, 154, 23, 124, 103,
+            182, 200, 154, 206, 243, 229, 5, 113, 213, 164, 112, 185, 55,
+        ],
+        [
+            105, 242, 123, 46, 87, 11, 173, 139, 0, 221, 84, 124, 26, 7, 229, 104, 187, 91, 104,
+            81, 219, 204, 240, 1, 1, 235, 27, 29, 117, 155, 29, 38,
+        ],
+        [
+            225, 247, 40, 180, 114, 90, 146, 118, 40, 231, 57, 24, 23, 219, 32, 253, 2, 110, 91,
+            34, 56, 181, 2, 115, 172, 228, 119, 92, 167, 155, 176, 58,
+        ],
+        [
+            249, 104, 21, 229, 236, 207, 33, 6, 53, 166, 64, 148, 104, 232, 112, 223, 106, 6, 118,
+            70, 13, 100, 73, 127, 195, 76, 19, 138, 175, 115, 228, 1,
+        ],
+        [
+            195, 144, 80, 114, 29, 145, 101, 51, 84, 237, 157, 117, 160, 225, 241, 235, 114, 170,
+            30, 122, 200, 158, 177, 41, 229, 85, 234, 198, 76, 168, 52, 24,
+        ],
+        [
+            120, 210, 255, 49, 191, 96, 63, 157, 96, 72, 69, 219, 183, 118, 127, 68, 51, 117, 157,
+            15, 174, 235, 120, 43, 212, 104, 132, 191, 34, 171, 203, 33,
+        ],
+        [
+            44, 169, 60, 45, 196, 253, 165, 116, 12, 163, 75, 217, 85, 188, 185, 137, 45, 249, 112,
+            151, 138, 217, 14, 129, 30, 158, 215, 254, 84, 42, 228, 42,
+        ],
+        [
+            203, 168, 249, 62, 65, 9, 40, 183, 128, 84, 88, 173, 178, 248, 224, 77, 145, 33, 193,
+            92, 50, 207, 141, 24, 15, 52, 252, 243, 246, 98, 19, 49,
+        ],
+    ],
+    [
+        [
+            237, 54, 165, 102, 136, 30, 200, 45, 73, 254, 49, 68, 66, 86, 185, 7, 241, 116, 123,
+            60, 28, 190, 126, 70, 234, 142, 64, 228, 224, 138, 208, 27,
+        ],
+        [
+            99, 57, 207, 132, 197, 103, 87, 84, 55, 138, 63, 103, 194, 83, 185, 46, 158, 91, 214,
+            20, 95, 59, 228, 214, 143, 132, 0, 23, 253, 230, 26, 48,
+        ],
+        [
+            123, 239, 222, 226, 21, 242, 243, 197, 129, 206, 152, 129, 16, 20, 211, 42, 176, 65,
+            242, 192, 66, 69, 81, 3, 131, 15, 216, 202, 2, 243, 218, 7,
+        ],
+        [
+            31, 26, 204, 209, 239, 190, 83, 225, 196, 75, 45, 121, 3, 102, 101, 131, 44, 31, 218,
+            48, 73, 17, 134, 242, 247, 29, 221, 207, 227, 5, 52, 25,
+        ],
+        [
+            202, 14, 80, 192, 246, 207, 239, 108, 96, 56, 18, 233, 77, 173, 33, 8, 59, 253, 229,
+            142, 225, 80, 41, 255, 246, 3, 81, 26, 35, 44, 231, 16,
+        ],
+        [
+            121, 74, 250, 232, 223, 85, 200, 144, 168, 194, 169, 93, 4, 215, 101, 243, 38, 138, 47,
+            65, 199, 166, 45, 18, 118, 239, 185, 189, 156, 25, 107, 24,
+        ],
+        [
+            78, 176, 119, 91, 128, 226, 57, 17, 143, 199, 58, 244, 198, 201, 19, 241, 221, 217,
+            241, 225, 34, 210, 174, 2, 205, 104, 225, 0, 230, 178, 142, 57,
+        ],
+        [
+            148, 105, 249, 45, 180, 221, 60, 123, 112, 195, 248, 88, 13, 52, 126, 194, 131, 236,
+            52, 91, 170, 222, 209, 94, 201, 73, 253, 213, 21, 196, 23, 26,
+        ],
+    ],
+    [
+        [
+            182, 212, 91, 5, 64, 193, 110, 29, 140, 166, 154, 43, 144, 226, 204, 76, 157, 57, 210,
+            77, 119, 255, 110, 232, 205, 123, 162, 24, 193, 148, 79, 12,
+        ],
+        [
+            36, 238, 108, 197, 169, 69, 71, 57, 159, 134, 64, 215, 134, 142, 123, 7, 230, 54, 52,
+            211, 182, 48, 157, 191, 50, 219, 222, 147, 205, 0, 190, 11,
+        ],
+        [
+            35, 5, 133, 217, 180, 43, 56, 102, 117, 79, 198, 160, 251, 151, 49, 167, 97, 168, 236,
+            153, 46, 53, 97, 136, 177, 22, 144, 248, 209, 112, 2, 22,
+        ],
+        [
+            189, 185, 158, 102, 165, 81, 53, 43, 92, 59, 187, 63, 53, 181, 50, 254, 28, 27, 251,
+            184, 213, 163, 78, 124, 194, 6, 198, 11, 104, 110, 190, 58,
+        ],
+        [
+            116, 193, 244, 154, 127, 157, 31, 127, 143, 165, 156, 200, 172, 124, 18, 75, 72, 222,
+            71, 165, 110, 23, 37, 39, 40, 221, 208, 104, 143, 242, 10, 48,
+        ],
+        [
+            183, 141, 193, 42, 36, 65, 222, 109, 178, 190, 244, 230, 12, 133, 148, 135, 165, 30,
+            186, 27, 85, 88, 243, 247, 39, 160, 74, 215, 156, 107, 27, 18,
+        ],
+        [
+            178, 132, 174, 93, 169, 172, 0, 113, 42, 161, 34, 61, 153, 62, 171, 231, 99, 205, 151,
+            136, 195, 41, 104, 69, 129, 94, 118, 232, 230, 30, 41, 17,
+        ],
+        [
+            168, 254, 122, 49, 132, 197, 175, 154, 5, 26, 244, 178, 204, 59, 101, 158, 244, 142,
+            21, 29, 108, 129, 119, 165, 179, 98, 124, 213, 19, 29, 89, 20,
+        ],
+    ],
+    [
+        [
+            58, 113, 74, 241, 171, 205, 88, 69, 237, 115, 76, 207, 136, 236, 87, 123, 162, 139,
+            106, 6, 32, 222, 117, 231, 41, 193, 154, 129, 90, 25, 140, 32,
+        ],
+        [
+            230, 114, 111, 31, 111, 230, 200, 253, 222, 93, 21, 215, 146, 39, 154, 45, 176, 255,
+            252, 145, 47, 232, 32, 241, 128, 121, 239, 189, 41, 31, 178, 36,
+        ],
+        [
+            174, 68, 205, 209, 74, 239, 125, 252, 66, 216, 148, 150, 245, 194, 226, 111, 75, 204,
+            15, 141, 251, 66, 147, 233, 225, 226, 32, 128, 223, 237, 242, 59,
+        ],
+        [
+            3, 121, 18, 77, 255, 155, 204, 130, 228, 64, 12, 91, 2, 202, 55, 137, 126, 167, 237,
+            179, 121, 95, 97, 237, 79, 161, 223, 249, 20, 104, 224, 38,
+        ],
+        [
+            200, 199, 195, 205, 182, 178, 120, 64, 102, 134, 15, 97, 173, 148, 179, 163, 187, 169,
+            183, 49, 254, 95, 207, 243, 104, 207, 129, 137, 204, 95, 68, 40,
+        ],
+        [
+            205, 24, 7, 183, 41, 150, 50, 243, 52, 134, 179, 221, 154, 3, 50, 15, 125, 141, 44,
+            229, 174, 113, 51, 207, 142, 158, 157, 165, 171, 33, 167, 38,
+        ],
+        [
+            93, 0, 212, 151, 114, 45, 134, 198, 142, 228, 90, 196, 237, 19, 187, 131, 51, 19, 28,
+            175, 104, 227, 105, 196, 131, 167, 79, 38, 138, 196, 51, 2,
+        ],
+        [
+            59, 126, 116, 119, 162, 37, 37, 83, 6, 89, 187, 30, 31, 41, 207, 146, 78, 210, 47, 181,
+            12, 196, 180, 125, 230, 122, 253, 44, 241, 73, 220, 41,
+        ],
+    ],
+    [
+        [
+            93, 227, 53, 151, 63, 84, 124, 154, 237, 167, 104, 227, 134, 9, 69, 169, 213, 20, 129,
+            164, 5, 139, 107, 214, 219, 181, 245, 2, 133, 23, 167, 51,
+        ],
+        [
+            52, 208, 36, 128, 213, 207, 33, 248, 5, 208, 172, 141, 116, 118, 32, 61, 70, 206, 220,
+            2, 177, 33, 220, 229, 217, 39, 243, 191, 204, 59, 103, 13,
+        ],
+        [
+            137, 0, 31, 220, 219, 195, 242, 66, 222, 9, 30, 49, 67, 147, 242, 237, 184, 155, 92,
+            127, 0, 138, 163, 239, 31, 52, 29, 248, 179, 142, 178, 51,
+        ],
+        [
+            9, 247, 72, 70, 229, 95, 189, 205, 92, 112, 59, 237, 203, 45, 169, 254, 130, 56, 222,
+            97, 91, 53, 5, 79, 254, 144, 144, 139, 249, 44, 112, 10,
+        ],
+        [
+            142, 182, 137, 135, 132, 12, 193, 117, 33, 4, 3, 131, 45, 71, 220, 57, 220, 109, 192,
+            168, 19, 114, 226, 245, 71, 204, 104, 87, 86, 129, 252, 48,
+        ],
+        [
+            155, 212, 212, 132, 134, 186, 221, 90, 141, 120, 16, 198, 25, 43, 18, 134, 198, 62,
+            173, 11, 168, 215, 104, 237, 241, 111, 108, 112, 148, 121, 90, 25,
+        ],
+        [
+            237, 57, 126, 105, 21, 13, 14, 166, 233, 74, 163, 1, 182, 44, 234, 186, 213, 219, 38,
+            5, 226, 108, 110, 255, 36, 207, 85, 60, 152, 169, 241, 14,
+        ],
+        [
+            219, 43, 21, 203, 72, 178, 62, 213, 60, 192, 3, 20, 90, 10, 186, 134, 181, 154, 0, 53,
+            75, 214, 211, 194, 227, 32, 13, 159, 93, 183, 134, 29,
+        ],
+    ],
+    [
+        [
+            49, 16, 184, 146, 99, 19, 153, 194, 123, 41, 24, 235, 243, 73, 9, 215, 195, 186, 58,
+            253, 33, 124, 76, 111, 151, 179, 252, 251, 103, 1, 100, 19,
+        ],
+        [
+            15, 173, 71, 88, 104, 55, 212, 113, 228, 43, 4, 246, 137, 5, 251, 183, 137, 34, 16,
+            234, 130, 208, 240, 188, 128, 118, 175, 127, 198, 150, 228, 54,
+        ],
+        [
+            19, 194, 219, 217, 24, 146, 37, 223, 241, 118, 130, 17, 106, 48, 243, 74, 75, 45, 249,
+            82, 100, 196, 236, 235, 144, 119, 189, 233, 209, 224, 89, 37,
+        ],
+        [
+            5, 204, 210, 20, 79, 207, 213, 247, 252, 195, 1, 101, 247, 54, 70, 221, 19, 126, 205,
+            230, 224, 154, 57, 24, 251, 138, 104, 107, 145, 143, 240, 22,
+        ],
+        [
+            178, 233, 194, 212, 193, 74, 25, 74, 15, 201, 106, 114, 6, 248, 134, 168, 129, 110,
+            148, 125, 208, 42, 9, 90, 43, 255, 71, 206, 153, 173, 12, 42,
+        ],
+        [
+            119, 68, 2, 6, 31, 24, 160, 117, 87, 143, 120, 3, 215, 255, 247, 207, 125, 158, 23, 39,
+            73, 106, 15, 240, 170, 155, 168, 142, 89, 225, 234, 63,
+        ],
+        [
+            2, 252, 41, 89, 60, 106, 201, 142, 88, 102, 71, 228, 123, 206, 24, 191, 1, 253, 100,
+            123, 184, 7, 217, 120, 110, 91, 223, 31, 201, 144, 243, 15,
+        ],
+        [
+            93, 40, 93, 41, 170, 15, 155, 192, 244, 60, 25, 163, 9, 222, 26, 176, 200, 141, 148,
+            145, 57, 182, 188, 135, 57, 156, 54, 242, 130, 162, 218, 45,
+        ],
+    ],
+    [
+        [
+            214, 69, 246, 81, 233, 237, 251, 120, 2, 67, 240, 114, 30, 75, 200, 44, 1, 53, 148,
+            130, 104, 10, 26, 136, 234, 145, 255, 246, 127, 216, 194, 32,
+        ],
+        [
+            8, 65, 67, 164, 14, 155, 196, 111, 151, 196, 74, 150, 62, 189, 131, 110, 205, 122, 128,
+            186, 236, 28, 51, 10, 206, 109, 134, 57, 87, 101, 93, 63,
+        ],
+        [
+            68, 251, 222, 27, 177, 128, 75, 246, 128, 26, 58, 21, 141, 73, 219, 42, 229, 3, 99, 79,
+            130, 94, 144, 140, 141, 29, 53, 13, 199, 208, 48, 59,
+        ],
+        [
+            121, 169, 146, 165, 201, 195, 186, 28, 83, 140, 53, 245, 69, 22, 126, 233, 44, 39, 159,
+            191, 14, 124, 20, 39, 211, 99, 13, 89, 204, 83, 245, 48,
+        ],
+        [
+            241, 91, 55, 71, 30, 143, 172, 30, 17, 71, 66, 49, 156, 12, 144, 152, 162, 58, 65, 31,
+            79, 2, 122, 225, 125, 125, 153, 221, 22, 197, 140, 37,
+        ],
+        [
+            124, 252, 189, 185, 58, 35, 47, 92, 69, 63, 199, 229, 172, 244, 39, 99, 171, 41, 82,
+            29, 253, 54, 46, 8, 131, 43, 68, 128, 109, 196, 72, 49,
+        ],
+        [
+            151, 169, 183, 67, 74, 131, 44, 160, 250, 82, 177, 35, 52, 186, 12, 2, 39, 80, 220,
+            239, 222, 107, 96, 203, 129, 128, 190, 117, 141, 234, 237, 7,
+        ],
+        [
+            251, 84, 120, 50, 59, 6, 204, 109, 171, 19, 119, 102, 17, 119, 90, 250, 186, 203, 7,
+            226, 58, 117, 211, 98, 120, 62, 139, 222, 92, 87, 237, 59,
+        ],
+    ],
+    [
+        [
+            191, 132, 136, 12, 31, 227, 14, 77, 18, 230, 96, 126, 159, 194, 114, 113, 28, 229, 95,
+            102, 160, 121, 135, 222, 1, 204, 166, 147, 27, 78, 94, 63,
+        ],
+        [
+            41, 189, 153, 118, 73, 216, 74, 136, 32, 117, 103, 71, 64, 171, 143, 4, 185, 64, 223,
+            191, 207, 225, 91, 3, 220, 58, 84, 161, 4, 186, 255, 61,
+        ],
+        [
+            220, 110, 238, 123, 194, 162, 87, 36, 98, 216, 59, 236, 84, 52, 113, 46, 60, 29, 97,
+            191, 141, 77, 148, 189, 79, 189, 144, 241, 49, 163, 107, 17,
+        ],
+        [
+            12, 58, 75, 102, 5, 119, 46, 98, 201, 99, 246, 5, 148, 216, 73, 204, 226, 111, 142, 35,
+            12, 56, 248, 38, 114, 250, 183, 85, 199, 74, 219, 21,
+        ],
+        [
+            84, 181, 225, 125, 40, 19, 155, 140, 118, 241, 20, 21, 158, 167, 93, 244, 2, 17, 21,
+            91, 2, 83, 1, 94, 22, 55, 135, 167, 223, 24, 32, 42,
+        ],
+        [
+            6, 100, 231, 118, 1, 253, 62, 137, 179, 245, 83, 61, 171, 224, 96, 238, 76, 134, 31,
+            107, 133, 47, 160, 13, 10, 43, 78, 93, 177, 12, 195, 17,
+        ],
+        [
+            81, 34, 138, 58, 81, 179, 240, 49, 216, 93, 153, 221, 161, 206, 140, 17, 40, 75, 244,
+            16, 220, 69, 242, 179, 209, 48, 169, 69, 163, 216, 79, 19,
+        ],
+        [
+            60, 205, 53, 247, 139, 167, 157, 115, 224, 197, 206, 220, 238, 82, 218, 253, 74, 237,
+            137, 50, 31, 151, 177, 175, 197, 44, 58, 147, 109, 119, 51, 1,
+        ],
+    ],
+    [
+        [
+            27, 15, 21, 190, 82, 194, 14, 56, 128, 44, 111, 155, 238, 130, 188, 19, 119, 238, 0, 4,
+            91, 86, 254, 61, 166, 67, 119, 22, 106, 244, 56, 47,
+        ],
+        [
+            23, 52, 161, 183, 10, 194, 104, 78, 22, 66, 219, 166, 215, 76, 71, 106, 108, 153, 245,
+            170, 105, 53, 197, 234, 219, 226, 234, 184, 86, 189, 222, 10,
+        ],
+        [
+            231, 5, 115, 95, 58, 66, 208, 135, 209, 47, 123, 58, 134, 156, 88, 202, 13, 79, 225, 8,
+            164, 39, 127, 246, 43, 136, 188, 177, 254, 151, 70, 23,
+        ],
+        [
+            86, 248, 109, 23, 128, 55, 179, 214, 159, 18, 33, 106, 34, 109, 190, 0, 110, 224, 62,
+            210, 87, 190, 246, 206, 196, 141, 133, 226, 167, 133, 19, 47,
+        ],
+        [
+            70, 58, 113, 121, 237, 219, 30, 160, 229, 88, 95, 214, 8, 232, 108, 98, 14, 233, 43,
+            189, 225, 16, 247, 36, 111, 122, 199, 25, 205, 44, 112, 42,
+        ],
+        [
+            184, 97, 40, 59, 116, 147, 139, 60, 30, 250, 67, 11, 242, 111, 104, 150, 15, 215, 245,
+            99, 31, 128, 240, 115, 18, 249, 99, 114, 186, 65, 76, 26,
+        ],
+        [
+            183, 90, 33, 10, 78, 210, 54, 79, 156, 8, 176, 24, 54, 209, 203, 157, 151, 134, 88,
+            104, 211, 62, 38, 197, 117, 122, 207, 15, 163, 5, 59, 8,
+        ],
+        [
+            41, 14, 171, 211, 125, 45, 149, 132, 101, 32, 35, 142, 108, 194, 13, 37, 122, 27, 219,
+            223, 32, 41, 153, 199, 167, 246, 214, 240, 222, 131, 85, 9,
+        ],
+    ],
+    [
+        [
+            146, 73, 118, 250, 189, 115, 96, 188, 162, 168, 121, 1, 55, 221, 181, 187, 145, 13,
+            213, 160, 250, 117, 252, 42, 161, 41, 42, 60, 45, 193, 25, 30,
+        ],
+        [
+            38, 126, 2, 131, 102, 66, 220, 138, 83, 239, 80, 46, 245, 63, 94, 233, 192, 15, 173,
+            155, 6, 154, 124, 236, 99, 151, 106, 21, 10, 55, 175, 45,
+        ],
+        [
+            147, 163, 56, 143, 203, 206, 180, 175, 15, 39, 185, 183, 254, 241, 235, 182, 62, 116,
+            27, 66, 73, 66, 55, 190, 19, 68, 189, 214, 46, 89, 13, 49,
+        ],
+        [
+            121, 248, 233, 93, 196, 140, 233, 226, 177, 11, 177, 78, 181, 222, 38, 101, 216, 68,
+            10, 26, 212, 185, 105, 39, 89, 190, 15, 184, 32, 157, 147, 35,
+        ],
+        [
+            67, 108, 70, 93, 37, 202, 52, 114, 7, 214, 41, 246, 220, 152, 65, 195, 75, 216, 193,
+            159, 110, 113, 85, 105, 182, 55, 126, 48, 92, 74, 41, 13,
+        ],
+        [
+            66, 55, 15, 17, 96, 43, 142, 225, 55, 202, 242, 132, 16, 128, 198, 64, 57, 51, 173,
+            153, 18, 21, 74, 117, 208, 85, 87, 200, 8, 25, 30, 53,
+        ],
+        [
+            142, 173, 137, 206, 188, 2, 155, 106, 110, 80, 138, 211, 142, 216, 9, 126, 115, 161,
+            60, 119, 251, 199, 29, 163, 69, 166, 106, 200, 115, 12, 27, 42,
+        ],
+        [
+            5, 28, 251, 152, 246, 99, 74, 222, 86, 91, 4, 141, 212, 14, 200, 222, 129, 133, 91,
+            117, 4, 233, 235, 254, 214, 85, 56, 28, 211, 167, 164, 7,
+        ],
+    ],
+    [
+        [
+            199, 248, 56, 7, 116, 43, 199, 175, 73, 62, 19, 67, 250, 144, 43, 227, 245, 85, 242,
+            25, 74, 33, 89, 208, 243, 137, 220, 136, 0, 79, 235, 17,
+        ],
+        [
+            141, 87, 177, 94, 249, 243, 42, 2, 191, 181, 12, 101, 121, 76, 243, 215, 5, 157, 170,
+            98, 185, 102, 238, 161, 179, 91, 225, 102, 17, 243, 151, 18,
+        ],
+        [
+            5, 165, 124, 37, 121, 192, 201, 221, 50, 34, 204, 74, 249, 97, 138, 157, 183, 155, 191,
+            222, 146, 82, 129, 195, 236, 32, 110, 47, 32, 32, 212, 59,
+        ],
+        [
+            9, 21, 25, 227, 120, 92, 35, 43, 121, 43, 234, 147, 157, 23, 218, 121, 248, 28, 137,
+            152, 121, 231, 163, 87, 212, 168, 222, 177, 182, 50, 19, 26,
+        ],
+        [
+            214, 240, 41, 113, 104, 195, 60, 163, 221, 18, 241, 139, 35, 166, 231, 241, 137, 56,
+            217, 182, 177, 214, 146, 157, 176, 171, 13, 41, 204, 80, 94, 53,
+        ],
+        [
+            5, 160, 27, 29, 63, 102, 96, 140, 192, 60, 193, 95, 114, 182, 5, 102, 115, 144, 60, 92,
+            83, 249, 85, 161, 172, 2, 96, 118, 95, 245, 201, 58,
+        ],
+        [
+            35, 161, 31, 237, 123, 141, 123, 90, 233, 91, 250, 0, 189, 31, 19, 179, 134, 219, 230,
+            7, 54, 236, 238, 251, 183, 245, 255, 172, 233, 240, 4, 27,
+        ],
+        [
+            2, 165, 109, 76, 190, 46, 187, 163, 33, 215, 48, 19, 0, 240, 15, 120, 7, 191, 169, 213,
+            118, 162, 0, 79, 58, 146, 185, 165, 77, 215, 43, 16,
+        ],
+    ],
+    [
+        [
+            139, 175, 132, 197, 168, 169, 208, 139, 136, 29, 122, 201, 243, 76, 13, 159, 57, 180,
+            235, 124, 157, 231, 66, 8, 233, 163, 50, 145, 44, 186, 159, 39,
+        ],
+        [
+            18, 215, 223, 109, 50, 114, 37, 123, 232, 3, 220, 242, 61, 30, 200, 62, 103, 11, 171,
+            156, 78, 117, 46, 234, 174, 247, 58, 238, 51, 180, 32, 19,
+        ],
+        [
+            101, 233, 249, 129, 23, 236, 206, 133, 169, 247, 127, 5, 25, 115, 137, 232, 198, 119,
+            126, 232, 19, 27, 53, 153, 229, 149, 149, 92, 202, 120, 23, 34,
+        ],
+        [
+            195, 226, 216, 96, 174, 47, 198, 78, 76, 136, 67, 64, 61, 50, 64, 28, 70, 131, 105, 96,
+            54, 197, 98, 18, 197, 130, 92, 155, 116, 104, 213, 28,
+        ],
+        [
+            4, 165, 219, 75, 186, 168, 40, 93, 124, 34, 52, 233, 148, 177, 130, 40, 113, 173, 207,
+            243, 123, 185, 251, 0, 111, 209, 114, 114, 0, 165, 47, 21,
+        ],
+        [
+            15, 211, 38, 24, 236, 47, 246, 65, 238, 204, 84, 203, 250, 41, 211, 141, 195, 16, 196,
+            184, 251, 47, 229, 78, 183, 45, 82, 65, 59, 228, 223, 38,
+        ],
+        [
+            226, 208, 172, 170, 113, 92, 148, 103, 53, 253, 157, 15, 1, 15, 188, 215, 214, 21, 122,
+            252, 33, 72, 164, 8, 8, 129, 2, 81, 175, 88, 16, 42,
+        ],
+        [
+            120, 112, 122, 188, 218, 169, 97, 108, 132, 61, 177, 126, 146, 248, 48, 72, 231, 104,
+            58, 58, 245, 127, 126, 68, 82, 142, 8, 42, 111, 149, 188, 32,
+        ],
+    ],
+    [
+        [
+            95, 8, 182, 234, 116, 76, 223, 240, 103, 146, 57, 57, 56, 106, 176, 215, 49, 209, 32,
+            158, 35, 28, 130, 7, 201, 178, 230, 212, 200, 223, 206, 62,
+        ],
+        [
+            239, 66, 31, 68, 227, 197, 138, 254, 87, 118, 79, 186, 88, 181, 83, 240, 159, 11, 15,
+            255, 84, 228, 69, 3, 205, 39, 11, 178, 223, 249, 193, 56,
+        ],
+        [
+            159, 153, 62, 236, 201, 9, 233, 213, 145, 93, 104, 128, 1, 156, 105, 1, 141, 33, 122,
+            15, 197, 68, 57, 25, 48, 67, 17, 219, 227, 252, 72, 62,
+        ],
+        [
+            73, 22, 127, 172, 163, 146, 170, 68, 75, 175, 220, 162, 160, 27, 99, 36, 24, 11, 219,
+            20, 38, 174, 178, 85, 133, 51, 30, 87, 210, 46, 109, 49,
+        ],
+        [
+            37, 59, 243, 109, 246, 173, 114, 98, 148, 92, 118, 145, 45, 46, 163, 208, 44, 248, 6,
+            192, 35, 46, 20, 0, 78, 120, 119, 214, 200, 148, 11, 45,
+        ],
+        [
+            142, 201, 84, 209, 45, 193, 134, 251, 249, 3, 16, 208, 69, 91, 69, 255, 76, 221, 82,
+            169, 30, 218, 46, 183, 12, 35, 214, 84, 23, 245, 74, 34,
+        ],
+        [
+            169, 46, 120, 5, 117, 166, 109, 155, 218, 69, 132, 230, 139, 49, 118, 147, 121, 143,
+            14, 200, 114, 128, 170, 214, 123, 83, 79, 227, 170, 87, 149, 60,
+        ],
+        [
+            63, 140, 50, 114, 17, 41, 117, 40, 247, 224, 249, 168, 254, 222, 74, 122, 134, 252, 35,
+            27, 213, 180, 92, 240, 255, 145, 13, 103, 152, 170, 236, 50,
+        ],
+    ],
+    [
+        [
+            215, 154, 109, 148, 179, 184, 4, 246, 126, 31, 67, 190, 52, 170, 95, 63, 21, 74, 205,
+            159, 226, 106, 95, 251, 151, 33, 95, 9, 8, 51, 54, 16,
+        ],
+        [
+            125, 211, 129, 224, 62, 115, 145, 137, 123, 63, 37, 176, 121, 83, 200, 198, 200, 63,
+            199, 7, 111, 61, 16, 189, 147, 128, 57, 111, 140, 117, 192, 13,
+        ],
+        [
+            62, 162, 174, 44, 90, 198, 105, 23, 32, 95, 170, 43, 95, 202, 41, 143, 5, 120, 103,
+            243, 69, 109, 70, 226, 206, 144, 32, 187, 168, 156, 74, 2,
+        ],
+        [
+            74, 155, 142, 102, 116, 7, 191, 222, 129, 124, 146, 194, 182, 170, 38, 29, 14, 163,
+            145, 158, 214, 61, 192, 123, 190, 109, 174, 52, 88, 52, 154, 21,
+        ],
+        [
+            210, 110, 65, 168, 192, 245, 112, 81, 43, 66, 225, 107, 42, 112, 186, 67, 146, 66, 69,
+            141, 69, 125, 61, 226, 103, 26, 102, 60, 12, 207, 245, 34,
+        ],
+        [
+            0, 109, 234, 239, 154, 137, 77, 134, 209, 28, 113, 244, 198, 228, 214, 139, 52, 33, 86,
+            69, 51, 218, 213, 211, 31, 28, 195, 77, 222, 90, 231, 0,
+        ],
+        [
+            62, 169, 126, 192, 19, 148, 244, 128, 245, 147, 155, 85, 225, 132, 157, 156, 111, 26,
+            103, 87, 100, 195, 177, 53, 58, 124, 93, 38, 187, 56, 176, 59,
+        ],
+        [
+            224, 216, 241, 35, 55, 36, 233, 159, 110, 128, 30, 204, 91, 50, 227, 153, 76, 84, 209,
+            62, 140, 19, 74, 222, 67, 215, 86, 219, 28, 6, 127, 26,
+        ],
+    ],
+    [
+        [
+            196, 239, 163, 163, 226, 62, 34, 86, 120, 237, 194, 94, 87, 123, 11, 194, 71, 232, 84,
+            212, 162, 54, 89, 87, 229, 244, 147, 80, 81, 231, 144, 59,
+        ],
+        [
+            3, 183, 214, 69, 55, 0, 243, 100, 210, 173, 147, 22, 164, 222, 22, 236, 41, 16, 23,
+            212, 64, 207, 16, 104, 62, 156, 117, 194, 143, 252, 114, 30,
+        ],
+        [
+            83, 242, 71, 100, 1, 160, 144, 96, 22, 203, 210, 122, 123, 222, 221, 58, 212, 89, 96,
+            210, 172, 144, 144, 217, 3, 21, 57, 248, 252, 36, 168, 45,
+        ],
+        [
+            162, 85, 218, 40, 224, 40, 96, 145, 190, 124, 73, 217, 211, 89, 160, 248, 157, 203,
+            174, 61, 201, 102, 43, 232, 246, 173, 125, 249, 96, 147, 84, 28,
+        ],
+        [
+            127, 164, 182, 128, 219, 61, 29, 77, 246, 20, 106, 153, 148, 217, 135, 214, 48, 10,
+            100, 82, 166, 117, 154, 82, 30, 129, 66, 224, 97, 15, 108, 42,
+        ],
+        [
+            44, 25, 145, 64, 165, 137, 106, 115, 213, 161, 96, 217, 45, 60, 88, 226, 124, 219, 43,
+            200, 254, 197, 37, 111, 72, 159, 204, 121, 132, 253, 215, 63,
+        ],
+        [
+            130, 113, 153, 54, 123, 127, 228, 89, 131, 168, 79, 57, 6, 226, 59, 134, 92, 149, 83,
+            208, 71, 194, 150, 140, 231, 16, 60, 214, 214, 93, 159, 34,
+        ],
+        [
+            198, 56, 77, 220, 125, 205, 170, 180, 213, 78, 72, 22, 51, 57, 27, 7, 9, 212, 232, 210,
+            105, 136, 110, 193, 162, 159, 52, 143, 41, 167, 211, 29,
+        ],
+    ],
+    [
+        [
+            160, 165, 254, 36, 87, 6, 88, 21, 72, 216, 230, 247, 2, 55, 242, 73, 36, 213, 230, 8,
+            90, 80, 77, 158, 60, 59, 121, 94, 59, 96, 94, 21,
+        ],
+        [
+            45, 176, 13, 86, 112, 155, 195, 206, 252, 211, 160, 213, 218, 77, 219, 237, 222, 47,
+            75, 7, 27, 201, 208, 42, 78, 5, 247, 152, 111, 163, 28, 19,
+        ],
+        [
+            199, 71, 216, 75, 50, 105, 91, 201, 53, 124, 235, 0, 108, 165, 181, 70, 42, 153, 163,
+            201, 11, 54, 41, 233, 146, 38, 184, 139, 125, 91, 209, 10,
+        ],
+        [
+            86, 137, 234, 158, 219, 91, 233, 65, 189, 187, 15, 107, 19, 111, 12, 249, 160, 129,
+            246, 146, 62, 110, 87, 239, 99, 96, 143, 149, 115, 75, 64, 52,
+        ],
+        [
+            98, 114, 143, 6, 251, 147, 133, 224, 83, 35, 220, 23, 118, 87, 253, 157, 125, 207, 180,
+            57, 5, 127, 14, 24, 191, 18, 189, 133, 24, 63, 98, 21,
+        ],
+        [
+            7, 253, 227, 108, 211, 101, 224, 147, 234, 204, 96, 88, 155, 213, 73, 12, 78, 63, 195,
+            95, 231, 53, 32, 242, 35, 185, 9, 226, 163, 182, 106, 3,
+        ],
+        [
+            25, 246, 155, 59, 73, 164, 80, 198, 181, 76, 138, 14, 37, 122, 78, 226, 38, 183, 227,
+            225, 221, 67, 143, 190, 95, 113, 73, 57, 112, 85, 221, 21,
+        ],
+        [
+            149, 94, 77, 90, 128, 207, 67, 153, 17, 196, 236, 238, 199, 44, 10, 245, 147, 164, 221,
+            226, 230, 123, 118, 33, 85, 34, 246, 225, 65, 251, 160, 26,
+        ],
+    ],
+    [
+        [
+            198, 30, 82, 10, 148, 182, 240, 154, 54, 243, 247, 229, 181, 129, 228, 22, 161, 215,
+            77, 251, 121, 190, 107, 85, 56, 41, 194, 91, 243, 88, 14, 58,
+        ],
+        [
+            202, 246, 182, 231, 195, 153, 88, 238, 60, 84, 67, 178, 248, 59, 105, 49, 195, 130,
+            228, 104, 204, 136, 202, 84, 168, 146, 5, 208, 62, 85, 25, 17,
+        ],
+        [
+            119, 64, 199, 157, 4, 43, 91, 198, 55, 245, 237, 178, 21, 83, 35, 100, 246, 74, 152,
+            132, 234, 245, 211, 248, 224, 198, 126, 176, 196, 121, 100, 50,
+        ],
+        [
+            101, 85, 104, 70, 109, 112, 93, 153, 253, 233, 162, 249, 142, 220, 208, 19, 165, 218,
+            66, 255, 125, 124, 227, 42, 223, 153, 75, 69, 155, 156, 31, 57,
+        ],
+        [
+            63, 55, 139, 112, 194, 107, 121, 53, 129, 202, 204, 46, 248, 109, 34, 241, 53, 227,
+            206, 243, 178, 228, 215, 86, 153, 195, 47, 114, 97, 169, 5, 27,
+        ],
+        [
+            53, 75, 214, 129, 18, 225, 191, 83, 159, 41, 109, 40, 176, 57, 43, 164, 161, 185, 225,
+            136, 251, 243, 193, 42, 95, 115, 32, 171, 12, 213, 167, 3,
+        ],
+        [
+            235, 36, 235, 197, 64, 34, 134, 89, 21, 195, 40, 218, 162, 235, 91, 98, 189, 163, 189,
+            186, 29, 184, 247, 93, 83, 134, 190, 214, 231, 255, 49, 5,
+        ],
+        [
+            36, 53, 226, 5, 178, 106, 251, 156, 151, 206, 13, 255, 45, 147, 244, 47, 145, 220, 199,
+            136, 195, 250, 170, 26, 117, 196, 227, 93, 178, 18, 178, 54,
+        ],
+    ],
+    [
+        [
+            91, 68, 35, 111, 130, 120, 151, 184, 175, 224, 185, 116, 137, 151, 158, 155, 189, 79,
+            221, 201, 73, 145, 154, 99, 84, 54, 37, 92, 60, 129, 214, 44,
+        ],
+        [
+            231, 28, 49, 225, 237, 154, 194, 248, 14, 192, 101, 134, 78, 32, 217, 133, 35, 203,
+            126, 217, 65, 210, 226, 254, 67, 48, 218, 213, 163, 219, 160, 50,
+        ],
+        [
+            195, 124, 201, 154, 77, 19, 27, 255, 51, 178, 233, 32, 112, 70, 138, 116, 23, 99, 22,
+            170, 23, 205, 137, 213, 91, 207, 198, 118, 66, 21, 222, 50,
+        ],
+        [
+            149, 89, 237, 156, 70, 100, 84, 58, 87, 158, 41, 169, 249, 94, 134, 84, 109, 110, 191,
+            60, 29, 237, 6, 215, 116, 124, 158, 30, 58, 205, 244, 17,
+        ],
+        [
+            80, 179, 104, 84, 95, 131, 131, 215, 129, 166, 153, 81, 167, 251, 66, 242, 254, 45,
+            100, 1, 161, 77, 234, 73, 72, 85, 152, 84, 251, 23, 114, 26,
+        ],
+        [
+            122, 218, 71, 58, 4, 142, 173, 59, 70, 145, 210, 95, 79, 43, 69, 197, 200, 23, 165,
+            251, 43, 41, 216, 32, 187, 240, 177, 81, 137, 144, 198, 61,
+        ],
+        [
+            40, 250, 126, 111, 65, 53, 57, 76, 207, 56, 219, 216, 128, 31, 63, 72, 34, 174, 157,
+            129, 159, 143, 16, 42, 162, 60, 231, 208, 218, 112, 16, 63,
+        ],
+        [
+            203, 16, 248, 1, 77, 5, 210, 197, 69, 134, 121, 102, 244, 42, 182, 244, 143, 71, 179,
+            152, 34, 139, 52, 89, 180, 232, 152, 56, 149, 0, 97, 37,
+        ],
+    ],
+    [
+        [
+            5, 89, 207, 4, 33, 94, 36, 209, 180, 97, 214, 235, 236, 90, 149, 192, 144, 15, 127,
+            233, 150, 20, 79, 10, 72, 207, 61, 43, 159, 78, 107, 53,
+        ],
+        [
+            79, 186, 12, 1, 247, 170, 13, 98, 141, 222, 29, 5, 91, 198, 14, 85, 242, 207, 252, 151,
+            191, 37, 3, 221, 27, 83, 31, 250, 45, 99, 122, 16,
+        ],
+        [
+            137, 124, 62, 217, 230, 197, 251, 81, 224, 75, 111, 172, 69, 51, 172, 138, 87, 147, 33,
+            128, 200, 169, 159, 176, 204, 10, 225, 2, 139, 30, 160, 49,
+        ],
+        [
+            102, 7, 138, 62, 135, 48, 100, 156, 184, 139, 98, 191, 161, 89, 48, 104, 32, 241, 60,
+            135, 3, 71, 117, 99, 5, 215, 250, 18, 212, 34, 64, 20,
+        ],
+        [
+            197, 161, 228, 116, 31, 179, 142, 77, 140, 217, 94, 108, 137, 35, 39, 126, 84, 201, 71,
+            58, 10, 52, 7, 184, 156, 65, 185, 188, 182, 98, 65, 43,
+        ],
+        [
+            207, 153, 115, 73, 75, 200, 35, 16, 32, 82, 68, 212, 14, 206, 254, 63, 56, 140, 59,
+            185, 68, 204, 73, 67, 27, 95, 207, 228, 74, 72, 18, 2,
+        ],
+        [
+            185, 232, 177, 216, 67, 26, 72, 76, 157, 100, 17, 181, 161, 81, 150, 245, 177, 250, 28,
+            58, 130, 154, 25, 212, 136, 67, 140, 88, 161, 41, 232, 7,
+        ],
+        [
+            81, 249, 170, 40, 188, 151, 82, 232, 199, 203, 11, 66, 67, 143, 120, 54, 251, 4, 180,
+            183, 125, 142, 17, 249, 162, 6, 177, 157, 59, 88, 176, 60,
+        ],
+    ],
+    [
+        [
+            5, 39, 116, 70, 87, 101, 17, 78, 253, 249, 241, 133, 179, 20, 136, 35, 91, 141, 137,
+            92, 41, 59, 37, 107, 234, 106, 220, 49, 41, 20, 228, 50,
+        ],
+        [
+            239, 224, 34, 219, 49, 32, 61, 153, 160, 42, 234, 0, 74, 179, 81, 112, 224, 236, 181,
+            23, 23, 195, 36, 114, 166, 23, 23, 86, 131, 165, 107, 5,
+        ],
+        [
+            157, 92, 182, 140, 251, 56, 162, 62, 72, 102, 59, 203, 169, 127, 177, 139, 173, 223,
+            193, 220, 173, 108, 133, 146, 220, 50, 125, 176, 182, 249, 232, 4,
+        ],
+        [
+            63, 192, 18, 230, 178, 221, 22, 4, 11, 89, 10, 235, 5, 15, 142, 128, 116, 213, 251, 13,
+            33, 120, 164, 251, 113, 177, 195, 141, 146, 137, 224, 10,
+        ],
+        [
+            146, 171, 247, 18, 200, 10, 47, 184, 29, 129, 50, 237, 55, 8, 93, 157, 184, 118, 158,
+            97, 116, 202, 135, 240, 162, 226, 131, 135, 146, 30, 31, 55,
+        ],
+        [
+            240, 233, 41, 237, 47, 32, 136, 122, 213, 32, 160, 3, 47, 216, 193, 98, 240, 97, 202,
+            50, 205, 150, 40, 36, 87, 8, 132, 22, 53, 105, 118, 49,
+        ],
+        [
+            58, 230, 109, 52, 109, 115, 162, 116, 80, 181, 12, 159, 59, 246, 184, 98, 98, 100, 163,
+            231, 95, 152, 12, 195, 216, 26, 110, 75, 162, 52, 155, 36,
+        ],
+        [
+            1, 160, 91, 80, 221, 176, 161, 223, 120, 239, 80, 39, 92, 193, 131, 72, 216, 141, 107,
+            157, 188, 163, 246, 59, 97, 109, 38, 108, 175, 125, 229, 25,
+        ],
+    ],
+    [
+        [
+            46, 149, 1, 150, 69, 179, 76, 218, 4, 111, 196, 93, 98, 116, 217, 54, 62, 78, 228, 34,
+            223, 95, 111, 200, 16, 142, 189, 142, 54, 126, 218, 4,
+        ],
+        [
+            251, 202, 109, 62, 44, 11, 142, 106, 121, 128, 123, 3, 9, 30, 36, 167, 102, 117, 14,
+            76, 11, 184, 80, 177, 118, 164, 162, 108, 33, 215, 19, 25,
+        ],
+        [
+            198, 206, 168, 7, 85, 212, 232, 75, 69, 188, 47, 243, 205, 196, 159, 134, 115, 51, 173,
+            117, 92, 119, 112, 120, 247, 137, 248, 56, 24, 89, 164, 58,
+        ],
+        [
+            10, 143, 238, 110, 161, 146, 112, 53, 117, 115, 105, 110, 154, 126, 142, 110, 236, 6,
+            24, 240, 220, 69, 251, 167, 134, 148, 63, 30, 137, 42, 107, 5,
+        ],
+        [
+            143, 210, 102, 57, 97, 48, 92, 46, 119, 14, 133, 224, 196, 245, 141, 4, 132, 34, 58, 8,
+            68, 179, 49, 1, 109, 89, 134, 116, 7, 181, 84, 44,
+        ],
+        [
+            154, 170, 62, 94, 138, 234, 199, 118, 107, 57, 142, 126, 220, 120, 9, 134, 2, 37, 17,
+            163, 72, 232, 113, 113, 29, 210, 2, 39, 104, 121, 17, 22,
+        ],
+        [
+            50, 131, 237, 169, 131, 43, 30, 246, 70, 95, 0, 147, 100, 233, 236, 114, 161, 10, 83,
+            70, 68, 14, 36, 144, 2, 37, 135, 16, 147, 70, 231, 2,
+        ],
+        [
+            141, 174, 115, 187, 181, 226, 19, 76, 147, 156, 204, 125, 181, 255, 94, 24, 99, 152,
+            170, 194, 18, 9, 52, 211, 183, 62, 3, 121, 150, 15, 160, 26,
+        ],
+    ],
+    [
+        [
+            10, 39, 254, 165, 143, 140, 105, 76, 102, 131, 235, 58, 71, 161, 130, 71, 222, 115, 68,
+            185, 196, 102, 223, 155, 199, 84, 188, 119, 208, 10, 24, 3,
+        ],
+        [
+            251, 47, 0, 26, 188, 43, 51, 170, 4, 147, 19, 172, 125, 166, 44, 76, 174, 27, 174, 68,
+            192, 97, 20, 120, 89, 203, 21, 165, 193, 221, 112, 19,
+        ],
+        [
+            103, 90, 73, 145, 111, 139, 91, 135, 197, 12, 29, 183, 228, 247, 237, 160, 61, 197,
+            123, 235, 42, 8, 238, 111, 114, 33, 99, 55, 90, 181, 9, 59,
+        ],
+        [
+            136, 249, 201, 5, 56, 155, 117, 156, 164, 153, 151, 157, 204, 1, 122, 15, 169, 219,
+            108, 95, 137, 140, 225, 50, 8, 254, 128, 176, 245, 148, 231, 47,
+        ],
+        [
+            185, 227, 120, 188, 133, 61, 3, 169, 174, 45, 248, 48, 52, 20, 250, 157, 124, 212, 209,
+            192, 13, 22, 22, 102, 11, 236, 194, 236, 0, 22, 55, 44,
+        ],
+        [
+            172, 216, 57, 7, 93, 154, 231, 155, 201, 255, 159, 145, 116, 135, 127, 173, 185, 188,
+            237, 178, 10, 184, 107, 170, 165, 137, 247, 107, 147, 237, 232, 3,
+        ],
+        [
+            94, 197, 39, 16, 162, 134, 70, 119, 155, 56, 251, 82, 45, 190, 106, 99, 114, 38, 217,
+            242, 188, 178, 248, 123, 15, 14, 239, 147, 109, 15, 127, 16,
+        ],
+        [
+            152, 158, 191, 195, 22, 237, 186, 168, 85, 70, 228, 13, 111, 109, 5, 52, 154, 109, 80,
+            252, 147, 178, 64, 196, 184, 138, 225, 26, 247, 183, 189, 9,
+        ],
+    ],
+    [
+        [
+            153, 70, 167, 177, 229, 151, 123, 186, 51, 190, 231, 196, 226, 132, 37, 12, 27, 171,
+            67, 175, 188, 253, 127, 246, 196, 250, 200, 188, 89, 51, 90, 35,
+        ],
+        [
+            7, 47, 63, 135, 76, 144, 203, 18, 252, 212, 29, 27, 170, 100, 14, 233, 90, 100, 182,
+            36, 77, 55, 117, 100, 149, 210, 106, 18, 54, 194, 40, 45,
+        ],
+        [
+            145, 138, 183, 17, 90, 5, 158, 103, 234, 188, 115, 38, 10, 195, 12, 19, 111, 232, 36,
+            96, 216, 151, 218, 196, 23, 234, 114, 63, 112, 245, 52, 17,
+        ],
+        [
+            188, 191, 226, 36, 30, 19, 172, 66, 73, 35, 237, 184, 220, 146, 166, 50, 67, 252, 228,
+            206, 137, 25, 124, 209, 115, 233, 176, 38, 97, 194, 168, 55,
+        ],
+        [
+            156, 84, 233, 11, 139, 39, 117, 26, 180, 77, 208, 247, 156, 213, 39, 71, 105, 47, 14,
+            93, 84, 220, 66, 221, 67, 31, 239, 193, 137, 75, 98, 4,
+        ],
+        [
+            19, 1, 39, 184, 88, 13, 233, 13, 98, 92, 56, 181, 205, 181, 92, 50, 63, 164, 56, 233,
+            101, 251, 60, 126, 212, 238, 191, 231, 248, 115, 174, 31,
+        ],
+        [
+            45, 142, 9, 191, 151, 248, 78, 181, 181, 4, 226, 246, 186, 243, 96, 205, 28, 234, 235,
+            103, 49, 205, 114, 132, 136, 106, 50, 51, 220, 56, 185, 54,
+        ],
+        [
+            230, 1, 231, 54, 221, 188, 3, 230, 233, 72, 235, 37, 100, 117, 179, 200, 146, 196, 117,
+            150, 221, 59, 169, 110, 142, 254, 169, 129, 192, 210, 124, 2,
+        ],
+    ],
+    [
+        [
+            113, 127, 193, 36, 33, 98, 37, 229, 172, 76, 71, 176, 107, 47, 84, 130, 144, 108, 249,
+            204, 247, 50, 143, 242, 185, 160, 207, 41, 83, 184, 30, 1,
+        ],
+        [
+            60, 188, 219, 67, 6, 66, 64, 62, 105, 32, 121, 184, 30, 137, 100, 255, 176, 188, 74,
+            132, 73, 99, 168, 95, 30, 231, 55, 219, 80, 28, 236, 57,
+        ],
+        [
+            162, 221, 96, 144, 26, 59, 193, 103, 61, 148, 12, 148, 65, 41, 57, 22, 198, 112, 0, 25,
+            116, 202, 173, 254, 225, 89, 14, 113, 132, 126, 173, 25,
+        ],
+        [
+            211, 146, 138, 171, 246, 25, 51, 48, 83, 26, 132, 149, 160, 115, 242, 27, 161, 12, 76,
+            130, 46, 16, 213, 54, 134, 95, 115, 43, 91, 197, 223, 46,
+        ],
+        [
+            164, 147, 245, 58, 228, 119, 37, 72, 47, 194, 171, 113, 130, 106, 53, 214, 61, 56, 100,
+            200, 159, 224, 18, 246, 94, 215, 48, 69, 190, 169, 51, 42,
+        ],
+        [
+            132, 253, 120, 207, 143, 101, 57, 58, 167, 185, 23, 252, 157, 221, 248, 157, 46, 68,
+            122, 151, 192, 184, 194, 142, 98, 70, 189, 107, 61, 76, 149, 61,
+        ],
+        [
+            227, 38, 171, 227, 71, 147, 6, 219, 173, 77, 149, 187, 130, 150, 56, 156, 189, 132, 44,
+            201, 189, 2, 133, 21, 174, 175, 141, 89, 76, 98, 35, 39,
+        ],
+        [
+            112, 33, 226, 167, 129, 192, 243, 199, 106, 110, 29, 184, 195, 62, 72, 51, 203, 147,
+            66, 200, 234, 235, 45, 248, 118, 78, 37, 131, 2, 115, 240, 35,
+        ],
+    ],
+    [
+        [
+            29, 94, 98, 16, 75, 79, 201, 48, 252, 129, 82, 87, 55, 155, 214, 178, 0, 13, 80, 120,
+            252, 26, 199, 98, 112, 117, 251, 132, 9, 222, 88, 1,
+        ],
+        [
+            183, 159, 59, 28, 80, 19, 246, 226, 204, 42, 87, 98, 227, 225, 239, 180, 98, 43, 241,
+            205, 139, 238, 215, 120, 185, 226, 163, 198, 184, 182, 245, 34,
+        ],
+        [
+            197, 11, 112, 174, 119, 138, 42, 144, 151, 132, 47, 51, 241, 212, 173, 241, 153, 176,
+            171, 224, 252, 197, 125, 153, 40, 30, 3, 243, 250, 146, 89, 33,
+        ],
+        [
+            229, 206, 81, 251, 52, 183, 144, 121, 141, 120, 80, 108, 133, 246, 20, 114, 51, 177,
+            66, 218, 113, 1, 198, 68, 86, 224, 175, 59, 85, 237, 146, 25,
+        ],
+        [
+            199, 176, 127, 191, 59, 34, 251, 44, 251, 172, 34, 15, 151, 54, 230, 62, 38, 208, 221,
+            40, 244, 213, 69, 138, 161, 105, 65, 136, 129, 153, 158, 14,
+        ],
+        [
+            82, 194, 114, 87, 225, 102, 24, 119, 238, 85, 93, 21, 89, 149, 104, 144, 151, 19, 52,
+            96, 84, 71, 69, 160, 87, 245, 239, 208, 59, 88, 92, 19,
+        ],
+        [
+            182, 89, 228, 186, 60, 45, 23, 77, 190, 131, 89, 134, 109, 200, 222, 153, 254, 217,
+            191, 37, 100, 96, 85, 165, 64, 182, 141, 244, 208, 85, 89, 42,
+        ],
+        [
+            193, 216, 142, 50, 41, 162, 188, 146, 206, 33, 83, 35, 144, 127, 148, 243, 129, 98,
+            209, 161, 59, 180, 96, 133, 225, 53, 12, 187, 177, 207, 80, 34,
+        ],
+    ],
+    [
+        [
+            147, 41, 219, 169, 88, 177, 67, 111, 1, 56, 197, 17, 47, 232, 125, 5, 29, 159, 89, 40,
+            154, 98, 87, 141, 85, 150, 231, 16, 222, 124, 173, 37,
+        ],
+        [
+            202, 211, 119, 159, 104, 213, 253, 76, 62, 219, 254, 66, 220, 221, 192, 56, 122, 124,
+            42, 139, 242, 215, 178, 229, 246, 79, 21, 121, 31, 183, 27, 48,
+        ],
+        [
+            126, 218, 96, 65, 191, 72, 25, 144, 186, 197, 91, 220, 79, 245, 85, 156, 37, 197, 30,
+            94, 10, 170, 200, 6, 38, 97, 135, 84, 253, 214, 251, 14,
+        ],
+        [
+            48, 6, 251, 73, 216, 94, 185, 113, 9, 130, 250, 198, 78, 214, 160, 76, 245, 192, 171,
+            66, 30, 225, 79, 58, 153, 29, 135, 234, 76, 130, 57, 3,
+        ],
+        [
+            178, 120, 202, 176, 134, 4, 205, 224, 149, 195, 40, 140, 155, 181, 194, 86, 200, 34,
+            38, 203, 133, 233, 248, 87, 190, 214, 183, 33, 226, 170, 80, 35,
+        ],
+        [
+            19, 135, 66, 237, 59, 74, 11, 20, 115, 128, 39, 102, 218, 68, 225, 172, 232, 233, 63,
+            231, 110, 210, 108, 51, 25, 43, 231, 125, 230, 47, 145, 32,
+        ],
+        [
+            236, 165, 166, 249, 54, 207, 68, 121, 176, 134, 177, 143, 7, 104, 156, 1, 57, 62, 158,
+            204, 51, 205, 187, 225, 56, 95, 255, 145, 207, 19, 137, 25,
+        ],
+        [
+            193, 100, 46, 208, 77, 17, 64, 1, 103, 156, 154, 222, 122, 153, 178, 11, 101, 138, 156,
+            74, 247, 158, 1, 74, 139, 90, 207, 2, 47, 131, 87, 29,
+        ],
+    ],
+    [
+        [
+            9, 151, 216, 97, 151, 239, 26, 211, 241, 12, 192, 250, 40, 134, 192, 184, 76, 241, 13,
+            93, 189, 139, 9, 63, 165, 232, 209, 97, 134, 128, 47, 25,
+        ],
+        [
+            6, 215, 38, 225, 140, 33, 72, 85, 69, 32, 15, 206, 114, 187, 55, 198, 11, 4, 119, 45,
+            48, 105, 157, 118, 14, 168, 134, 79, 202, 86, 107, 54,
+        ],
+        [
+            155, 143, 59, 197, 19, 114, 1, 51, 150, 66, 32, 45, 71, 46, 23, 139, 173, 182, 83, 56,
+            51, 209, 56, 207, 199, 111, 208, 234, 115, 93, 56, 6,
+        ],
+        [
+            69, 81, 31, 176, 185, 244, 148, 134, 139, 89, 254, 245, 123, 72, 132, 8, 143, 17, 136,
+            40, 232, 236, 23, 16, 49, 201, 214, 155, 143, 214, 68, 46,
+        ],
+        [
+            103, 7, 147, 218, 180, 175, 110, 155, 209, 66, 81, 13, 47, 84, 202, 205, 59, 40, 230,
+            40, 60, 237, 124, 116, 178, 122, 45, 76, 26, 168, 166, 4,
+        ],
+        [
+            252, 98, 53, 28, 192, 10, 195, 191, 117, 188, 21, 45, 1, 14, 222, 141, 58, 57, 250,
+            153, 163, 4, 227, 41, 61, 128, 72, 245, 187, 192, 246, 59,
+        ],
+        [
+            226, 85, 143, 113, 156, 101, 10, 58, 234, 10, 73, 60, 40, 247, 222, 193, 27, 221, 7,
+            61, 57, 100, 158, 132, 84, 101, 53, 162, 83, 170, 215, 49,
+        ],
+        [
+            129, 32, 252, 254, 63, 237, 242, 129, 12, 162, 24, 70, 1, 58, 54, 56, 170, 225, 83,
+            125, 77, 125, 105, 162, 239, 120, 30, 118, 26, 46, 45, 21,
+        ],
+    ],
+    [
+        [
+            83, 141, 231, 4, 150, 71, 0, 103, 215, 244, 1, 244, 23, 161, 130, 12, 169, 207, 32, 79,
+            56, 140, 75, 104, 119, 157, 228, 240, 79, 73, 51, 59,
+        ],
+        [
+            234, 101, 136, 42, 80, 209, 52, 16, 174, 200, 12, 76, 182, 75, 79, 226, 173, 229, 58,
+            57, 151, 88, 7, 252, 145, 51, 6, 142, 162, 20, 130, 29,
+        ],
+        [
+            129, 10, 76, 145, 229, 149, 209, 78, 93, 209, 163, 248, 222, 215, 207, 48, 177, 196,
+            136, 196, 57, 240, 145, 134, 0, 59, 120, 123, 58, 72, 103, 34,
+        ],
+        [
+            159, 127, 28, 87, 113, 72, 104, 203, 67, 58, 211, 169, 138, 254, 31, 168, 1, 12, 221,
+            178, 227, 218, 109, 93, 161, 116, 98, 24, 54, 136, 33, 11,
+        ],
+        [
+            173, 29, 146, 100, 140, 178, 50, 51, 128, 61, 123, 161, 60, 75, 103, 218, 56, 121, 24,
+            43, 147, 99, 210, 193, 172, 188, 106, 182, 135, 222, 57, 20,
+        ],
+        [
+            166, 29, 73, 107, 24, 198, 36, 111, 3, 25, 183, 183, 143, 82, 96, 98, 203, 35, 146, 82,
+            49, 121, 135, 63, 191, 33, 165, 223, 230, 26, 71, 51,
+        ],
+        [
+            140, 119, 109, 157, 12, 201, 64, 255, 148, 64, 154, 55, 156, 173, 187, 3, 77, 206, 106,
+            33, 181, 22, 193, 88, 126, 68, 56, 236, 204, 241, 206, 59,
+        ],
+        [
+            223, 213, 234, 5, 113, 245, 89, 108, 98, 154, 67, 165, 131, 55, 1, 68, 214, 224, 106,
+            243, 170, 193, 222, 162, 232, 153, 246, 35, 149, 43, 120, 5,
+        ],
+    ],
+    [
+        [
+            90, 122, 239, 39, 194, 205, 160, 37, 139, 132, 43, 234, 78, 48, 93, 144, 182, 51, 6,
+            196, 190, 232, 79, 172, 38, 94, 38, 172, 54, 233, 92, 49,
+        ],
+        [
+            158, 106, 252, 23, 153, 30, 201, 88, 50, 108, 217, 90, 33, 91, 67, 52, 33, 27, 134, 67,
+            250, 80, 151, 7, 119, 5, 89, 110, 23, 214, 67, 17,
+        ],
+        [
+            223, 251, 16, 98, 252, 239, 182, 12, 255, 242, 67, 31, 99, 169, 10, 148, 70, 186, 236,
+            158, 230, 79, 2, 61, 166, 121, 72, 159, 81, 207, 43, 10,
+        ],
+        [
+            88, 65, 196, 114, 188, 103, 151, 218, 161, 219, 137, 9, 51, 81, 215, 64, 102, 55, 235,
+            96, 48, 54, 52, 217, 192, 125, 147, 89, 141, 194, 69, 14,
+        ],
+        [
+            146, 75, 25, 162, 47, 21, 77, 168, 14, 191, 35, 24, 27, 59, 14, 51, 198, 52, 130, 41,
+            223, 79, 45, 216, 248, 178, 250, 45, 220, 124, 24, 56,
+        ],
+        [
+            141, 246, 176, 10, 226, 240, 16, 2, 3, 42, 222, 107, 203, 96, 22, 128, 170, 251, 19,
+            224, 63, 228, 160, 116, 247, 60, 194, 164, 213, 90, 228, 41,
+        ],
+        [
+            193, 89, 149, 53, 35, 2, 173, 192, 228, 106, 131, 55, 10, 216, 235, 148, 81, 38, 218,
+            206, 47, 201, 1, 76, 165, 237, 8, 181, 51, 182, 179, 44,
+        ],
+        [
+            208, 110, 172, 179, 135, 41, 146, 198, 71, 234, 170, 157, 98, 177, 254, 237, 235, 236,
+            170, 248, 184, 158, 182, 109, 20, 53, 20, 230, 235, 161, 47, 58,
+        ],
+    ],
+    [
+        [
+            173, 212, 202, 158, 121, 32, 179, 110, 216, 160, 75, 127, 248, 141, 186, 129, 102, 227,
+            204, 97, 88, 186, 60, 229, 229, 253, 167, 213, 175, 226, 127, 47,
+        ],
+        [
+            150, 23, 120, 218, 29, 242, 9, 232, 28, 28, 210, 109, 85, 108, 243, 26, 30, 119, 124,
+            117, 125, 222, 224, 22, 235, 55, 57, 228, 153, 209, 124, 48,
+        ],
+        [
+            167, 39, 173, 99, 186, 157, 146, 31, 20, 26, 63, 62, 185, 254, 57, 13, 117, 96, 73, 25,
+            182, 97, 42, 160, 92, 242, 26, 54, 145, 29, 31, 29,
+        ],
+        [
+            27, 117, 138, 76, 21, 193, 135, 154, 46, 130, 187, 36, 2, 196, 200, 196, 114, 110, 210,
+            92, 51, 12, 40, 19, 62, 34, 201, 44, 159, 3, 144, 4,
+        ],
+        [
+            210, 235, 204, 146, 85, 169, 236, 3, 193, 188, 201, 172, 79, 164, 148, 207, 40, 103,
+            56, 206, 91, 104, 249, 17, 75, 159, 27, 103, 101, 72, 100, 37,
+        ],
+        [
+            129, 52, 24, 42, 26, 131, 207, 198, 211, 136, 212, 66, 40, 68, 181, 251, 95, 157, 84,
+            218, 27, 199, 150, 194, 62, 78, 46, 197, 253, 50, 6, 16,
+        ],
+        [
+            218, 196, 228, 200, 220, 170, 106, 13, 0, 28, 246, 133, 25, 240, 21, 184, 58, 238, 128,
+            219, 223, 224, 8, 226, 193, 129, 230, 131, 177, 116, 189, 3,
+        ],
+        [
+            184, 75, 112, 127, 251, 197, 87, 114, 3, 208, 126, 142, 219, 226, 17, 61, 237, 126,
+            201, 155, 23, 146, 209, 142, 168, 108, 160, 39, 43, 57, 93, 40,
+        ],
+    ],
+    [
+        [
+            95, 161, 42, 151, 11, 124, 239, 193, 114, 247, 72, 186, 128, 141, 47, 108, 197, 47,
+            226, 180, 118, 22, 163, 147, 103, 103, 121, 44, 149, 7, 225, 52,
+        ],
+        [
+            197, 245, 125, 151, 243, 170, 39, 79, 128, 110, 215, 131, 244, 219, 188, 110, 33, 84,
+            142, 213, 174, 251, 94, 60, 6, 133, 32, 235, 44, 57, 127, 13,
+        ],
+        [
+            252, 8, 154, 162, 113, 63, 242, 246, 220, 245, 78, 4, 239, 88, 232, 208, 96, 142, 94,
+            85, 216, 210, 72, 102, 140, 127, 171, 225, 68, 126, 75, 24,
+        ],
+        [
+            86, 231, 20, 187, 67, 55, 132, 4, 133, 210, 120, 101, 238, 222, 7, 144, 48, 63, 42,
+            118, 223, 206, 56, 246, 33, 231, 203, 252, 190, 167, 135, 6,
+        ],
+        [
+            94, 214, 184, 9, 110, 119, 88, 199, 41, 223, 151, 204, 14, 1, 22, 72, 205, 44, 201,
+            199, 49, 104, 118, 205, 219, 194, 27, 249, 202, 206, 11, 38,
+        ],
+        [
+            238, 189, 11, 100, 86, 83, 110, 193, 217, 127, 43, 219, 33, 236, 60, 155, 46, 210, 95,
+            165, 211, 55, 114, 120, 151, 4, 84, 199, 188, 80, 111, 24,
+        ],
+        [
+            75, 132, 96, 67, 196, 109, 201, 195, 202, 133, 205, 157, 180, 194, 218, 28, 161, 176,
+            208, 36, 13, 53, 120, 238, 165, 67, 123, 43, 49, 230, 118, 16,
+        ],
+        [
+            216, 53, 14, 231, 149, 30, 238, 198, 91, 0, 75, 182, 248, 127, 51, 15, 249, 81, 128,
+            49, 85, 26, 247, 233, 71, 61, 204, 240, 198, 44, 253, 4,
+        ],
+    ],
+    [
+        [
+            117, 79, 104, 186, 22, 240, 96, 245, 133, 124, 14, 208, 175, 92, 38, 203, 96, 167, 168,
+            74, 132, 255, 239, 51, 230, 9, 37, 100, 77, 221, 86, 56,
+        ],
+        [
+            124, 56, 154, 244, 207, 39, 218, 208, 77, 128, 167, 52, 127, 189, 228, 183, 179, 179,
+            19, 142, 235, 99, 1, 109, 232, 184, 146, 75, 251, 180, 168, 34,
+        ],
+        [
+            38, 81, 241, 77, 207, 198, 52, 63, 104, 175, 182, 68, 16, 186, 231, 19, 112, 112, 137,
+            169, 174, 109, 153, 170, 164, 156, 204, 14, 86, 138, 183, 10,
+        ],
+        [
+            224, 100, 144, 95, 68, 53, 51, 69, 233, 19, 14, 192, 229, 240, 1, 145, 122, 174, 244,
+            98, 18, 76, 248, 132, 254, 161, 221, 175, 254, 139, 28, 44,
+        ],
+        [
+            106, 24, 183, 172, 72, 180, 89, 112, 169, 107, 39, 253, 193, 177, 132, 118, 27, 212,
+            94, 108, 143, 97, 7, 222, 16, 135, 55, 59, 108, 184, 225, 39,
+        ],
+        [
+            185, 92, 139, 189, 50, 105, 41, 186, 189, 124, 23, 212, 220, 255, 191, 28, 156, 70,
+            224, 206, 235, 149, 177, 221, 61, 166, 2, 189, 157, 71, 9, 10,
+        ],
+        [
+            46, 205, 220, 212, 230, 14, 222, 10, 86, 30, 250, 186, 42, 16, 214, 159, 31, 106, 154,
+            168, 68, 126, 110, 221, 254, 185, 231, 235, 185, 145, 232, 50,
+        ],
+        [
+            158, 96, 218, 239, 191, 119, 59, 99, 248, 159, 160, 48, 59, 14, 160, 80, 7, 149, 110,
+            144, 96, 78, 250, 254, 213, 73, 119, 133, 151, 128, 130, 57,
+        ],
+    ],
+    [
+        [
+            55, 146, 3, 40, 40, 129, 157, 149, 185, 250, 175, 142, 28, 65, 11, 98, 180, 41, 163,
+            240, 126, 177, 8, 171, 37, 81, 46, 151, 115, 201, 64, 4,
+        ],
+        [
+            33, 171, 216, 52, 120, 12, 136, 183, 174, 39, 212, 234, 107, 120, 254, 152, 217, 105,
+            17, 158, 47, 221, 66, 80, 173, 143, 0, 245, 2, 54, 105, 20,
+        ],
+        [
+            165, 77, 224, 22, 86, 173, 23, 3, 158, 217, 230, 209, 104, 123, 51, 124, 229, 70, 86,
+            113, 69, 124, 202, 89, 130, 165, 9, 143, 13, 117, 251, 41,
+        ],
+        [
+            150, 0, 141, 72, 1, 45, 247, 44, 239, 25, 127, 126, 167, 217, 60, 19, 87, 40, 41, 53,
+            154, 65, 36, 62, 224, 245, 133, 23, 62, 113, 68, 10,
+        ],
+        [
+            240, 173, 98, 79, 231, 216, 199, 13, 115, 239, 49, 44, 70, 131, 132, 17, 181, 178, 255,
+            187, 26, 212, 140, 247, 181, 66, 131, 122, 34, 232, 212, 51,
+        ],
+        [
+            128, 97, 150, 86, 107, 88, 9, 39, 221, 108, 40, 17, 141, 189, 176, 112, 245, 115, 102,
+            222, 41, 103, 116, 83, 45, 41, 79, 189, 123, 128, 221, 28,
+        ],
+        [
+            124, 71, 144, 26, 166, 147, 228, 121, 160, 123, 202, 119, 231, 221, 98, 239, 232, 206,
+            68, 253, 178, 155, 183, 151, 255, 14, 63, 178, 233, 48, 7, 45,
+        ],
+        [
+            247, 149, 217, 167, 89, 183, 230, 75, 8, 65, 241, 170, 95, 83, 4, 74, 30, 184, 105,
+            224, 114, 65, 153, 101, 169, 46, 55, 94, 151, 150, 156, 62,
+        ],
+    ],
+    [
+        [
+            224, 154, 142, 251, 230, 202, 38, 207, 234, 62, 53, 21, 186, 231, 57, 92, 134, 174, 48,
+            226, 161, 198, 9, 186, 167, 197, 249, 112, 127, 236, 188, 40,
+        ],
+        [
+            71, 140, 229, 89, 155, 109, 149, 82, 250, 226, 71, 125, 62, 174, 128, 67, 205, 8, 237,
+            7, 131, 223, 182, 207, 162, 132, 28, 3, 34, 239, 115, 1,
+        ],
+        [
+            2, 52, 130, 240, 234, 192, 5, 100, 224, 251, 234, 21, 75, 255, 150, 249, 123, 6, 111,
+            69, 38, 123, 57, 240, 142, 106, 115, 11, 208, 182, 76, 1,
+        ],
+        [
+            195, 55, 130, 187, 251, 59, 51, 201, 72, 12, 61, 186, 107, 186, 8, 121, 240, 11, 205,
+            41, 41, 96, 48, 97, 225, 55, 86, 127, 182, 47, 73, 26,
+        ],
+        [
+            252, 85, 10, 142, 41, 197, 192, 149, 233, 59, 135, 90, 245, 1, 2, 82, 149, 230, 105,
+            50, 180, 40, 246, 255, 235, 38, 246, 220, 26, 71, 108, 58,
+        ],
+        [
+            45, 234, 112, 242, 241, 115, 242, 151, 74, 199, 165, 59, 232, 121, 140, 143, 72, 21,
+            222, 198, 250, 27, 82, 71, 136, 229, 46, 114, 215, 58, 80, 59,
+        ],
+        [
+            76, 30, 114, 108, 66, 237, 123, 62, 251, 89, 191, 57, 10, 24, 103, 125, 62, 176, 243,
+            156, 26, 71, 128, 100, 216, 96, 134, 238, 25, 255, 52, 18,
+        ],
+        [
+            121, 9, 205, 213, 115, 82, 104, 88, 4, 94, 64, 39, 52, 23, 184, 59, 249, 173, 51, 174,
+            29, 29, 93, 209, 180, 25, 30, 248, 200, 217, 8, 57,
+        ],
+    ],
+    [
+        [
+            29, 243, 202, 191, 232, 38, 147, 197, 36, 165, 153, 225, 248, 25, 108, 49, 193, 125,
+            147, 152, 224, 204, 29, 99, 149, 18, 80, 202, 126, 240, 240, 44,
+        ],
+        [
+            251, 175, 93, 27, 1, 223, 152, 144, 40, 199, 0, 117, 26, 185, 199, 115, 43, 5, 28, 50,
+            87, 195, 19, 177, 129, 150, 12, 27, 27, 106, 104, 1,
+        ],
+        [
+            229, 107, 241, 196, 196, 75, 154, 193, 28, 194, 91, 92, 211, 30, 203, 193, 132, 50,
+            220, 88, 9, 89, 31, 83, 156, 14, 131, 253, 144, 77, 180, 21,
+        ],
+        [
+            254, 86, 225, 99, 239, 66, 104, 173, 130, 44, 9, 3, 102, 150, 131, 27, 222, 8, 11, 91,
+            248, 133, 165, 168, 173, 243, 131, 231, 0, 73, 179, 7,
+        ],
+        [
+            188, 14, 111, 31, 108, 93, 253, 223, 11, 168, 85, 111, 196, 44, 54, 85, 185, 179, 22,
+            134, 219, 228, 190, 119, 109, 175, 172, 63, 43, 197, 129, 28,
+        ],
+        [
+            100, 77, 224, 123, 66, 253, 55, 225, 81, 92, 1, 112, 220, 61, 123, 40, 141, 117, 186,
+            45, 66, 37, 141, 226, 222, 227, 252, 18, 235, 1, 150, 55,
+        ],
+        [
+            21, 60, 39, 162, 247, 118, 245, 247, 37, 78, 193, 16, 37, 78, 38, 239, 102, 205, 145,
+            92, 94, 149, 21, 90, 29, 2, 226, 14, 63, 94, 18, 55,
+        ],
+        [
+            32, 30, 94, 116, 13, 47, 190, 17, 138, 146, 169, 220, 7, 166, 141, 201, 122, 50, 211,
+            216, 192, 170, 170, 171, 30, 44, 106, 143, 15, 47, 230, 25,
+        ],
+    ],
+    [
+        [
+            77, 240, 65, 69, 55, 114, 61, 35, 5, 23, 224, 54, 74, 102, 26, 45, 204, 151, 93, 176,
+            44, 214, 39, 238, 92, 55, 135, 235, 175, 159, 199, 5,
+        ],
+        [
+            122, 13, 98, 228, 133, 218, 65, 35, 16, 73, 59, 73, 0, 127, 167, 126, 175, 104, 228,
+            96, 221, 56, 145, 137, 246, 33, 195, 5, 77, 54, 190, 9,
+        ],
+        [
+            174, 226, 237, 252, 72, 86, 217, 57, 42, 131, 198, 224, 42, 59, 77, 64, 103, 3, 231,
+            53, 203, 219, 45, 142, 33, 249, 24, 163, 139, 52, 71, 22,
+        ],
+        [
+            165, 193, 99, 157, 238, 70, 47, 182, 129, 207, 77, 193, 167, 206, 41, 170, 8, 91, 51,
+            163, 137, 67, 22, 73, 127, 207, 133, 240, 97, 233, 40, 62,
+        ],
+        [
+            68, 84, 199, 125, 172, 196, 145, 144, 127, 29, 232, 25, 215, 220, 132, 99, 86, 52, 46,
+            227, 101, 72, 70, 193, 3, 12, 225, 172, 53, 10, 55, 1,
+        ],
+        [
+            3, 230, 66, 237, 23, 28, 118, 88, 23, 25, 96, 176, 203, 97, 140, 92, 216, 153, 34, 166,
+            23, 137, 59, 172, 172, 144, 164, 12, 90, 33, 51, 50,
+        ],
+        [
+            208, 145, 77, 172, 10, 38, 208, 225, 138, 7, 140, 175, 49, 114, 231, 203, 45, 54, 2,
+            248, 110, 69, 166, 65, 113, 253, 131, 119, 63, 153, 168, 8,
+        ],
+        [
+            64, 27, 162, 156, 179, 22, 43, 27, 133, 222, 33, 161, 107, 141, 133, 53, 253, 214, 128,
+            156, 65, 14, 138, 233, 169, 145, 68, 139, 139, 152, 17, 21,
+        ],
+    ],
+    [
+        [
+            60, 31, 22, 89, 116, 180, 216, 149, 0, 129, 148, 46, 128, 169, 173, 130, 198, 155, 20,
+            77, 15, 33, 67, 126, 183, 233, 15, 232, 67, 208, 104, 2,
+        ],
+        [
+            155, 169, 114, 191, 1, 9, 32, 205, 125, 117, 59, 132, 211, 82, 6, 93, 8, 189, 13, 64,
+            142, 81, 52, 199, 215, 64, 188, 226, 85, 66, 199, 4,
+        ],
+        [
+            135, 136, 62, 242, 84, 7, 79, 221, 122, 126, 6, 216, 66, 57, 49, 81, 215, 223, 105,
+            207, 3, 255, 74, 17, 23, 227, 139, 51, 56, 70, 173, 59,
+        ],
+        [
+            180, 159, 125, 70, 170, 143, 19, 162, 132, 18, 31, 117, 102, 35, 244, 188, 51, 218,
+            241, 248, 199, 96, 59, 221, 138, 234, 184, 20, 66, 172, 108, 63,
+        ],
+        [
+            64, 182, 108, 185, 163, 65, 242, 40, 229, 179, 230, 48, 115, 253, 64, 30, 243, 239,
+            110, 178, 250, 53, 51, 179, 73, 51, 100, 19, 25, 117, 241, 22,
+        ],
+        [
+            231, 35, 183, 229, 255, 134, 248, 75, 161, 139, 166, 135, 137, 49, 205, 77, 3, 250,
+            194, 31, 188, 120, 169, 46, 149, 249, 55, 90, 229, 74, 4, 49,
+        ],
+        [
+            24, 229, 105, 198, 193, 222, 104, 210, 123, 28, 79, 249, 84, 41, 18, 53, 10, 226, 217,
+            78, 205, 25, 72, 174, 239, 206, 106, 238, 80, 64, 200, 22,
+        ],
+        [
+            222, 176, 15, 182, 226, 196, 43, 186, 234, 151, 194, 218, 55, 176, 128, 110, 23, 3,
+            111, 85, 205, 226, 16, 195, 224, 5, 52, 202, 233, 194, 144, 32,
+        ],
+    ],
+    [
+        [
+            65, 188, 25, 218, 142, 199, 65, 90, 223, 99, 127, 135, 228, 118, 83, 193, 167, 156,
+            245, 70, 139, 254, 210, 121, 117, 108, 221, 63, 29, 183, 68, 23,
+        ],
+        [
+            45, 246, 56, 33, 68, 250, 251, 144, 133, 241, 149, 206, 109, 107, 232, 244, 134, 26,
+            11, 23, 246, 208, 237, 5, 5, 70, 130, 91, 33, 64, 201, 53,
+        ],
+        [
+            202, 192, 115, 229, 84, 103, 107, 253, 178, 17, 39, 9, 36, 148, 157, 247, 239, 229, 28,
+            93, 207, 6, 42, 165, 6, 122, 151, 176, 77, 47, 252, 7,
+        ],
+        [
+            207, 85, 81, 110, 169, 61, 244, 254, 205, 23, 156, 177, 253, 223, 114, 177, 39, 174,
+            107, 106, 136, 3, 157, 197, 104, 218, 228, 151, 68, 138, 26, 52,
+        ],
+        [
+            50, 91, 21, 55, 91, 236, 143, 193, 156, 32, 162, 37, 68, 242, 34, 132, 56, 188, 117,
+            252, 205, 61, 217, 205, 22, 224, 120, 2, 142, 91, 239, 7,
+        ],
+        [
+            98, 217, 244, 140, 150, 75, 199, 231, 239, 148, 141, 95, 83, 68, 152, 85, 142, 239,
+            212, 124, 160, 95, 115, 128, 194, 250, 115, 140, 161, 21, 111, 40,
+        ],
+        [
+            103, 19, 40, 8, 83, 195, 218, 97, 78, 185, 136, 249, 38, 37, 51, 245, 34, 59, 230, 66,
+            108, 128, 156, 149, 116, 19, 215, 251, 124, 252, 120, 31,
+        ],
+        [
+            220, 0, 174, 242, 25, 60, 52, 199, 2, 18, 234, 211, 205, 186, 197, 58, 213, 209, 37,
+            91, 68, 41, 212, 206, 113, 9, 4, 54, 157, 125, 222, 22,
+        ],
+    ],
+    [
+        [
+            60, 95, 106, 48, 229, 64, 114, 62, 218, 8, 178, 224, 211, 189, 87, 226, 33, 44, 116,
+            179, 48, 119, 6, 223, 75, 208, 59, 198, 250, 3, 96, 17,
+        ],
+        [
+            95, 180, 11, 184, 37, 224, 28, 70, 179, 135, 225, 145, 85, 105, 148, 132, 31, 49, 15,
+            181, 204, 100, 143, 221, 64, 231, 81, 201, 255, 93, 18, 46,
+        ],
+        [
+            163, 206, 214, 36, 248, 250, 138, 215, 102, 145, 187, 127, 207, 228, 179, 30, 237, 175,
+            69, 58, 117, 224, 107, 128, 0, 10, 199, 204, 144, 221, 111, 21,
+        ],
+        [
+            65, 194, 195, 213, 229, 186, 100, 176, 8, 52, 52, 67, 60, 46, 97, 32, 154, 236, 10, 44,
+            194, 188, 140, 207, 58, 214, 36, 231, 249, 44, 20, 55,
+        ],
+        [
+            21, 231, 150, 194, 145, 213, 144, 44, 76, 189, 202, 14, 62, 107, 105, 136, 153, 154,
+            16, 176, 139, 115, 87, 62, 16, 249, 72, 237, 131, 75, 114, 59,
+        ],
+        [
+            221, 180, 148, 120, 116, 48, 217, 169, 177, 254, 80, 199, 131, 151, 79, 41, 76, 181,
+            126, 86, 146, 180, 54, 66, 34, 169, 24, 95, 230, 127, 206, 42,
+        ],
+        [
+            153, 198, 204, 12, 57, 10, 116, 176, 197, 116, 227, 193, 115, 216, 137, 230, 206, 161,
+            169, 203, 53, 115, 126, 94, 225, 40, 47, 121, 180, 193, 191, 14,
+        ],
+        [
+            132, 55, 75, 201, 131, 204, 219, 8, 118, 98, 65, 32, 145, 169, 179, 73, 224, 100, 168,
+            94, 47, 22, 227, 203, 68, 128, 36, 32, 112, 241, 126, 41,
+        ],
+    ],
+    [
+        [
+            185, 130, 202, 63, 39, 212, 225, 220, 185, 162, 38, 43, 70, 142, 46, 167, 158, 231,
+            248, 162, 242, 228, 11, 205, 122, 190, 138, 146, 68, 200, 133, 25,
+        ],
+        [
+            213, 163, 16, 131, 225, 53, 231, 167, 142, 135, 65, 194, 29, 18, 178, 96, 58, 186, 75,
+            238, 6, 177, 23, 109, 14, 47, 134, 55, 211, 252, 146, 24,
+        ],
+        [
+            9, 164, 244, 123, 78, 17, 135, 83, 123, 116, 140, 84, 200, 32, 129, 123, 112, 125, 127,
+            102, 9, 77, 120, 106, 205, 83, 139, 201, 178, 212, 206, 52,
+        ],
+        [
+            2, 154, 191, 181, 97, 225, 10, 225, 173, 78, 34, 92, 171, 14, 150, 110, 158, 229, 90,
+            223, 81, 134, 2, 162, 176, 233, 223, 254, 63, 229, 137, 6,
+        ],
+        [
+            58, 166, 77, 108, 142, 242, 100, 146, 162, 37, 77, 174, 129, 3, 223, 75, 28, 158, 118,
+            86, 133, 195, 136, 246, 117, 173, 109, 37, 117, 87, 8, 48,
+        ],
+        [
+            89, 201, 176, 246, 163, 171, 140, 250, 101, 230, 141, 183, 75, 25, 28, 67, 247, 45,
+            213, 84, 241, 33, 235, 165, 130, 125, 107, 163, 46, 28, 74, 13,
+        ],
+        [
+            102, 44, 233, 80, 122, 63, 170, 158, 150, 164, 86, 224, 152, 129, 198, 100, 247, 121,
+            85, 67, 184, 35, 97, 152, 12, 86, 232, 241, 177, 38, 19, 16,
+        ],
+        [
+            128, 70, 1, 11, 18, 206, 21, 3, 196, 188, 66, 134, 153, 133, 140, 52, 70, 114, 252, 17,
+            143, 212, 210, 62, 45, 114, 178, 57, 254, 119, 152, 62,
+        ],
+    ],
+    [
+        [
+            86, 29, 41, 210, 20, 163, 246, 97, 255, 42, 82, 153, 58, 80, 69, 223, 114, 218, 207,
+            112, 216, 174, 191, 209, 200, 188, 254, 134, 214, 30, 232, 13,
+        ],
+        [
+            146, 74, 34, 8, 35, 218, 132, 100, 104, 27, 60, 156, 232, 162, 104, 71, 255, 94, 4,
+            125, 63, 59, 17, 91, 86, 65, 207, 33, 111, 195, 21, 61,
+        ],
+        [
+            83, 90, 45, 62, 199, 173, 172, 28, 233, 71, 22, 4, 87, 56, 218, 182, 125, 246, 86, 201,
+            211, 184, 158, 40, 99, 41, 70, 52, 68, 70, 33, 11,
+        ],
+        [
+            160, 62, 174, 112, 183, 78, 236, 128, 32, 30, 87, 94, 5, 220, 26, 132, 201, 247, 134,
+            39, 177, 19, 78, 198, 18, 118, 167, 237, 23, 1, 25, 47,
+        ],
+        [
+            181, 137, 97, 42, 173, 195, 208, 246, 200, 53, 2, 111, 52, 198, 106, 192, 198, 223,
+            132, 39, 226, 208, 93, 252, 43, 174, 146, 151, 35, 70, 71, 17,
+        ],
+        [
+            185, 213, 47, 92, 58, 84, 148, 151, 165, 115, 236, 139, 63, 3, 108, 13, 100, 13, 73,
+            104, 142, 21, 241, 166, 37, 188, 69, 96, 115, 201, 132, 37,
+        ],
+        [
+            227, 170, 112, 80, 230, 140, 124, 73, 86, 12, 122, 47, 236, 177, 87, 54, 38, 180, 198,
+            34, 36, 211, 183, 241, 169, 23, 98, 119, 106, 231, 182, 46,
+        ],
+        [
+            211, 204, 104, 127, 81, 137, 162, 175, 132, 17, 114, 150, 104, 121, 23, 138, 87, 2,
+            118, 223, 47, 149, 65, 61, 225, 158, 188, 62, 132, 24, 89, 1,
+        ],
+    ],
+    [
+        [
+            61, 236, 235, 15, 173, 143, 20, 200, 109, 66, 144, 52, 144, 222, 213, 48, 46, 246, 142,
+            179, 144, 182, 34, 247, 30, 74, 122, 105, 62, 148, 121, 55,
+        ],
+        [
+            138, 247, 228, 197, 108, 167, 21, 234, 145, 197, 219, 29, 69, 246, 61, 188, 46, 76,
+            255, 106, 41, 192, 16, 159, 198, 14, 32, 15, 185, 106, 162, 61,
+        ],
+        [
+            221, 232, 255, 202, 222, 138, 118, 47, 195, 220, 232, 160, 178, 195, 18, 192, 134, 252,
+            39, 157, 86, 11, 116, 44, 110, 103, 166, 191, 244, 217, 176, 62,
+        ],
+        [
+            103, 49, 138, 113, 133, 245, 37, 35, 191, 47, 54, 201, 112, 220, 191, 103, 254, 100,
+            32, 246, 92, 171, 179, 209, 2, 98, 151, 243, 9, 160, 7, 17,
+        ],
+        [
+            194, 218, 101, 98, 161, 81, 251, 151, 95, 207, 172, 101, 69, 59, 19, 129, 145, 90, 58,
+            131, 112, 62, 201, 181, 12, 218, 118, 57, 128, 243, 18, 61,
+        ],
+        [
+            136, 114, 9, 162, 245, 108, 250, 167, 107, 12, 53, 121, 162, 86, 72, 82, 193, 173, 193,
+            3, 112, 153, 247, 130, 215, 3, 83, 160, 130, 183, 171, 36,
+        ],
+        [
+            72, 255, 40, 62, 196, 43, 119, 217, 123, 93, 7, 133, 137, 86, 165, 234, 226, 235, 82,
+            36, 205, 38, 94, 234, 141, 70, 115, 139, 150, 35, 3, 15,
+        ],
+        [
+            137, 194, 240, 168, 61, 140, 100, 71, 151, 99, 232, 226, 1, 177, 155, 111, 105, 172,
+            167, 186, 232, 216, 142, 252, 199, 238, 27, 190, 112, 115, 218, 15,
+        ],
+    ],
+    [
+        [
+            210, 180, 82, 123, 75, 247, 236, 159, 89, 130, 67, 24, 48, 93, 251, 167, 49, 138, 99,
+            231, 31, 23, 106, 47, 29, 153, 248, 255, 6, 64, 114, 37,
+        ],
+        [
+            213, 231, 86, 118, 67, 132, 251, 112, 123, 171, 149, 118, 232, 231, 88, 39, 110, 109,
+            67, 159, 116, 246, 137, 172, 209, 103, 210, 207, 92, 19, 65, 11,
+        ],
+        [
+            159, 0, 20, 44, 28, 39, 141, 233, 233, 7, 150, 247, 77, 58, 84, 79, 162, 237, 150, 180,
+            146, 15, 95, 110, 111, 147, 65, 35, 109, 145, 56, 3,
+        ],
+        [
+            8, 60, 212, 124, 61, 67, 66, 57, 221, 27, 31, 245, 118, 82, 175, 250, 190, 11, 19, 136,
+            111, 10, 148, 232, 184, 161, 35, 134, 69, 73, 154, 17,
+        ],
+        [
+            145, 127, 187, 184, 48, 200, 18, 166, 176, 76, 149, 227, 216, 148, 148, 30, 55, 241,
+            93, 246, 183, 184, 74, 100, 56, 253, 80, 102, 120, 224, 96, 52,
+        ],
+        [
+            198, 162, 119, 153, 73, 75, 95, 48, 9, 209, 11, 141, 127, 201, 187, 106, 244, 206, 122,
+            104, 124, 120, 171, 12, 234, 209, 27, 130, 143, 214, 21, 55,
+        ],
+        [
+            187, 102, 233, 179, 50, 210, 197, 38, 215, 193, 25, 172, 131, 167, 24, 42, 181, 204,
+            231, 27, 240, 186, 96, 154, 187, 91, 0, 202, 139, 153, 89, 22,
+        ],
+        [
+            139, 6, 212, 90, 73, 253, 231, 41, 155, 82, 25, 222, 118, 132, 114, 172, 73, 33, 16,
+            106, 255, 202, 122, 2, 32, 23, 219, 145, 34, 3, 127, 17,
+        ],
+    ],
+    [
+        [
+            15, 218, 1, 4, 47, 88, 165, 70, 251, 169, 133, 238, 213, 60, 36, 16, 38, 25, 239, 203,
+            119, 241, 177, 190, 214, 205, 67, 143, 237, 93, 65, 12,
+        ],
+        [
+            139, 246, 38, 149, 143, 160, 39, 39, 68, 154, 125, 174, 15, 68, 25, 53, 134, 207, 82,
+            209, 173, 211, 1, 232, 108, 205, 236, 153, 156, 188, 123, 49,
+        ],
+        [
+            166, 203, 125, 197, 10, 162, 54, 101, 73, 138, 132, 192, 94, 134, 184, 43, 163, 125,
+            62, 136, 192, 111, 81, 244, 96, 91, 107, 230, 39, 174, 221, 50,
+        ],
+        [
+            203, 17, 199, 92, 248, 138, 46, 153, 243, 134, 224, 231, 126, 165, 12, 83, 132, 100,
+            210, 177, 219, 175, 207, 80, 243, 78, 207, 168, 26, 150, 59, 16,
+        ],
+        [
+            210, 115, 149, 113, 141, 81, 10, 215, 232, 146, 149, 148, 242, 200, 224, 251, 2, 113,
+            208, 123, 121, 60, 91, 36, 120, 173, 36, 166, 222, 85, 146, 17,
+        ],
+        [
+            15, 39, 251, 185, 192, 28, 201, 215, 69, 23, 154, 118, 71, 80, 71, 200, 44, 28, 159,
+            144, 72, 122, 131, 183, 155, 235, 245, 162, 246, 224, 195, 30,
+        ],
+        [
+            192, 99, 56, 232, 172, 239, 89, 241, 68, 215, 74, 219, 17, 83, 149, 196, 212, 141, 89,
+            77, 176, 112, 208, 14, 102, 155, 163, 223, 19, 237, 240, 11,
+        ],
+        [
+            11, 134, 188, 142, 141, 48, 24, 249, 107, 250, 136, 137, 50, 137, 122, 132, 89, 184,
+            91, 134, 18, 58, 197, 81, 29, 107, 53, 52, 51, 190, 47, 41,
+        ],
+    ],
+    [
+        [
+            216, 96, 15, 16, 34, 37, 7, 137, 147, 242, 29, 102, 222, 190, 103, 228, 196, 43, 184,
+            68, 207, 200, 152, 23, 166, 13, 103, 72, 250, 77, 223, 19,
+        ],
+        [
+            17, 5, 52, 91, 113, 213, 231, 173, 71, 80, 14, 50, 250, 23, 255, 204, 19, 119, 18, 63,
+            0, 183, 109, 238, 188, 128, 216, 227, 125, 77, 56, 39,
+        ],
+        [
+            137, 69, 254, 160, 111, 117, 176, 50, 113, 241, 185, 88, 252, 132, 100, 222, 204, 231,
+            208, 220, 80, 201, 73, 143, 0, 36, 187, 40, 29, 227, 128, 15,
+        ],
+        [
+            85, 19, 126, 169, 120, 52, 94, 181, 83, 59, 160, 181, 85, 188, 159, 229, 226, 209, 209,
+            144, 162, 129, 42, 221, 116, 26, 39, 226, 41, 116, 138, 37,
+        ],
+        [
+            136, 39, 38, 138, 243, 149, 227, 50, 119, 42, 102, 230, 95, 128, 172, 244, 44, 121, 53,
+            67, 27, 74, 67, 37, 254, 30, 37, 122, 3, 93, 83, 5,
+        ],
+        [
+            18, 180, 139, 65, 80, 118, 148, 154, 67, 83, 242, 248, 63, 17, 141, 98, 105, 98, 77,
+            39, 125, 125, 132, 187, 192, 110, 216, 193, 129, 161, 141, 26,
+        ],
+        [
+            12, 175, 122, 170, 199, 194, 225, 179, 142, 228, 183, 160, 252, 228, 14, 93, 28, 232,
+            62, 123, 252, 13, 7, 73, 178, 111, 126, 69, 82, 83, 167, 56,
+        ],
+        [
+            34, 98, 50, 126, 175, 145, 47, 127, 51, 121, 100, 251, 5, 193, 176, 185, 129, 28, 77,
+            14, 239, 31, 114, 104, 157, 135, 243, 15, 194, 186, 247, 47,
+        ],
+    ],
+    [
+        [
+            234, 212, 198, 174, 82, 170, 174, 229, 248, 183, 186, 230, 189, 253, 193, 136, 113,
+            147, 209, 239, 130, 31, 109, 6, 2, 116, 245, 23, 87, 89, 104, 63,
+        ],
+        [
+            254, 234, 202, 192, 38, 123, 22, 81, 79, 136, 11, 185, 106, 85, 172, 180, 130, 174,
+            183, 251, 175, 203, 79, 183, 69, 186, 217, 218, 118, 131, 45, 36,
+        ],
+        [
+            156, 17, 73, 41, 203, 16, 153, 119, 186, 222, 153, 124, 230, 146, 87, 29, 7, 191, 190,
+            168, 102, 105, 238, 126, 148, 93, 158, 1, 200, 176, 0, 61,
+        ],
+        [
+            28, 160, 75, 140, 67, 66, 166, 123, 64, 37, 80, 129, 123, 96, 55, 239, 245, 242, 176,
+            30, 43, 167, 123, 30, 176, 235, 103, 119, 245, 43, 21, 44,
+        ],
+        [
+            163, 35, 23, 88, 71, 238, 67, 76, 77, 179, 194, 119, 140, 158, 137, 93, 247, 67, 243,
+            45, 252, 94, 13, 74, 38, 133, 49, 175, 68, 253, 135, 60,
+        ],
+        [
+            82, 94, 126, 254, 52, 64, 115, 123, 76, 161, 251, 209, 137, 97, 118, 74, 81, 1, 125,
+            193, 173, 11, 246, 66, 249, 206, 159, 206, 86, 37, 57, 17,
+        ],
+        [
+            51, 57, 178, 131, 146, 150, 143, 91, 101, 103, 151, 109, 209, 27, 102, 100, 179, 202,
+            11, 153, 116, 142, 71, 129, 40, 20, 255, 203, 12, 76, 77, 53,
+        ],
+        [
+            242, 188, 216, 208, 193, 32, 161, 163, 164, 220, 120, 103, 93, 135, 13, 181, 119, 237,
+            107, 48, 156, 126, 194, 143, 116, 254, 41, 3, 168, 47, 144, 52,
+        ],
+    ],
+    [
+        [
+            11, 17, 2, 160, 102, 157, 163, 62, 254, 29, 138, 65, 230, 250, 58, 107, 50, 68, 184,
+            225, 156, 103, 209, 236, 196, 36, 246, 79, 147, 27, 42, 53,
+        ],
+        [
+            33, 33, 59, 118, 107, 125, 175, 118, 27, 201, 46, 161, 241, 95, 54, 7, 100, 3, 105,
+            194, 176, 145, 178, 241, 147, 26, 225, 149, 225, 48, 203, 10,
+        ],
+        [
+            66, 12, 165, 163, 5, 18, 193, 183, 234, 11, 228, 173, 190, 240, 194, 125, 104, 253,
+            185, 96, 65, 0, 33, 143, 94, 152, 3, 80, 191, 234, 246, 41,
+        ],
+        [
+            106, 111, 228, 171, 155, 251, 129, 82, 97, 39, 36, 150, 52, 230, 2, 162, 124, 1, 114,
+            127, 6, 185, 190, 77, 105, 246, 148, 200, 181, 122, 152, 31,
+        ],
+        [
+            76, 128, 201, 228, 223, 71, 179, 217, 129, 188, 155, 222, 98, 245, 140, 135, 197, 35,
+            131, 14, 99, 164, 68, 80, 61, 181, 56, 111, 34, 113, 62, 28,
+        ],
+        [
+            161, 162, 61, 111, 161, 188, 162, 168, 143, 68, 187, 26, 105, 142, 203, 40, 131, 84,
+            161, 4, 23, 197, 49, 163, 197, 175, 44, 66, 178, 49, 34, 44,
+        ],
+        [
+            11, 182, 20, 161, 20, 121, 201, 228, 240, 159, 79, 73, 227, 220, 151, 16, 152, 49, 190,
+            6, 54, 180, 221, 163, 21, 37, 241, 190, 21, 124, 22, 12,
+        ],
+        [
+            30, 201, 178, 243, 23, 101, 121, 64, 115, 58, 150, 24, 168, 137, 3, 5, 21, 6, 45, 177,
+            142, 173, 190, 90, 208, 48, 226, 34, 43, 38, 248, 22,
+        ],
+    ],
+    [
+        [
+            157, 196, 42, 177, 43, 61, 107, 82, 52, 60, 246, 13, 114, 134, 5, 254, 222, 212, 147,
+            7, 79, 65, 89, 206, 136, 72, 110, 59, 237, 163, 232, 55,
+        ],
+        [
+            128, 212, 62, 148, 105, 186, 184, 3, 0, 157, 76, 76, 177, 17, 197, 42, 170, 97, 125,
+            102, 222, 54, 95, 255, 85, 220, 105, 248, 152, 208, 45, 8,
+        ],
+        [
+            227, 105, 171, 85, 47, 42, 190, 109, 30, 44, 51, 6, 165, 123, 172, 160, 211, 16, 230,
+            26, 236, 178, 84, 233, 75, 144, 170, 176, 212, 45, 8, 49,
+        ],
+        [
+            71, 24, 160, 130, 125, 205, 239, 123, 250, 248, 212, 253, 150, 47, 54, 228, 246, 98,
+            93, 10, 67, 26, 177, 163, 16, 162, 188, 21, 125, 105, 201, 0,
+        ],
+        [
+            196, 159, 136, 205, 253, 178, 38, 61, 249, 18, 42, 38, 104, 83, 32, 105, 105, 218, 166,
+            88, 116, 188, 68, 103, 186, 14, 155, 32, 90, 204, 134, 19,
+        ],
+        [
+            220, 208, 84, 205, 93, 246, 24, 240, 195, 19, 108, 146, 148, 239, 196, 44, 229, 2, 201,
+            158, 233, 172, 117, 23, 108, 146, 186, 58, 130, 170, 197, 47,
+        ],
+        [
+            48, 27, 108, 232, 165, 0, 125, 145, 138, 3, 23, 211, 187, 17, 166, 226, 107, 197, 242,
+            35, 26, 41, 1, 72, 51, 128, 184, 217, 227, 132, 211, 35,
+        ],
+        [
+            92, 66, 232, 101, 143, 36, 76, 151, 59, 49, 148, 158, 200, 199, 162, 104, 255, 186,
+            143, 97, 68, 243, 94, 86, 178, 221, 95, 134, 100, 235, 198, 22,
+        ],
+    ],
+    [
+        [
+            38, 139, 223, 198, 218, 129, 87, 92, 118, 134, 243, 198, 64, 44, 189, 253, 40, 56, 192,
+            128, 135, 20, 106, 32, 231, 124, 210, 0, 196, 153, 140, 43,
+        ],
+        [
+            184, 194, 151, 179, 50, 163, 11, 229, 169, 173, 159, 39, 249, 174, 118, 91, 223, 168,
+            50, 101, 209, 0, 165, 156, 165, 7, 122, 158, 112, 227, 29, 27,
+        ],
+        [
+            64, 156, 174, 42, 252, 153, 144, 240, 138, 152, 130, 113, 25, 91, 2, 73, 78, 22, 219,
+            226, 9, 62, 212, 218, 201, 191, 178, 186, 43, 11, 237, 28,
+        ],
+        [
+            233, 131, 26, 245, 82, 167, 210, 217, 33, 231, 113, 122, 73, 198, 60, 177, 210, 216,
+            218, 1, 171, 161, 181, 219, 224, 166, 231, 9, 144, 173, 215, 55,
+        ],
+        [
+            1, 121, 8, 158, 236, 71, 214, 244, 87, 104, 58, 32, 244, 25, 55, 245, 102, 235, 161,
+            181, 162, 41, 179, 252, 157, 112, 182, 24, 11, 162, 12, 3,
+        ],
+        [
+            135, 220, 222, 191, 198, 97, 139, 12, 21, 185, 161, 58, 235, 130, 145, 103, 216, 73,
+            24, 149, 54, 221, 204, 44, 29, 105, 75, 241, 59, 92, 14, 1,
+        ],
+        [
+            113, 99, 3, 22, 170, 61, 230, 135, 157, 116, 193, 60, 246, 113, 193, 150, 160, 211, 86,
+            48, 135, 216, 226, 81, 111, 68, 71, 29, 111, 78, 39, 7,
+        ],
+        [
+            76, 15, 116, 174, 6, 23, 26, 143, 29, 83, 201, 35, 202, 41, 125, 55, 43, 33, 17, 230,
+            142, 183, 55, 241, 144, 102, 49, 101, 206, 238, 122, 52,
+        ],
+    ],
+    [
+        [
+            117, 135, 48, 149, 94, 206, 192, 251, 95, 172, 33, 214, 122, 5, 176, 120, 216, 116, 99,
+            41, 31, 203, 126, 237, 42, 244, 207, 224, 245, 150, 117, 23,
+        ],
+        [
+            215, 141, 63, 69, 188, 158, 241, 182, 219, 150, 206, 78, 163, 60, 134, 169, 32, 124,
+            131, 192, 65, 85, 99, 147, 172, 71, 89, 31, 146, 237, 99, 6,
+        ],
+        [
+            112, 236, 159, 17, 39, 131, 26, 30, 73, 94, 167, 165, 101, 55, 30, 223, 226, 53, 245,
+            230, 110, 29, 243, 20, 140, 0, 239, 202, 7, 190, 74, 27,
+        ],
+        [
+            43, 45, 16, 196, 170, 112, 210, 218, 217, 27, 243, 24, 116, 156, 168, 216, 232, 51,
+            233, 255, 29, 133, 105, 96, 40, 72, 39, 238, 122, 241, 20, 62,
+        ],
+        [
+            112, 97, 10, 55, 63, 180, 243, 106, 97, 140, 110, 206, 228, 135, 105, 109, 12, 145,
+            104, 189, 222, 92, 227, 145, 83, 23, 123, 58, 80, 63, 119, 49,
+        ],
+        [
+            222, 111, 84, 201, 220, 211, 85, 66, 2, 80, 166, 99, 203, 7, 253, 212, 8, 120, 179,
+            163, 48, 117, 246, 142, 242, 83, 91, 35, 65, 145, 20, 43,
+        ],
+        [
+            13, 98, 129, 119, 108, 221, 125, 217, 152, 161, 126, 199, 233, 58, 76, 137, 123, 187,
+            202, 234, 56, 36, 240, 90, 181, 55, 176, 89, 27, 84, 134, 12,
+        ],
+        [
+            196, 96, 10, 230, 5, 3, 194, 234, 175, 221, 145, 93, 40, 98, 252, 129, 107, 230, 72, 7,
+            205, 13, 181, 56, 107, 83, 102, 7, 241, 38, 44, 28,
+        ],
+    ],
+    [
+        [
+            49, 255, 63, 55, 167, 241, 86, 34, 231, 35, 195, 153, 186, 81, 209, 131, 82, 204, 179,
+            49, 181, 172, 52, 196, 139, 145, 206, 177, 48, 174, 77, 6,
+        ],
+        [
+            173, 191, 127, 104, 192, 251, 10, 96, 24, 209, 39, 36, 112, 169, 200, 142, 24, 169, 11,
+            184, 106, 152, 170, 237, 234, 8, 49, 65, 20, 150, 61, 59,
+        ],
+        [
+            205, 20, 22, 50, 121, 235, 201, 249, 50, 21, 200, 211, 220, 198, 103, 170, 248, 76,
+            117, 126, 81, 201, 134, 212, 205, 162, 229, 180, 51, 19, 237, 5,
+        ],
+        [
+            169, 152, 197, 220, 162, 201, 73, 12, 53, 71, 243, 206, 218, 32, 232, 63, 161, 163, 81,
+            59, 103, 25, 235, 175, 156, 58, 131, 72, 120, 135, 220, 40,
+        ],
+        [
+            174, 157, 241, 32, 126, 124, 61, 18, 85, 161, 222, 239, 104, 112, 181, 58, 17, 10, 192,
+            128, 159, 167, 150, 102, 32, 158, 191, 58, 196, 214, 211, 36,
+        ],
+        [
+            212, 189, 202, 43, 164, 106, 115, 57, 56, 129, 143, 0, 92, 174, 37, 114, 194, 97, 201,
+            67, 83, 60, 242, 21, 255, 122, 109, 95, 55, 136, 212, 12,
+        ],
+        [
+            41, 172, 202, 39, 28, 52, 243, 63, 155, 161, 82, 6, 78, 68, 236, 168, 171, 107, 200,
+            81, 37, 82, 194, 11, 74, 23, 40, 145, 40, 163, 196, 31,
+        ],
+        [
+            119, 146, 247, 74, 70, 181, 50, 90, 212, 1, 145, 188, 149, 47, 106, 9, 44, 225, 113,
+            77, 103, 73, 250, 25, 15, 46, 111, 20, 202, 135, 106, 58,
+        ],
+    ],
+    [
+        [
+            214, 208, 212, 237, 91, 53, 93, 29, 73, 180, 213, 18, 238, 127, 24, 92, 242, 232, 88,
+            248, 28, 20, 126, 241, 2, 100, 46, 30, 212, 70, 50, 2,
+        ],
+        [
+            75, 62, 19, 16, 103, 247, 66, 81, 143, 208, 79, 175, 38, 117, 164, 226, 213, 10, 65,
+            48, 228, 244, 51, 138, 66, 240, 74, 112, 189, 152, 168, 22,
+        ],
+        [
+            137, 246, 59, 222, 246, 36, 63, 111, 128, 237, 151, 78, 199, 142, 182, 92, 117, 227,
+            249, 16, 135, 236, 15, 7, 222, 205, 206, 235, 59, 21, 248, 22,
+        ],
+        [
+            134, 58, 60, 194, 199, 50, 43, 29, 94, 67, 39, 243, 47, 72, 136, 20, 166, 189, 195,
+            227, 151, 138, 193, 6, 141, 87, 134, 214, 107, 227, 179, 25,
+        ],
+        [
+            240, 65, 105, 174, 82, 73, 62, 176, 32, 143, 83, 50, 246, 33, 143, 191, 153, 108, 79,
+            227, 137, 196, 65, 7, 202, 251, 72, 151, 51, 138, 67, 6,
+        ],
+        [
+            240, 164, 171, 188, 152, 96, 15, 167, 244, 151, 116, 123, 174, 150, 114, 219, 203, 190,
+            60, 64, 123, 164, 24, 213, 22, 120, 151, 169, 147, 87, 14, 54,
+        ],
+        [
+            237, 220, 160, 30, 10, 28, 230, 104, 44, 38, 128, 21, 205, 37, 7, 127, 217, 55, 245,
+            49, 101, 127, 156, 214, 36, 193, 135, 216, 188, 175, 29, 13,
+        ],
+        [
+            159, 14, 150, 98, 114, 124, 115, 108, 53, 17, 110, 73, 228, 238, 220, 104, 221, 43, 35,
+            200, 148, 231, 94, 27, 93, 87, 208, 147, 133, 248, 182, 22,
+        ],
+    ],
+    [
+        [
+            195, 102, 107, 183, 172, 226, 147, 203, 62, 64, 248, 145, 214, 32, 229, 17, 52, 12,
+            239, 111, 133, 247, 141, 219, 112, 72, 179, 205, 47, 104, 154, 28,
+        ],
+        [
+            154, 83, 5, 251, 52, 174, 96, 151, 148, 226, 184, 227, 233, 61, 78, 47, 189, 59, 196,
+            225, 49, 253, 53, 118, 250, 113, 105, 195, 118, 18, 59, 58,
+        ],
+        [
+            254, 53, 230, 124, 224, 107, 238, 47, 232, 196, 210, 155, 253, 125, 87, 42, 243, 249,
+            247, 197, 210, 242, 181, 193, 98, 105, 25, 167, 203, 190, 56, 25,
+        ],
+        [
+            119, 44, 168, 159, 70, 8, 158, 167, 237, 214, 246, 240, 186, 191, 26, 102, 222, 77,
+            142, 206, 192, 203, 225, 105, 135, 210, 127, 165, 15, 239, 31, 45,
+        ],
+        [
+            71, 8, 243, 147, 142, 135, 167, 118, 218, 47, 132, 51, 79, 183, 217, 131, 101, 83, 223,
+            206, 34, 158, 147, 137, 194, 202, 7, 29, 82, 158, 123, 25,
+        ],
+        [
+            153, 113, 163, 1, 79, 119, 160, 95, 221, 126, 184, 114, 24, 24, 253, 225, 39, 126, 110,
+            215, 105, 198, 155, 244, 127, 181, 251, 237, 65, 154, 157, 21,
+        ],
+        [
+            135, 239, 95, 132, 96, 211, 235, 194, 241, 123, 41, 109, 18, 212, 73, 170, 223, 91,
+            248, 7, 78, 221, 20, 42, 22, 16, 11, 32, 47, 37, 78, 55,
+        ],
+        [
+            207, 147, 78, 128, 25, 37, 55, 174, 70, 71, 43, 31, 237, 22, 121, 86, 23, 22, 145, 84,
+            77, 46, 59, 0, 250, 91, 15, 235, 56, 172, 105, 45,
+        ],
+    ],
+];
+
+pub fn generator() -> pallas::Affine {
+    pallas::Affine::from_xy(
+        pallas::Base::from_bytes(&GENERATOR.0).unwrap(),
+        pallas::Base::from_bytes(&GENERATOR.1).unwrap(),
+    )
+    .unwrap()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::{
+        test_lagrange_coeffs, test_zs_and_us, NUM_WINDOWS, ORCHARD_PERSONALIZATION,
+    };
+    use super::*;
+    use group::Curve;
+    use pasta_curves::{
+        arithmetic::{CurveExt, FieldExt},
+        pallas,
+    };
+
+    #[test]
+    fn generator() {
+        let hasher = pallas::Point::hash_to_curve(ORCHARD_PERSONALIZATION);
+        let point = hasher(b"K");
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(*coords.x(), pallas::Base::from_bytes(&GENERATOR.0).unwrap());
+        assert_eq!(*coords.y(), pallas::Base::from_bytes(&GENERATOR.1).unwrap());
+    }
+
+    #[test]
+    fn lagrange_coeffs() {
+        let base = super::generator();
+        test_lagrange_coeffs(base, NUM_WINDOWS);
+    }
+
+    #[test]
+    fn z() {
+        let base = super::generator();
+        test_zs_and_us(base, &Z, &U, NUM_WINDOWS);
+    }
+}

+ 2965 - 0
examples/halo2/src/constants/spend_auth_g.rs

@@ -0,0 +1,2965 @@
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+/// The value commitment is used to check balance between inputs and outputs. The value is
+/// placed over this generator.
+pub const GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        99, 201, 117, 184, 132, 114, 26, 141, 12, 161, 112, 123, 227, 12, 127, 12, 95, 68, 95, 62,
+        124, 24, 141, 59, 6, 214, 241, 40, 179, 35, 85, 55,
+    ],
+    [
+        201, 59, 12, 123, 129, 62, 227, 76, 216, 189, 5, 192, 254, 20, 201, 223, 251, 36, 214, 254,
+        252, 188, 16, 123, 219, 102, 26, 223, 127, 53, 208, 26,
+    ],
+);
+
+/// Full-width z-values for GENERATOR
+pub const Z: [u64; super::NUM_WINDOWS] = [
+    49707, 15701, 45931, 163127, 41654, 212130, 34473, 25205, 4118, 10240, 12264, 22866, 203610,
+    18808, 13851, 62448, 62380, 94497, 39496, 73216, 32037, 32774, 61690, 39173, 74580, 84678,
+    23418, 103090, 34763, 19801, 54976, 196082, 131117, 20556, 58936, 139049, 49530, 488, 2129,
+    44219, 64328, 38875, 58430, 34536, 84014, 15455, 38059, 15915, 26893, 100337, 120701, 98937,
+    37075, 35293, 8351, 8361, 273432, 717, 3253, 40140, 28024, 95195, 41937, 200127, 95471, 103562,
+    75737, 4182, 362357, 15219, 136680, 168274, 25085, 5925, 254392, 93041, 56204, 46757, 109788,
+    100797, 80349, 87315, 77372, 96572, 18965,
+];
+
+/// Full-width u-values for GENERATOR
+pub const U: [[[u8; 32]; super::H]; super::NUM_WINDOWS] = [
+    [
+        [
+            134, 139, 159, 167, 179, 203, 183, 86, 54, 69, 108, 127, 183, 40, 226, 188, 34, 72,
+            235, 174, 120, 30, 214, 202, 46, 166, 177, 78, 133, 80, 221, 35,
+        ],
+        [
+            128, 147, 194, 62, 34, 230, 94, 209, 44, 242, 88, 94, 91, 252, 184, 217, 72, 173, 32,
+            128, 118, 158, 176, 67, 255, 192, 227, 150, 189, 56, 205, 10,
+        ],
+        [
+            89, 235, 150, 72, 148, 202, 175, 172, 88, 248, 184, 63, 149, 194, 33, 149, 187, 218,
+            51, 194, 131, 184, 34, 138, 62, 112, 115, 0, 197, 109, 145, 37,
+        ],
+        [
+            55, 241, 4, 146, 234, 109, 232, 212, 90, 95, 84, 170, 84, 254, 20, 89, 80, 100, 143, 3,
+            30, 229, 117, 35, 32, 249, 43, 36, 200, 74, 200, 13,
+        ],
+        [
+            194, 23, 77, 68, 227, 113, 225, 181, 201, 67, 219, 25, 234, 73, 160, 104, 12, 6, 180,
+            204, 185, 16, 224, 62, 83, 132, 193, 185, 69, 90, 67, 29,
+        ],
+        [
+            156, 240, 85, 68, 24, 96, 228, 37, 250, 218, 25, 99, 51, 50, 37, 27, 23, 76, 42, 243,
+            126, 23, 236, 249, 179, 94, 59, 83, 197, 193, 215, 32,
+        ],
+        [
+            73, 145, 163, 254, 185, 142, 57, 198, 25, 48, 144, 127, 17, 171, 210, 170, 164, 88, 3,
+            235, 37, 45, 124, 125, 44, 113, 141, 119, 93, 91, 163, 47,
+        ],
+        [
+            144, 156, 74, 131, 227, 73, 40, 222, 73, 67, 210, 157, 154, 161, 96, 112, 61, 251, 210,
+            2, 2, 199, 107, 190, 39, 133, 107, 181, 235, 217, 1, 32,
+        ],
+    ],
+    [
+        [
+            204, 30, 193, 82, 109, 194, 174, 212, 203, 182, 251, 224, 85, 31, 240, 246, 163, 165,
+            69, 160, 26, 78, 143, 50, 115, 92, 109, 71, 48, 205, 160, 15,
+        ],
+        [
+            20, 52, 64, 133, 30, 26, 4, 37, 88, 2, 107, 192, 179, 203, 130, 109, 203, 163, 224, 31,
+            238, 207, 238, 0, 79, 55, 35, 8, 69, 238, 155, 60,
+        ],
+        [
+            129, 188, 56, 216, 72, 61, 212, 36, 171, 128, 228, 90, 229, 75, 126, 41, 186, 124, 100,
+            62, 161, 224, 105, 69, 196, 160, 131, 35, 39, 217, 149, 40,
+        ],
+        [
+            168, 4, 93, 175, 37, 163, 30, 50, 27, 141, 194, 23, 206, 18, 65, 85, 150, 36, 51, 169,
+            206, 47, 128, 65, 151, 181, 117, 50, 74, 251, 37, 14,
+        ],
+        [
+            143, 167, 209, 67, 187, 208, 101, 235, 49, 77, 89, 225, 7, 243, 50, 56, 150, 233, 186,
+            94, 0, 161, 136, 54, 163, 101, 23, 180, 199, 82, 163, 32,
+        ],
+        [
+            83, 85, 245, 163, 247, 47, 226, 3, 90, 35, 254, 250, 71, 176, 18, 214, 121, 5, 11, 162,
+            55, 2, 116, 46, 36, 20, 81, 19, 209, 79, 84, 53,
+        ],
+        [
+            181, 129, 189, 44, 171, 86, 12, 145, 21, 185, 255, 145, 238, 46, 220, 242, 242, 239, 5,
+            39, 176, 87, 6, 205, 209, 13, 190, 26, 72, 252, 247, 47,
+        ],
+        [
+            169, 151, 215, 50, 18, 225, 124, 186, 49, 5, 84, 177, 139, 69, 189, 88, 237, 39, 196,
+            111, 251, 146, 226, 12, 207, 215, 254, 0, 246, 155, 86, 31,
+        ],
+    ],
+    [
+        [
+            178, 207, 217, 160, 25, 246, 180, 59, 161, 29, 253, 55, 84, 14, 217, 170, 120, 167,
+            203, 21, 147, 2, 190, 236, 198, 41, 99, 194, 47, 97, 213, 20,
+        ],
+        [
+            45, 217, 42, 12, 249, 206, 77, 249, 191, 69, 78, 30, 201, 54, 60, 175, 218, 187, 222,
+            73, 28, 240, 105, 118, 228, 192, 184, 161, 65, 230, 115, 35,
+        ],
+        [
+            145, 233, 255, 221, 141, 221, 216, 67, 77, 53, 229, 49, 167, 130, 235, 235, 55, 39, 88,
+            70, 146, 70, 243, 31, 156, 138, 246, 251, 13, 41, 2, 16,
+        ],
+        [
+            44, 14, 167, 217, 244, 57, 222, 12, 243, 116, 172, 17, 218, 246, 161, 124, 209, 248,
+            240, 97, 59, 176, 138, 242, 76, 23, 207, 179, 136, 243, 79, 12,
+        ],
+        [
+            120, 239, 19, 236, 60, 149, 184, 181, 237, 83, 242, 22, 122, 53, 211, 43, 195, 217,
+            208, 185, 53, 156, 105, 158, 161, 156, 47, 90, 67, 139, 159, 60,
+        ],
+        [
+            249, 224, 188, 87, 191, 134, 192, 15, 207, 29, 167, 27, 149, 161, 44, 61, 81, 55, 15,
+            30, 78, 203, 150, 136, 55, 222, 237, 245, 39, 227, 177, 29,
+        ],
+        [
+            91, 228, 118, 231, 230, 113, 246, 243, 112, 73, 19, 146, 105, 173, 81, 28, 27, 59, 168,
+            92, 82, 198, 192, 111, 208, 156, 210, 129, 148, 194, 13, 14,
+        ],
+        [
+            224, 185, 193, 29, 240, 177, 244, 134, 56, 252, 24, 119, 213, 110, 191, 221, 105, 122,
+            89, 30, 114, 196, 53, 33, 168, 48, 77, 85, 241, 128, 168, 51,
+        ],
+    ],
+    [
+        [
+            79, 58, 209, 170, 171, 147, 19, 156, 23, 243, 181, 231, 92, 215, 234, 118, 17, 151,
+            212, 115, 164, 220, 114, 178, 18, 147, 101, 201, 228, 162, 126, 54,
+        ],
+        [
+            235, 245, 230, 232, 32, 231, 43, 206, 119, 97, 30, 131, 10, 3, 195, 93, 78, 158, 42,
+            62, 53, 26, 42, 26, 123, 39, 164, 39, 149, 119, 79, 39,
+        ],
+        [
+            78, 161, 190, 242, 222, 143, 16, 193, 35, 198, 206, 67, 37, 101, 231, 6, 62, 205, 36,
+            2, 146, 11, 191, 111, 78, 107, 222, 19, 32, 194, 31, 28,
+        ],
+        [
+            189, 36, 36, 147, 50, 162, 17, 179, 250, 219, 167, 100, 114, 56, 90, 184, 42, 49, 101,
+            155, 213, 179, 140, 62, 245, 55, 81, 218, 11, 116, 203, 32,
+        ],
+        [
+            170, 122, 46, 42, 82, 84, 63, 207, 174, 176, 7, 139, 74, 49, 198, 238, 243, 217, 155,
+            175, 31, 22, 42, 49, 125, 6, 210, 80, 124, 138, 184, 42,
+        ],
+        [
+            30, 149, 102, 115, 26, 193, 146, 161, 139, 248, 18, 9, 55, 231, 50, 78, 236, 158, 74,
+            204, 173, 228, 73, 125, 75, 127, 42, 21, 202, 128, 69, 46,
+        ],
+        [
+            33, 237, 143, 1, 212, 254, 16, 231, 202, 39, 42, 28, 134, 77, 246, 51, 31, 146, 160,
+            11, 178, 194, 169, 251, 50, 131, 241, 132, 81, 122, 244, 58,
+        ],
+        [
+            197, 18, 235, 234, 189, 238, 252, 93, 244, 246, 76, 251, 21, 250, 8, 118, 38, 40, 39,
+            103, 96, 147, 112, 103, 188, 219, 33, 183, 6, 139, 186, 47,
+        ],
+    ],
+    [
+        [
+            27, 179, 1, 219, 5, 237, 22, 195, 49, 31, 125, 207, 224, 185, 249, 141, 188, 16, 209,
+            225, 213, 167, 101, 63, 245, 229, 177, 242, 28, 121, 227, 4,
+        ],
+        [
+            209, 90, 156, 216, 151, 223, 46, 129, 150, 195, 74, 57, 16, 102, 32, 110, 156, 108, 48,
+            128, 236, 231, 35, 169, 60, 210, 63, 240, 252, 175, 28, 22,
+        ],
+        [
+            133, 6, 154, 178, 236, 58, 163, 25, 85, 197, 169, 75, 26, 103, 112, 168, 225, 245, 103,
+            211, 223, 163, 79, 47, 253, 17, 114, 233, 127, 217, 94, 51,
+        ],
+        [
+            252, 137, 21, 60, 226, 116, 238, 97, 66, 128, 128, 213, 51, 35, 35, 130, 77, 160, 200,
+            226, 91, 25, 22, 133, 27, 188, 198, 159, 155, 4, 106, 4,
+        ],
+        [
+            76, 129, 23, 15, 64, 93, 179, 128, 41, 202, 40, 164, 7, 199, 172, 203, 98, 179, 243,
+            28, 66, 149, 80, 177, 112, 51, 81, 231, 178, 208, 16, 54,
+        ],
+        [
+            100, 99, 114, 178, 31, 130, 16, 122, 18, 47, 103, 243, 55, 84, 112, 92, 156, 246, 119,
+            91, 4, 173, 157, 48, 246, 132, 129, 162, 33, 42, 164, 38,
+        ],
+        [
+            152, 167, 13, 134, 122, 121, 84, 244, 205, 49, 40, 241, 68, 223, 97, 107, 112, 216,
+            124, 98, 232, 219, 187, 158, 28, 95, 222, 129, 219, 240, 233, 13,
+        ],
+        [
+            255, 191, 150, 9, 220, 109, 94, 217, 202, 19, 194, 216, 152, 81, 167, 107, 204, 138,
+            104, 200, 200, 253, 210, 14, 87, 133, 149, 93, 119, 137, 129, 45,
+        ],
+    ],
+    [
+        [
+            162, 107, 4, 19, 49, 176, 93, 99, 15, 133, 159, 53, 191, 0, 79, 228, 236, 96, 145, 53,
+            120, 10, 150, 94, 198, 49, 253, 119, 229, 116, 150, 13,
+        ],
+        [
+            205, 164, 35, 49, 168, 151, 217, 138, 164, 143, 237, 170, 140, 153, 15, 171, 74, 89,
+            60, 195, 13, 20, 170, 36, 66, 199, 45, 252, 18, 47, 204, 8,
+        ],
+        [
+            95, 149, 177, 178, 217, 143, 235, 251, 203, 227, 33, 62, 147, 134, 228, 83, 84, 170,
+            118, 91, 103, 94, 41, 99, 1, 95, 59, 67, 253, 146, 165, 5,
+        ],
+        [
+            19, 184, 182, 93, 1, 4, 202, 21, 119, 77, 151, 12, 98, 255, 223, 34, 54, 162, 44, 199,
+            13, 217, 159, 37, 147, 185, 89, 21, 251, 128, 21, 25,
+        ],
+        [
+            190, 179, 248, 211, 188, 233, 181, 149, 178, 232, 28, 253, 234, 103, 160, 153, 252,
+            188, 19, 132, 143, 227, 31, 109, 134, 85, 21, 104, 133, 39, 148, 13,
+        ],
+        [
+            149, 40, 255, 15, 159, 19, 43, 100, 31, 196, 107, 209, 83, 25, 77, 122, 211, 27, 237,
+            158, 74, 188, 198, 73, 86, 171, 73, 163, 110, 176, 37, 55,
+        ],
+        [
+            25, 194, 88, 151, 108, 22, 157, 145, 11, 87, 6, 215, 227, 141, 203, 218, 34, 25, 236,
+            49, 69, 170, 243, 13, 240, 210, 161, 186, 45, 32, 239, 12,
+        ],
+        [
+            100, 133, 83, 207, 52, 184, 61, 180, 226, 133, 42, 161, 249, 216, 158, 39, 5, 185, 52,
+            8, 212, 185, 49, 234, 32, 200, 23, 158, 19, 111, 74, 50,
+        ],
+    ],
+    [
+        [
+            215, 206, 249, 236, 176, 248, 217, 12, 0, 204, 155, 112, 248, 215, 200, 248, 8, 250,
+            61, 104, 22, 109, 196, 54, 27, 3, 0, 203, 187, 116, 69, 45,
+        ],
+        [
+            82, 29, 122, 199, 191, 205, 105, 136, 96, 93, 249, 65, 104, 197, 48, 64, 166, 175, 144,
+            96, 114, 186, 147, 65, 1, 35, 87, 134, 90, 145, 230, 24,
+        ],
+        [
+            154, 172, 87, 147, 10, 166, 129, 223, 224, 162, 95, 194, 248, 41, 234, 174, 177, 221,
+            64, 244, 202, 201, 225, 138, 179, 110, 80, 104, 84, 39, 26, 43,
+        ],
+        [
+            75, 226, 94, 205, 107, 248, 174, 164, 95, 115, 20, 62, 241, 202, 80, 182, 248, 213,
+            115, 216, 142, 165, 182, 8, 151, 156, 170, 110, 219, 237, 63, 3,
+        ],
+        [
+            49, 234, 64, 230, 146, 237, 191, 49, 112, 45, 60, 43, 252, 216, 195, 70, 153, 146, 225,
+            144, 9, 226, 23, 158, 136, 113, 247, 108, 62, 144, 108, 9,
+        ],
+        [
+            103, 21, 127, 107, 59, 109, 133, 160, 143, 88, 92, 94, 63, 60, 176, 30, 201, 130, 24,
+            59, 22, 197, 68, 223, 207, 57, 45, 122, 91, 202, 196, 35,
+        ],
+        [
+            52, 102, 244, 254, 244, 16, 81, 190, 173, 244, 154, 38, 64, 214, 63, 97, 169, 9, 167,
+            51, 246, 33, 109, 247, 50, 220, 114, 64, 13, 179, 177, 30,
+        ],
+        [
+            144, 221, 225, 200, 23, 166, 32, 166, 176, 75, 198, 254, 19, 193, 245, 128, 7, 12, 208,
+            85, 254, 120, 147, 143, 63, 184, 236, 60, 26, 253, 251, 35,
+        ],
+    ],
+    [
+        [
+            75, 83, 105, 13, 6, 123, 42, 108, 212, 123, 233, 193, 139, 45, 132, 88, 44, 242, 39,
+            25, 1, 235, 41, 93, 161, 218, 156, 90, 105, 43, 114, 46,
+        ],
+        [
+            113, 216, 156, 147, 163, 145, 14, 155, 250, 78, 89, 11, 16, 228, 91, 223, 129, 87, 8,
+            161, 204, 28, 0, 75, 59, 172, 225, 121, 76, 165, 42, 36,
+        ],
+        [
+            195, 34, 156, 131, 184, 36, 15, 228, 23, 198, 79, 88, 138, 166, 168, 21, 16, 35, 82,
+            123, 87, 247, 59, 42, 195, 113, 128, 240, 223, 247, 79, 25,
+        ],
+        [
+            197, 57, 189, 78, 132, 12, 150, 148, 108, 113, 199, 232, 67, 154, 65, 201, 151, 136,
+            175, 146, 0, 126, 215, 68, 183, 100, 207, 132, 39, 238, 74, 28,
+        ],
+        [
+            213, 35, 155, 170, 77, 61, 206, 127, 232, 164, 11, 133, 55, 141, 203, 73, 112, 37, 27,
+            8, 250, 18, 169, 233, 171, 174, 218, 9, 15, 227, 192, 24,
+        ],
+        [
+            134, 99, 90, 204, 109, 34, 78, 239, 97, 108, 119, 18, 165, 166, 98, 20, 155, 15, 193,
+            71, 34, 134, 45, 232, 229, 4, 167, 6, 75, 99, 2, 54,
+        ],
+        [
+            4, 136, 7, 177, 132, 128, 188, 128, 221, 121, 213, 198, 133, 42, 219, 156, 145, 179,
+            35, 254, 88, 233, 96, 90, 206, 150, 181, 191, 254, 218, 217, 31,
+        ],
+        [
+            183, 202, 252, 66, 36, 234, 250, 116, 96, 15, 72, 88, 124, 136, 8, 156, 204, 151, 89,
+            171, 185, 139, 47, 215, 117, 207, 44, 117, 226, 84, 248, 5,
+        ],
+    ],
+    [
+        [
+            48, 78, 243, 80, 211, 5, 172, 75, 113, 98, 154, 247, 185, 52, 36, 155, 5, 244, 149, 7,
+            84, 162, 39, 0, 233, 219, 188, 229, 84, 18, 154, 34,
+        ],
+        [
+            135, 176, 3, 156, 231, 35, 196, 24, 109, 104, 169, 210, 121, 247, 72, 214, 141, 15,
+            155, 221, 249, 30, 196, 117, 108, 229, 219, 116, 233, 89, 208, 61,
+        ],
+        [
+            108, 238, 126, 36, 119, 110, 54, 206, 165, 24, 218, 88, 206, 201, 226, 190, 28, 76,
+            125, 62, 87, 21, 15, 158, 2, 233, 41, 18, 242, 223, 192, 6,
+        ],
+        [
+            169, 95, 111, 93, 78, 167, 161, 2, 54, 29, 206, 209, 119, 196, 7, 36, 248, 233, 68, 45,
+            243, 58, 155, 147, 32, 175, 221, 168, 144, 79, 126, 18,
+        ],
+        [
+            229, 0, 65, 205, 148, 179, 229, 116, 253, 143, 119, 111, 142, 63, 235, 124, 140, 243,
+            182, 164, 15, 57, 219, 23, 114, 237, 116, 213, 200, 235, 227, 55,
+        ],
+        [
+            9, 233, 193, 136, 60, 112, 74, 107, 87, 12, 113, 20, 8, 8, 94, 195, 227, 83, 178, 77,
+            143, 104, 211, 169, 253, 62, 8, 196, 81, 39, 96, 13,
+        ],
+        [
+            223, 12, 147, 224, 113, 27, 48, 142, 243, 199, 244, 62, 255, 20, 63, 79, 12, 37, 159,
+            81, 80, 172, 136, 23, 107, 186, 180, 33, 148, 49, 128, 10,
+        ],
+        [
+            100, 248, 42, 239, 155, 107, 80, 255, 126, 96, 195, 152, 204, 166, 14, 46, 114, 152,
+            200, 111, 94, 233, 117, 247, 89, 83, 34, 2, 189, 3, 245, 4,
+        ],
+    ],
+    [
+        [
+            26, 254, 208, 112, 167, 15, 77, 90, 124, 14, 227, 31, 204, 94, 253, 228, 223, 252, 114,
+            141, 234, 26, 108, 144, 115, 131, 19, 142, 25, 148, 80, 53,
+        ],
+        [
+            95, 154, 56, 85, 66, 246, 97, 207, 254, 117, 98, 51, 204, 68, 9, 1, 157, 25, 113, 175,
+            12, 172, 33, 67, 212, 17, 238, 76, 166, 43, 6, 30,
+        ],
+        [
+            48, 204, 33, 34, 141, 223, 27, 151, 244, 225, 206, 129, 54, 211, 251, 18, 168, 186,
+            214, 141, 37, 229, 219, 62, 187, 87, 66, 140, 181, 233, 161, 35,
+        ],
+        [
+            143, 158, 2, 174, 102, 73, 205, 247, 110, 78, 131, 38, 192, 195, 70, 193, 14, 166, 232,
+            42, 142, 222, 35, 147, 189, 77, 50, 220, 23, 56, 126, 38,
+        ],
+        [
+            10, 84, 87, 89, 169, 77, 97, 156, 0, 100, 41, 191, 232, 88, 138, 82, 220, 123, 231, 59,
+            142, 115, 196, 116, 217, 80, 178, 117, 237, 250, 11, 32,
+        ],
+        [
+            152, 88, 228, 103, 64, 4, 197, 110, 204, 4, 0, 131, 250, 205, 206, 83, 180, 179, 98,
+            51, 213, 11, 237, 149, 150, 226, 123, 62, 129, 198, 28, 58,
+        ],
+        [
+            188, 254, 66, 154, 178, 61, 236, 232, 27, 107, 131, 38, 104, 160, 49, 57, 3, 111, 18,
+            106, 158, 91, 57, 220, 174, 59, 138, 227, 176, 49, 171, 15,
+        ],
+        [
+            92, 116, 148, 172, 212, 215, 137, 153, 48, 241, 40, 25, 45, 204, 141, 58, 235, 146,
+            155, 248, 50, 112, 4, 206, 228, 70, 94, 117, 128, 150, 213, 18,
+        ],
+    ],
+    [
+        [
+            155, 96, 199, 129, 161, 131, 9, 109, 43, 95, 79, 108, 230, 168, 172, 51, 244, 183, 203,
+            211, 198, 95, 64, 184, 12, 184, 190, 250, 108, 77, 202, 61,
+        ],
+        [
+            151, 114, 132, 115, 19, 130, 213, 126, 140, 64, 58, 149, 171, 26, 245, 47, 253, 9, 212,
+            80, 154, 3, 206, 254, 158, 241, 87, 90, 67, 8, 29, 59,
+        ],
+        [
+            231, 100, 245, 101, 53, 146, 235, 219, 228, 106, 101, 51, 85, 110, 51, 78, 221, 149,
+            223, 78, 184, 47, 144, 234, 161, 28, 6, 48, 41, 228, 253, 57,
+        ],
+        [
+            239, 82, 160, 74, 136, 231, 198, 194, 99, 192, 170, 182, 36, 125, 149, 58, 9, 239, 91,
+            146, 54, 104, 94, 42, 147, 4, 61, 79, 185, 11, 51, 1,
+        ],
+        [
+            56, 89, 137, 88, 196, 32, 115, 15, 6, 53, 123, 43, 42, 27, 226, 220, 196, 131, 211,
+            126, 14, 174, 191, 229, 172, 6, 210, 189, 92, 66, 79, 26,
+        ],
+        [
+            236, 153, 243, 131, 143, 123, 164, 95, 214, 160, 21, 150, 12, 71, 118, 170, 92, 166,
+            223, 162, 133, 58, 93, 2, 31, 57, 197, 190, 66, 169, 112, 18,
+        ],
+        [
+            137, 13, 132, 54, 102, 120, 119, 177, 34, 217, 123, 89, 76, 242, 218, 72, 236, 129, 33,
+            42, 148, 242, 221, 33, 252, 74, 219, 142, 25, 82, 162, 62,
+        ],
+        [
+            0, 132, 243, 70, 85, 72, 216, 242, 225, 170, 56, 212, 52, 143, 154, 202, 248, 33, 148,
+            236, 117, 24, 29, 63, 148, 233, 28, 74, 59, 44, 221, 6,
+        ],
+    ],
+    [
+        [
+            122, 45, 241, 68, 72, 20, 58, 84, 181, 215, 45, 12, 74, 54, 17, 144, 144, 97, 82, 103,
+            81, 123, 158, 238, 167, 173, 212, 8, 90, 63, 188, 59,
+        ],
+        [
+            190, 69, 211, 175, 56, 60, 42, 23, 208, 231, 241, 96, 205, 55, 222, 210, 178, 240, 230,
+            118, 210, 253, 59, 206, 104, 165, 221, 249, 237, 74, 42, 33,
+        ],
+        [
+            69, 202, 255, 56, 181, 188, 225, 92, 19, 165, 74, 192, 67, 249, 139, 35, 87, 125, 27,
+            228, 61, 78, 56, 144, 42, 255, 159, 217, 53, 99, 10, 62,
+        ],
+        [
+            17, 213, 190, 3, 139, 251, 81, 49, 133, 14, 185, 61, 240, 132, 117, 99, 240, 125, 104,
+            191, 248, 27, 77, 11, 130, 122, 237, 184, 35, 100, 180, 3,
+        ],
+        [
+            236, 29, 195, 209, 34, 84, 144, 163, 206, 89, 168, 108, 27, 11, 70, 115, 204, 213, 254,
+            154, 127, 24, 198, 242, 246, 223, 181, 250, 165, 119, 22, 62,
+        ],
+        [
+            60, 247, 191, 168, 239, 211, 60, 148, 241, 31, 18, 170, 16, 159, 36, 114, 42, 255, 166,
+            224, 203, 137, 29, 159, 207, 121, 83, 18, 65, 177, 147, 58,
+        ],
+        [
+            142, 74, 131, 209, 60, 216, 199, 80, 41, 112, 74, 182, 191, 182, 44, 195, 255, 209,
+            212, 108, 139, 121, 174, 211, 221, 158, 186, 94, 7, 171, 195, 6,
+        ],
+        [
+            198, 195, 122, 214, 128, 112, 1, 64, 196, 79, 62, 9, 3, 224, 192, 175, 23, 151, 79,
+            177, 86, 124, 241, 131, 111, 212, 44, 236, 166, 31, 192, 15,
+        ],
+    ],
+    [
+        [
+            50, 31, 67, 146, 113, 240, 176, 252, 99, 195, 220, 195, 236, 33, 235, 44, 22, 161, 130,
+            84, 214, 230, 9, 201, 254, 31, 226, 194, 208, 156, 234, 31,
+        ],
+        [
+            130, 252, 165, 204, 53, 14, 76, 171, 205, 52, 8, 140, 156, 25, 1, 79, 106, 128, 120,
+            230, 96, 4, 65, 143, 120, 86, 95, 116, 178, 151, 251, 21,
+        ],
+        [
+            82, 176, 110, 60, 13, 107, 15, 237, 57, 201, 226, 28, 131, 232, 139, 0, 26, 117, 17,
+            21, 90, 52, 206, 160, 31, 184, 67, 211, 119, 126, 23, 2,
+        ],
+        [
+            86, 78, 25, 205, 17, 108, 177, 47, 226, 5, 14, 124, 217, 100, 164, 146, 67, 56, 65,
+            155, 54, 2, 97, 66, 248, 244, 46, 71, 35, 246, 90, 35,
+        ],
+        [
+            28, 122, 89, 60, 230, 19, 230, 132, 129, 117, 243, 172, 180, 95, 210, 183, 231, 73,
+            194, 50, 123, 93, 40, 116, 179, 64, 48, 127, 37, 161, 133, 1,
+        ],
+        [
+            72, 176, 170, 234, 97, 26, 154, 13, 139, 23, 69, 194, 241, 59, 143, 29, 131, 72, 236,
+            123, 90, 116, 132, 207, 226, 63, 190, 11, 9, 159, 225, 18,
+        ],
+        [
+            71, 3, 178, 208, 101, 43, 142, 1, 34, 183, 67, 144, 188, 255, 243, 77, 160, 17, 3, 90,
+            104, 102, 15, 237, 159, 17, 119, 223, 119, 180, 184, 11,
+        ],
+        [
+            198, 247, 138, 113, 71, 170, 58, 158, 166, 18, 216, 133, 230, 166, 87, 243, 180, 129,
+            59, 227, 21, 156, 206, 171, 200, 29, 193, 191, 35, 144, 110, 35,
+        ],
+    ],
+    [
+        [
+            143, 29, 76, 191, 243, 57, 156, 88, 188, 187, 113, 179, 47, 12, 12, 80, 210, 133, 232,
+            199, 196, 174, 105, 166, 185, 201, 72, 33, 182, 107, 10, 14,
+        ],
+        [
+            164, 93, 48, 22, 226, 133, 56, 19, 13, 143, 250, 49, 96, 151, 50, 136, 186, 199, 102,
+            135, 44, 77, 221, 203, 66, 145, 199, 234, 71, 151, 237, 60,
+        ],
+        [
+            40, 169, 150, 23, 171, 18, 88, 233, 196, 71, 216, 65, 86, 136, 191, 225, 157, 148, 204,
+            166, 81, 32, 185, 159, 33, 211, 227, 110, 49, 200, 239, 6,
+        ],
+        [
+            177, 51, 226, 132, 191, 36, 206, 168, 107, 159, 196, 253, 111, 164, 203, 30, 229, 157,
+            238, 168, 231, 1, 231, 132, 124, 170, 113, 72, 205, 71, 179, 61,
+        ],
+        [
+            173, 21, 156, 246, 171, 56, 11, 126, 227, 206, 228, 132, 13, 35, 56, 214, 167, 169,
+            199, 247, 183, 237, 175, 164, 56, 38, 12, 149, 16, 165, 206, 41,
+        ],
+        [
+            128, 227, 45, 193, 60, 153, 0, 6, 8, 102, 44, 127, 61, 224, 183, 230, 212, 141, 1, 51,
+            225, 100, 204, 170, 122, 148, 93, 219, 56, 143, 127, 14,
+        ],
+        [
+            70, 116, 18, 220, 241, 134, 196, 152, 34, 203, 160, 47, 133, 155, 48, 238, 3, 231, 142,
+            250, 130, 80, 127, 29, 47, 30, 247, 166, 7, 84, 97, 32,
+        ],
+        [
+            198, 120, 45, 251, 227, 181, 90, 244, 88, 96, 139, 170, 238, 2, 214, 157, 142, 252, 38,
+            70, 46, 231, 140, 254, 133, 163, 174, 239, 236, 31, 248, 47,
+        ],
+    ],
+    [
+        [
+            55, 136, 210, 179, 46, 105, 249, 203, 6, 77, 242, 11, 176, 133, 40, 140, 94, 213, 221,
+            116, 54, 114, 154, 208, 221, 104, 34, 129, 102, 30, 159, 58,
+        ],
+        [
+            79, 251, 68, 141, 49, 255, 119, 149, 245, 56, 33, 15, 177, 119, 71, 34, 2, 157, 154,
+            100, 0, 130, 254, 89, 119, 244, 255, 136, 145, 170, 75, 22,
+        ],
+        [
+            246, 138, 15, 233, 177, 157, 214, 220, 249, 137, 175, 49, 64, 49, 163, 203, 16, 5, 156,
+            137, 236, 177, 51, 237, 183, 248, 106, 64, 95, 201, 63, 60,
+        ],
+        [
+            169, 216, 126, 241, 88, 115, 61, 5, 60, 196, 46, 248, 192, 24, 133, 247, 107, 35, 176,
+            62, 3, 251, 187, 51, 131, 108, 26, 58, 71, 173, 69, 50,
+        ],
+        [
+            84, 151, 140, 102, 38, 240, 56, 110, 112, 245, 122, 78, 225, 149, 139, 150, 7, 90, 124,
+            202, 208, 243, 85, 76, 216, 157, 7, 245, 29, 230, 202, 57,
+        ],
+        [
+            151, 205, 82, 162, 218, 18, 210, 30, 96, 49, 203, 180, 161, 163, 135, 58, 156, 223,
+            248, 97, 155, 19, 244, 20, 204, 201, 109, 159, 51, 166, 157, 53,
+        ],
+        [
+            12, 187, 38, 15, 49, 56, 192, 212, 23, 177, 153, 244, 192, 65, 217, 112, 210, 82, 187,
+            254, 42, 203, 172, 84, 39, 84, 171, 8, 145, 13, 6, 50,
+        ],
+        [
+            61, 241, 209, 199, 182, 87, 14, 9, 24, 44, 194, 13, 4, 85, 186, 9, 120, 82, 120, 0,
+            167, 113, 231, 252, 218, 210, 112, 246, 163, 9, 247, 30,
+        ],
+    ],
+    [
+        [
+            196, 38, 105, 221, 18, 136, 108, 66, 223, 180, 237, 185, 161, 102, 180, 224, 164, 195,
+            0, 254, 210, 238, 158, 146, 253, 119, 73, 191, 148, 17, 152, 50,
+        ],
+        [
+            76, 130, 205, 97, 172, 181, 61, 253, 66, 7, 37, 249, 147, 121, 205, 101, 67, 50, 84,
+            125, 60, 49, 65, 55, 48, 130, 37, 86, 92, 89, 181, 35,
+        ],
+        [
+            206, 105, 119, 230, 215, 16, 15, 177, 186, 198, 98, 203, 210, 114, 246, 76, 112, 132,
+            63, 157, 216, 253, 212, 195, 36, 11, 58, 200, 70, 165, 187, 21,
+        ],
+        [
+            95, 85, 152, 202, 120, 158, 2, 113, 140, 9, 152, 197, 28, 23, 243, 98, 30, 116, 241,
+            59, 150, 179, 40, 13, 119, 61, 108, 115, 88, 216, 66, 62,
+        ],
+        [
+            108, 254, 117, 155, 108, 68, 3, 230, 25, 36, 106, 204, 158, 15, 114, 204, 134, 182,
+            239, 235, 104, 144, 35, 31, 84, 246, 38, 252, 87, 60, 20, 12,
+        ],
+        [
+            14, 76, 210, 134, 98, 224, 219, 180, 88, 134, 93, 30, 34, 159, 112, 85, 114, 46, 244,
+            59, 169, 188, 235, 108, 254, 236, 101, 86, 97, 132, 255, 62,
+        ],
+        [
+            23, 167, 12, 59, 95, 158, 244, 22, 231, 148, 247, 162, 226, 95, 136, 77, 62, 234, 119,
+            179, 29, 62, 160, 116, 94, 240, 7, 113, 75, 241, 201, 62,
+        ],
+        [
+            233, 142, 117, 40, 158, 166, 10, 78, 255, 44, 235, 32, 185, 102, 244, 23, 251, 127, 12,
+            249, 120, 18, 196, 115, 151, 251, 236, 217, 97, 244, 107, 52,
+        ],
+    ],
+    [
+        [
+            107, 155, 149, 167, 240, 119, 46, 213, 7, 178, 44, 247, 191, 163, 247, 255, 109, 160,
+            87, 134, 236, 13, 49, 223, 245, 64, 194, 243, 220, 166, 203, 59,
+        ],
+        [
+            119, 76, 9, 136, 64, 42, 217, 106, 111, 151, 245, 107, 101, 191, 56, 195, 239, 79, 134,
+            239, 31, 37, 60, 160, 131, 101, 90, 38, 70, 213, 103, 5,
+        ],
+        [
+            184, 158, 152, 93, 132, 93, 66, 54, 106, 79, 134, 202, 210, 72, 74, 25, 96, 93, 178,
+            109, 231, 248, 173, 100, 154, 238, 170, 161, 194, 75, 148, 35,
+        ],
+        [
+            156, 17, 84, 74, 233, 248, 203, 84, 127, 132, 30, 245, 52, 4, 27, 53, 231, 22, 75, 33,
+            66, 120, 175, 149, 77, 114, 237, 18, 99, 189, 126, 31,
+        ],
+        [
+            78, 144, 141, 232, 241, 133, 132, 75, 214, 189, 122, 225, 96, 155, 59, 205, 144, 243,
+            176, 140, 253, 16, 152, 59, 80, 164, 165, 153, 15, 89, 219, 50,
+        ],
+        [
+            62, 16, 233, 111, 18, 125, 232, 184, 252, 2, 110, 148, 127, 176, 119, 162, 66, 211,
+            198, 136, 64, 217, 189, 197, 121, 66, 32, 71, 147, 13, 146, 8,
+        ],
+        [
+            2, 45, 226, 216, 24, 120, 51, 196, 19, 16, 152, 7, 178, 30, 88, 194, 255, 186, 231, 81,
+            217, 67, 36, 199, 41, 12, 135, 142, 160, 247, 199, 34,
+        ],
+        [
+            80, 193, 196, 122, 181, 155, 245, 75, 185, 218, 222, 58, 140, 110, 234, 148, 30, 19,
+            243, 175, 188, 1, 57, 85, 163, 253, 211, 210, 200, 7, 249, 43,
+        ],
+    ],
+    [
+        [
+            187, 240, 200, 140, 119, 234, 17, 25, 208, 192, 198, 107, 40, 102, 42, 212, 229, 1,
+            231, 121, 19, 35, 249, 226, 185, 185, 225, 179, 84, 18, 191, 15,
+        ],
+        [
+            249, 21, 206, 133, 57, 77, 143, 126, 192, 252, 36, 62, 173, 16, 52, 11, 7, 198, 149,
+            220, 48, 193, 40, 253, 217, 235, 145, 96, 241, 215, 193, 16,
+        ],
+        [
+            203, 97, 200, 83, 165, 80, 108, 220, 108, 185, 123, 227, 143, 247, 12, 200, 9, 195, 68,
+            46, 238, 32, 161, 42, 247, 167, 117, 159, 191, 89, 194, 21,
+        ],
+        [
+            200, 138, 253, 89, 202, 154, 62, 252, 110, 107, 99, 189, 49, 33, 69, 220, 211, 185, 89,
+            62, 101, 231, 203, 68, 45, 5, 73, 39, 144, 230, 186, 43,
+        ],
+        [
+            31, 42, 63, 181, 31, 131, 126, 192, 52, 179, 2, 178, 71, 193, 225, 189, 52, 153, 62,
+            166, 207, 192, 10, 174, 67, 228, 150, 28, 169, 63, 242, 60,
+        ],
+        [
+            228, 40, 179, 0, 71, 223, 234, 22, 20, 72, 239, 146, 142, 7, 168, 47, 102, 186, 137,
+            113, 248, 114, 204, 153, 12, 22, 145, 205, 143, 109, 169, 3,
+        ],
+        [
+            232, 227, 9, 11, 117, 128, 157, 126, 209, 210, 249, 174, 93, 37, 76, 150, 114, 36, 225,
+            75, 198, 10, 191, 167, 6, 2, 244, 29, 191, 7, 21, 44,
+        ],
+        [
+            86, 226, 203, 210, 152, 57, 49, 226, 171, 172, 86, 225, 126, 215, 249, 166, 100, 119,
+            54, 180, 193, 199, 146, 147, 253, 16, 107, 16, 22, 21, 106, 31,
+        ],
+    ],
+    [
+        [
+            249, 155, 151, 211, 192, 36, 207, 21, 36, 141, 169, 175, 223, 248, 235, 62, 161, 214,
+            236, 25, 35, 202, 64, 158, 84, 97, 121, 1, 190, 142, 23, 56,
+        ],
+        [
+            79, 129, 15, 128, 17, 234, 8, 173, 53, 238, 129, 60, 40, 6, 33, 216, 0, 171, 82, 80,
+            227, 3, 219, 184, 48, 231, 244, 213, 115, 224, 162, 49,
+        ],
+        [
+            246, 219, 42, 28, 42, 134, 38, 100, 60, 131, 51, 159, 148, 5, 219, 203, 159, 51, 175,
+            176, 154, 20, 79, 168, 197, 140, 200, 98, 192, 113, 179, 48,
+        ],
+        [
+            87, 7, 235, 9, 102, 19, 100, 91, 214, 230, 74, 213, 117, 120, 7, 239, 137, 255, 158,
+            243, 160, 169, 30, 105, 28, 72, 188, 245, 76, 187, 227, 46,
+        ],
+        [
+            158, 245, 74, 150, 32, 197, 25, 173, 237, 231, 201, 44, 210, 117, 134, 203, 75, 108,
+            102, 63, 124, 33, 47, 100, 56, 65, 129, 102, 161, 211, 117, 22,
+        ],
+        [
+            204, 70, 46, 194, 74, 212, 80, 20, 239, 11, 98, 124, 117, 38, 63, 246, 222, 191, 44,
+            185, 131, 146, 129, 92, 158, 2, 87, 240, 150, 133, 57, 19,
+        ],
+        [
+            236, 136, 27, 147, 102, 12, 170, 62, 254, 16, 6, 217, 27, 178, 115, 247, 60, 158, 45,
+            219, 224, 99, 111, 154, 253, 46, 247, 200, 138, 156, 26, 26,
+        ],
+        [
+            75, 211, 65, 63, 194, 212, 191, 3, 100, 173, 100, 101, 62, 25, 72, 147, 13, 148, 111,
+            14, 157, 82, 27, 241, 125, 154, 243, 137, 14, 135, 241, 26,
+        ],
+    ],
+    [
+        [
+            218, 202, 124, 110, 86, 218, 195, 2, 64, 68, 69, 220, 16, 26, 0, 40, 224, 238, 59, 69,
+            246, 226, 3, 27, 219, 85, 17, 245, 133, 220, 230, 63,
+        ],
+        [
+            212, 226, 110, 162, 36, 55, 75, 198, 129, 197, 158, 79, 126, 204, 159, 71, 33, 60, 121,
+            48, 127, 147, 250, 124, 60, 87, 179, 173, 160, 204, 32, 53,
+        ],
+        [
+            137, 110, 13, 7, 108, 200, 154, 204, 18, 86, 44, 221, 40, 171, 207, 5, 25, 42, 108, 2,
+            147, 18, 42, 89, 101, 50, 48, 7, 233, 123, 235, 8,
+        ],
+        [
+            206, 247, 190, 175, 201, 90, 146, 123, 203, 83, 104, 46, 243, 131, 105, 131, 39, 186,
+            205, 103, 203, 204, 186, 196, 251, 101, 101, 250, 186, 160, 211, 12,
+        ],
+        [
+            237, 149, 65, 13, 108, 153, 242, 14, 61, 62, 156, 46, 128, 126, 158, 246, 226, 128,
+            243, 193, 10, 165, 120, 64, 72, 91, 32, 215, 90, 235, 82, 24,
+        ],
+        [
+            185, 204, 139, 200, 5, 172, 176, 126, 105, 190, 243, 150, 126, 26, 28, 74, 143, 149,
+            118, 82, 210, 254, 70, 30, 81, 23, 128, 89, 255, 171, 137, 63,
+        ],
+        [
+            169, 75, 113, 101, 245, 119, 251, 230, 244, 201, 79, 85, 164, 86, 81, 155, 57, 44, 203,
+            143, 173, 62, 78, 180, 1, 48, 216, 129, 223, 34, 105, 33,
+        ],
+        [
+            71, 92, 139, 39, 87, 72, 88, 2, 1, 5, 154, 14, 244, 138, 253, 116, 113, 203, 7, 174,
+            49, 216, 88, 94, 233, 251, 220, 17, 19, 62, 142, 41,
+        ],
+    ],
+    [
+        [
+            61, 222, 98, 187, 178, 246, 136, 235, 234, 162, 29, 132, 16, 87, 58, 249, 140, 210, 62,
+            204, 34, 166, 135, 164, 118, 21, 181, 46, 215, 232, 234, 41,
+        ],
+        [
+            108, 124, 187, 66, 180, 167, 233, 17, 56, 166, 172, 61, 198, 167, 53, 66, 58, 24, 86,
+            29, 24, 30, 59, 213, 140, 66, 162, 145, 212, 204, 115, 25,
+        ],
+        [
+            126, 189, 246, 53, 52, 94, 147, 57, 67, 135, 51, 106, 225, 56, 234, 69, 109, 0, 84, 85,
+            158, 111, 234, 117, 134, 231, 202, 117, 69, 62, 231, 62,
+        ],
+        [
+            180, 135, 221, 126, 92, 15, 183, 27, 71, 155, 203, 35, 217, 20, 196, 191, 166, 148, 12,
+            90, 70, 8, 55, 187, 227, 234, 199, 6, 170, 31, 164, 35,
+        ],
+        [
+            127, 229, 190, 196, 138, 191, 99, 200, 2, 94, 33, 220, 198, 94, 247, 56, 92, 235, 5,
+            231, 0, 215, 115, 237, 123, 128, 163, 62, 245, 136, 81, 22,
+        ],
+        [
+            227, 192, 203, 190, 191, 238, 65, 46, 225, 246, 98, 119, 248, 140, 53, 18, 29, 161, 15,
+            186, 236, 103, 170, 73, 194, 235, 181, 196, 130, 245, 221, 13,
+        ],
+        [
+            64, 205, 137, 125, 6, 95, 1, 144, 47, 13, 117, 175, 2, 2, 233, 104, 21, 195, 159, 219,
+            27, 30, 12, 229, 218, 26, 207, 101, 32, 16, 167, 2,
+        ],
+        [
+            34, 165, 74, 35, 215, 50, 17, 254, 127, 186, 142, 239, 125, 1, 238, 118, 184, 35, 133,
+            15, 46, 87, 123, 153, 143, 75, 66, 12, 100, 48, 121, 48,
+        ],
+    ],
+    [
+        [
+            214, 114, 165, 15, 16, 78, 181, 140, 200, 65, 29, 172, 151, 153, 42, 42, 237, 0, 16,
+            125, 100, 98, 184, 223, 117, 20, 178, 157, 216, 44, 213, 15,
+        ],
+        [
+            132, 159, 1, 46, 5, 227, 173, 110, 40, 63, 114, 61, 174, 128, 176, 65, 210, 40, 113,
+            98, 56, 97, 31, 79, 27, 108, 73, 89, 187, 91, 212, 56,
+        ],
+        [
+            172, 60, 113, 153, 79, 201, 88, 244, 49, 183, 22, 155, 50, 177, 233, 114, 239, 171, 11,
+            254, 167, 190, 175, 168, 186, 77, 225, 135, 173, 40, 55, 48,
+        ],
+        [
+            125, 213, 133, 173, 206, 217, 164, 129, 242, 146, 105, 114, 154, 236, 10, 141, 30, 90,
+            218, 141, 173, 47, 144, 222, 136, 142, 38, 52, 26, 23, 14, 60,
+        ],
+        [
+            139, 80, 72, 222, 254, 102, 93, 93, 171, 176, 185, 71, 208, 45, 194, 155, 138, 10, 119,
+            216, 70, 65, 186, 101, 170, 173, 40, 248, 151, 68, 36, 2,
+        ],
+        [
+            217, 169, 205, 250, 22, 76, 171, 72, 234, 51, 110, 48, 151, 167, 126, 164, 6, 208, 212,
+            219, 0, 239, 167, 53, 192, 217, 172, 45, 11, 255, 36, 8,
+        ],
+        [
+            185, 240, 107, 188, 203, 252, 145, 109, 83, 50, 19, 103, 221, 108, 214, 191, 76, 193,
+            213, 76, 178, 238, 191, 96, 148, 240, 145, 197, 57, 223, 91, 38,
+        ],
+        [
+            135, 117, 125, 1, 188, 32, 35, 122, 175, 114, 34, 107, 83, 189, 14, 252, 187, 207, 56,
+            81, 179, 150, 83, 169, 41, 7, 153, 219, 41, 249, 137, 36,
+        ],
+    ],
+    [
+        [
+            130, 161, 187, 43, 82, 167, 198, 157, 80, 21, 74, 98, 249, 108, 140, 91, 167, 175, 83,
+            166, 160, 83, 226, 11, 105, 178, 43, 93, 152, 98, 39, 60,
+        ],
+        [
+            103, 60, 46, 185, 126, 175, 11, 242, 101, 195, 88, 74, 137, 157, 7, 133, 136, 190, 182,
+            15, 95, 81, 82, 60, 238, 203, 94, 197, 58, 235, 78, 26,
+        ],
+        [
+            125, 109, 188, 77, 254, 92, 214, 193, 55, 226, 214, 209, 14, 61, 76, 62, 1, 184, 215,
+            234, 137, 221, 36, 165, 14, 51, 144, 85, 103, 230, 139, 54,
+        ],
+        [
+            31, 80, 113, 254, 151, 75, 72, 118, 184, 169, 88, 45, 176, 244, 185, 244, 116, 20, 254,
+            25, 46, 209, 230, 101, 108, 212, 145, 109, 19, 203, 52, 23,
+        ],
+        [
+            223, 26, 38, 148, 184, 152, 184, 143, 7, 88, 24, 23, 10, 222, 186, 75, 235, 47, 152,
+            166, 150, 194, 251, 172, 244, 48, 213, 91, 185, 90, 135, 6,
+        ],
+        [
+            49, 201, 141, 151, 38, 161, 147, 187, 9, 184, 151, 218, 50, 193, 207, 31, 125, 243, 44,
+            73, 133, 109, 219, 122, 48, 232, 143, 23, 243, 253, 230, 4,
+        ],
+        [
+            226, 81, 244, 145, 117, 92, 163, 152, 234, 27, 48, 188, 216, 35, 238, 160, 132, 170,
+            116, 231, 72, 202, 3, 185, 230, 77, 245, 56, 30, 214, 138, 48,
+        ],
+        [
+            203, 71, 145, 89, 101, 217, 131, 63, 86, 163, 54, 136, 121, 122, 155, 211, 113, 235,
+            21, 121, 67, 53, 217, 167, 76, 158, 51, 115, 145, 91, 31, 17,
+        ],
+    ],
+    [
+        [
+            163, 118, 62, 49, 37, 114, 17, 221, 161, 123, 183, 175, 99, 19, 182, 11, 127, 236, 183,
+            255, 144, 45, 151, 179, 76, 158, 3, 244, 18, 197, 192, 15,
+        ],
+        [
+            161, 140, 144, 70, 95, 191, 18, 250, 95, 202, 117, 12, 81, 145, 232, 37, 148, 192, 220,
+            126, 52, 144, 121, 51, 101, 197, 209, 187, 62, 95, 123, 6,
+        ],
+        [
+            218, 235, 88, 200, 137, 249, 88, 23, 9, 21, 41, 221, 173, 222, 183, 202, 244, 51, 59,
+            81, 157, 46, 225, 92, 104, 138, 194, 120, 192, 35, 255, 55,
+        ],
+        [
+            183, 236, 50, 252, 158, 165, 145, 185, 126, 97, 212, 66, 97, 197, 185, 125, 85, 60,
+            239, 123, 147, 234, 128, 46, 113, 127, 136, 143, 12, 160, 244, 14,
+        ],
+        [
+            229, 188, 4, 248, 56, 209, 163, 222, 126, 202, 169, 221, 208, 239, 56, 204, 25, 214,
+            222, 140, 83, 2, 164, 52, 212, 80, 104, 109, 32, 204, 13, 39,
+        ],
+        [
+            124, 94, 218, 55, 16, 89, 156, 202, 79, 167, 11, 70, 95, 50, 198, 187, 51, 105, 69, 76,
+            83, 72, 44, 143, 64, 60, 19, 14, 192, 196, 80, 27,
+        ],
+        [
+            97, 209, 31, 19, 192, 81, 91, 247, 188, 17, 0, 21, 75, 229, 246, 158, 136, 76, 210,
+            207, 249, 143, 152, 221, 229, 242, 59, 114, 206, 95, 96, 47,
+        ],
+        [
+            11, 206, 70, 250, 78, 150, 63, 79, 249, 28, 67, 124, 107, 222, 13, 23, 17, 68, 53, 122,
+            184, 139, 37, 94, 6, 39, 35, 160, 66, 221, 110, 57,
+        ],
+    ],
+    [
+        [
+            223, 134, 239, 176, 66, 205, 170, 212, 138, 20, 104, 236, 148, 255, 100, 186, 129, 240,
+            197, 226, 26, 15, 254, 102, 80, 192, 154, 239, 139, 23, 121, 63,
+        ],
+        [
+            5, 119, 208, 59, 122, 3, 98, 77, 4, 190, 57, 200, 218, 45, 203, 72, 213, 82, 131, 107,
+            169, 215, 115, 204, 1, 224, 230, 159, 198, 109, 107, 54,
+        ],
+        [
+            104, 158, 197, 37, 221, 147, 75, 28, 103, 145, 43, 10, 92, 236, 156, 128, 161, 166, 38,
+            21, 61, 23, 31, 28, 253, 61, 17, 246, 189, 252, 175, 43,
+        ],
+        [
+            24, 105, 76, 61, 63, 75, 50, 76, 51, 192, 208, 63, 88, 229, 128, 119, 220, 237, 199,
+            84, 244, 89, 108, 230, 177, 251, 241, 178, 198, 176, 83, 21,
+        ],
+        [
+            95, 224, 156, 151, 85, 5, 100, 100, 241, 158, 113, 178, 102, 190, 76, 193, 236, 80,
+            137, 95, 138, 94, 146, 3, 76, 157, 86, 102, 237, 20, 176, 63,
+        ],
+        [
+            135, 94, 202, 65, 67, 250, 57, 207, 182, 240, 92, 3, 232, 237, 207, 226, 96, 251, 5,
+            14, 56, 84, 221, 45, 50, 21, 23, 38, 125, 141, 125, 33,
+        ],
+        [
+            1, 250, 154, 59, 193, 213, 14, 252, 103, 49, 176, 144, 111, 21, 26, 187, 8, 115, 236,
+            31, 221, 198, 37, 92, 194, 32, 42, 236, 140, 108, 35, 39,
+        ],
+        [
+            103, 78, 38, 12, 33, 172, 47, 58, 164, 230, 77, 235, 219, 159, 138, 135, 17, 66, 215,
+            244, 183, 189, 78, 154, 114, 85, 131, 71, 221, 132, 206, 51,
+        ],
+    ],
+    [
+        [
+            74, 237, 137, 138, 7, 144, 141, 134, 245, 201, 75, 46, 40, 46, 38, 183, 163, 73, 201,
+            165, 151, 236, 247, 214, 6, 44, 36, 27, 225, 75, 97, 48,
+        ],
+        [
+            38, 39, 238, 243, 197, 119, 161, 224, 249, 104, 44, 35, 221, 140, 86, 236, 9, 96, 12,
+            2, 73, 135, 165, 30, 67, 208, 15, 210, 52, 18, 118, 6,
+        ],
+        [
+            143, 224, 93, 228, 86, 241, 188, 45, 229, 9, 195, 9, 209, 118, 156, 40, 7, 200, 138,
+            200, 192, 83, 107, 147, 195, 86, 84, 8, 93, 62, 87, 54,
+        ],
+        [
+            212, 96, 74, 248, 166, 217, 63, 214, 37, 93, 202, 74, 239, 98, 42, 253, 228, 212, 156,
+            203, 141, 14, 197, 19, 234, 148, 17, 40, 141, 236, 35, 49,
+        ],
+        [
+            173, 148, 235, 124, 235, 146, 153, 90, 15, 115, 1, 233, 109, 117, 216, 239, 79, 144,
+            231, 37, 188, 189, 78, 29, 133, 26, 176, 109, 177, 234, 202, 59,
+        ],
+        [
+            10, 38, 232, 241, 157, 38, 214, 76, 198, 109, 162, 131, 127, 3, 40, 15, 48, 195, 47,
+            211, 52, 8, 0, 189, 126, 120, 13, 42, 238, 226, 225, 3,
+        ],
+        [
+            243, 73, 44, 63, 255, 180, 74, 70, 135, 143, 219, 51, 6, 159, 80, 154, 210, 51, 241,
+            230, 40, 249, 80, 106, 102, 166, 7, 155, 194, 38, 33, 17,
+        ],
+        [
+            191, 105, 232, 173, 147, 80, 10, 21, 203, 53, 211, 74, 36, 15, 3, 188, 128, 47, 9, 186,
+            83, 202, 36, 81, 138, 63, 148, 167, 137, 35, 147, 19,
+        ],
+    ],
+    [
+        [
+            236, 196, 10, 96, 182, 79, 154, 55, 78, 33, 43, 127, 92, 81, 212, 66, 30, 0, 86, 117,
+            207, 159, 3, 186, 59, 148, 154, 200, 141, 92, 147, 27,
+        ],
+        [
+            225, 90, 178, 233, 102, 159, 82, 225, 166, 129, 39, 34, 244, 250, 228, 100, 134, 200,
+            148, 85, 91, 43, 105, 75, 200, 87, 81, 59, 40, 193, 211, 55,
+        ],
+        [
+            59, 148, 63, 224, 145, 150, 218, 137, 164, 83, 27, 147, 217, 75, 108, 182, 36, 204,
+            121, 133, 12, 8, 235, 64, 128, 244, 34, 13, 9, 72, 63, 28,
+        ],
+        [
+            212, 212, 49, 80, 78, 45, 56, 203, 40, 249, 128, 137, 185, 87, 92, 47, 146, 177, 132,
+            62, 215, 25, 127, 115, 205, 101, 6, 154, 76, 80, 114, 18,
+        ],
+        [
+            176, 192, 244, 210, 165, 138, 232, 75, 159, 72, 99, 239, 121, 37, 50, 114, 181, 220,
+            176, 22, 164, 127, 221, 10, 193, 99, 140, 15, 204, 86, 212, 53,
+        ],
+        [
+            159, 147, 161, 250, 222, 214, 217, 27, 87, 5, 8, 226, 156, 162, 178, 255, 170, 187,
+            200, 161, 26, 195, 99, 180, 246, 102, 210, 123, 107, 242, 173, 35,
+        ],
+        [
+            147, 2, 204, 135, 133, 234, 183, 133, 186, 151, 248, 180, 75, 13, 40, 56, 145, 134,
+            209, 237, 43, 6, 107, 52, 33, 206, 165, 226, 205, 75, 28, 21,
+        ],
+        [
+            30, 67, 172, 233, 205, 173, 245, 113, 133, 159, 28, 77, 133, 209, 85, 173, 163, 43,
+            138, 208, 96, 215, 181, 142, 133, 151, 156, 36, 126, 32, 68, 7,
+        ],
+    ],
+    [
+        [
+            12, 123, 146, 187, 79, 71, 121, 126, 110, 67, 163, 209, 185, 8, 43, 250, 139, 95, 132,
+            9, 141, 123, 120, 25, 113, 59, 253, 85, 72, 170, 199, 27,
+        ],
+        [
+            148, 38, 17, 234, 63, 253, 30, 242, 241, 113, 82, 233, 175, 17, 227, 75, 172, 25, 1,
+            230, 87, 107, 49, 184, 36, 27, 255, 135, 253, 15, 42, 18,
+        ],
+        [
+            57, 122, 227, 248, 85, 40, 238, 252, 56, 46, 59, 209, 214, 24, 129, 169, 59, 35, 169,
+            94, 189, 126, 146, 19, 162, 186, 148, 249, 170, 190, 218, 36,
+        ],
+        [
+            72, 154, 129, 64, 173, 23, 154, 53, 215, 48, 178, 84, 152, 160, 105, 56, 49, 219, 11,
+            6, 196, 221, 55, 85, 72, 129, 149, 148, 178, 165, 20, 61,
+        ],
+        [
+            211, 89, 31, 7, 22, 111, 165, 192, 156, 164, 251, 69, 251, 72, 208, 157, 53, 57, 144,
+            72, 12, 146, 11, 14, 145, 181, 14, 68, 237, 120, 174, 4,
+        ],
+        [
+            18, 115, 60, 134, 217, 114, 253, 177, 223, 163, 10, 83, 103, 37, 178, 69, 3, 78, 164,
+            2, 35, 65, 2, 219, 93, 141, 186, 80, 20, 166, 103, 43,
+        ],
+        [
+            110, 16, 223, 29, 240, 124, 98, 122, 115, 98, 200, 21, 240, 17, 173, 209, 114, 172,
+            198, 226, 17, 201, 34, 247, 39, 15, 246, 75, 212, 48, 39, 11,
+        ],
+        [
+            249, 114, 161, 95, 41, 76, 181, 17, 119, 208, 229, 87, 84, 28, 170, 246, 144, 202, 188,
+            5, 49, 53, 77, 232, 8, 6, 247, 81, 111, 232, 35, 57,
+        ],
+    ],
+    [
+        [
+            166, 191, 70, 138, 155, 151, 236, 84, 96, 249, 99, 236, 45, 137, 97, 90, 167, 20, 174,
+            149, 119, 233, 203, 65, 37, 72, 157, 86, 249, 111, 56, 60,
+        ],
+        [
+            43, 38, 90, 143, 119, 212, 89, 41, 208, 243, 146, 176, 197, 213, 11, 165, 57, 6, 3,
+            139, 45, 156, 142, 42, 177, 203, 207, 69, 121, 180, 159, 39,
+        ],
+        [
+            55, 217, 98, 174, 52, 172, 195, 38, 151, 240, 237, 116, 26, 43, 119, 0, 126, 67, 123,
+            173, 195, 172, 254, 130, 16, 111, 177, 190, 128, 161, 192, 9,
+        ],
+        [
+            73, 205, 70, 151, 40, 112, 216, 117, 3, 99, 187, 10, 34, 53, 109, 94, 0, 225, 52, 200,
+            127, 182, 30, 45, 188, 66, 50, 192, 179, 24, 235, 42,
+        ],
+        [
+            8, 249, 190, 160, 146, 39, 217, 65, 210, 62, 89, 36, 4, 149, 125, 101, 32, 202, 88, 37,
+            16, 29, 219, 53, 204, 32, 1, 228, 3, 121, 6, 21,
+        ],
+        [
+            205, 41, 152, 28, 50, 10, 231, 209, 244, 103, 159, 116, 223, 92, 92, 246, 192, 171, 38,
+            66, 116, 104, 90, 75, 238, 94, 179, 10, 71, 73, 189, 57,
+        ],
+        [
+            28, 180, 207, 160, 147, 83, 83, 148, 184, 113, 208, 92, 58, 143, 129, 211, 108, 26, 86,
+            119, 117, 184, 154, 40, 181, 24, 6, 90, 11, 150, 28, 38,
+        ],
+        [
+            144, 187, 91, 40, 224, 180, 119, 167, 173, 26, 227, 221, 172, 189, 180, 197, 52, 233,
+            39, 112, 179, 40, 22, 182, 41, 225, 104, 21, 8, 96, 166, 51,
+        ],
+    ],
+    [
+        [
+            118, 105, 175, 214, 145, 170, 223, 7, 51, 179, 133, 78, 187, 138, 233, 70, 53, 182,
+            238, 228, 35, 55, 107, 18, 52, 34, 86, 113, 121, 120, 97, 8,
+        ],
+        [
+            136, 52, 133, 99, 235, 32, 133, 156, 69, 187, 203, 147, 116, 160, 103, 12, 154, 202,
+            135, 55, 163, 214, 96, 56, 11, 53, 23, 149, 77, 160, 189, 36,
+        ],
+        [
+            46, 168, 103, 19, 16, 88, 71, 160, 190, 241, 72, 249, 169, 10, 141, 151, 42, 14, 129,
+            36, 184, 162, 230, 186, 51, 234, 169, 202, 221, 129, 188, 47,
+        ],
+        [
+            94, 22, 119, 86, 162, 42, 146, 178, 116, 23, 102, 176, 181, 124, 222, 250, 98, 251,
+            121, 116, 211, 152, 216, 137, 68, 158, 133, 226, 124, 183, 135, 22,
+        ],
+        [
+            247, 213, 253, 212, 198, 6, 78, 30, 223, 210, 220, 205, 100, 129, 193, 27, 248, 74, 60,
+            30, 35, 4, 143, 42, 249, 183, 78, 209, 154, 199, 38, 53,
+        ],
+        [
+            226, 200, 233, 87, 125, 230, 129, 209, 4, 2, 105, 213, 112, 223, 41, 44, 9, 120, 65,
+            10, 131, 60, 123, 29, 20, 11, 33, 217, 153, 65, 91, 39,
+        ],
+        [
+            155, 153, 145, 173, 223, 141, 69, 150, 77, 108, 185, 23, 158, 178, 160, 123, 90, 218,
+            166, 40, 80, 206, 252, 227, 104, 248, 194, 61, 88, 204, 154, 8,
+        ],
+        [
+            142, 151, 153, 200, 56, 160, 131, 14, 164, 106, 30, 83, 29, 118, 48, 143, 222, 57, 93,
+            202, 102, 18, 253, 130, 35, 72, 38, 19, 42, 58, 106, 41,
+        ],
+    ],
+    [
+        [
+            23, 79, 174, 233, 153, 156, 213, 212, 214, 92, 159, 141, 29, 229, 223, 133, 240, 209,
+            79, 184, 66, 96, 27, 101, 214, 54, 86, 241, 99, 56, 51, 46,
+        ],
+        [
+            119, 55, 21, 173, 29, 13, 198, 88, 92, 46, 235, 147, 188, 255, 90, 77, 8, 136, 101,
+            250, 53, 209, 119, 162, 7, 76, 17, 162, 29, 199, 118, 39,
+        ],
+        [
+            8, 253, 207, 82, 23, 175, 92, 88, 155, 246, 195, 146, 200, 200, 105, 255, 61, 115, 151,
+            166, 124, 64, 220, 17, 100, 86, 20, 203, 125, 3, 221, 36,
+        ],
+        [
+            174, 75, 215, 152, 74, 10, 18, 7, 252, 162, 23, 11, 68, 157, 89, 226, 95, 128, 7, 78,
+            23, 165, 37, 157, 141, 175, 117, 23, 234, 123, 72, 42,
+        ],
+        [
+            133, 181, 221, 30, 165, 125, 199, 148, 83, 133, 250, 164, 209, 152, 68, 72, 34, 196,
+            80, 12, 224, 123, 47, 42, 221, 191, 74, 161, 197, 203, 235, 32,
+        ],
+        [
+            27, 29, 142, 238, 251, 254, 200, 233, 42, 77, 207, 93, 95, 197, 163, 242, 93, 134, 230,
+            18, 210, 156, 93, 167, 113, 16, 49, 46, 123, 218, 178, 61,
+        ],
+        [
+            118, 213, 164, 221, 213, 78, 38, 138, 116, 99, 222, 183, 249, 126, 137, 103, 13, 10,
+            153, 232, 108, 250, 220, 187, 195, 166, 238, 223, 42, 124, 91, 10,
+        ],
+        [
+            25, 143, 13, 156, 46, 146, 125, 162, 179, 244, 52, 49, 47, 142, 84, 241, 15, 96, 35,
+            122, 26, 175, 155, 30, 133, 224, 76, 77, 136, 128, 198, 6,
+        ],
+    ],
+    [
+        [
+            228, 4, 100, 254, 64, 122, 195, 101, 45, 240, 33, 189, 172, 246, 68, 35, 204, 229, 42,
+            174, 120, 197, 247, 7, 61, 33, 16, 165, 182, 175, 213, 43,
+        ],
+        [
+            95, 82, 224, 168, 92, 69, 52, 224, 169, 53, 233, 52, 82, 158, 169, 80, 71, 142, 135,
+            177, 107, 103, 114, 1, 245, 144, 160, 123, 8, 185, 118, 12,
+        ],
+        [
+            67, 145, 142, 236, 153, 196, 179, 180, 101, 10, 152, 214, 130, 7, 187, 152, 147, 177,
+            234, 96, 10, 16, 126, 208, 89, 163, 239, 38, 237, 148, 11, 29,
+        ],
+        [
+            10, 227, 59, 211, 209, 116, 53, 110, 240, 229, 85, 169, 227, 37, 187, 141, 76, 185,
+            215, 142, 202, 158, 100, 104, 52, 107, 179, 66, 237, 8, 203, 51,
+        ],
+        [
+            158, 60, 113, 87, 219, 161, 5, 234, 31, 203, 166, 8, 226, 230, 59, 175, 238, 85, 94,
+            39, 197, 52, 79, 172, 93, 55, 160, 241, 119, 43, 48, 27,
+        ],
+        [
+            214, 132, 49, 107, 226, 92, 16, 179, 190, 128, 224, 62, 190, 5, 135, 116, 189, 57, 80,
+            246, 109, 33, 9, 96, 231, 206, 202, 64, 169, 175, 222, 2,
+        ],
+        [
+            211, 188, 126, 110, 204, 200, 213, 50, 216, 49, 204, 224, 253, 245, 57, 139, 185, 75,
+            226, 85, 128, 149, 32, 213, 127, 7, 127, 106, 139, 76, 93, 42,
+        ],
+        [
+            38, 227, 189, 95, 248, 213, 125, 206, 75, 148, 138, 153, 134, 92, 243, 67, 101, 42, 86,
+            23, 28, 105, 5, 30, 72, 228, 21, 251, 56, 15, 104, 44,
+        ],
+    ],
+    [
+        [
+            37, 51, 111, 189, 64, 200, 241, 35, 170, 63, 123, 104, 60, 201, 92, 104, 78, 13, 168,
+            90, 133, 18, 74, 125, 137, 233, 244, 183, 194, 166, 136, 4,
+        ],
+        [
+            135, 115, 58, 240, 172, 155, 138, 72, 201, 245, 165, 132, 213, 230, 175, 122, 80, 137,
+            12, 202, 51, 147, 254, 83, 83, 12, 24, 196, 127, 65, 29, 9,
+        ],
+        [
+            102, 193, 159, 222, 145, 157, 184, 248, 13, 50, 103, 129, 22, 72, 211, 169, 252, 59,
+            21, 179, 8, 224, 191, 155, 105, 80, 205, 20, 126, 53, 167, 51,
+        ],
+        [
+            248, 10, 36, 176, 206, 117, 68, 20, 29, 159, 234, 75, 123, 229, 186, 211, 197, 38, 74,
+            210, 209, 247, 75, 138, 105, 11, 213, 184, 88, 146, 169, 63,
+        ],
+        [
+            72, 92, 136, 57, 104, 244, 192, 189, 92, 229, 248, 238, 206, 124, 141, 216, 65, 129,
+            74, 239, 127, 25, 111, 173, 5, 103, 127, 62, 158, 173, 150, 14,
+        ],
+        [
+            137, 66, 178, 24, 248, 195, 72, 192, 193, 118, 248, 34, 201, 117, 22, 68, 132, 3, 194,
+            91, 96, 246, 119, 95, 73, 112, 14, 241, 140, 190, 209, 1,
+        ],
+        [
+            189, 118, 10, 191, 62, 184, 239, 63, 140, 57, 145, 76, 51, 251, 162, 162, 37, 175, 50,
+            68, 158, 17, 225, 79, 180, 153, 166, 114, 251, 155, 69, 33,
+        ],
+        [
+            59, 192, 204, 241, 201, 5, 189, 79, 249, 152, 117, 146, 123, 43, 151, 111, 131, 23,
+            129, 192, 167, 112, 132, 40, 171, 94, 90, 212, 100, 52, 48, 28,
+        ],
+    ],
+    [
+        [
+            160, 245, 228, 171, 90, 165, 111, 25, 114, 50, 116, 39, 201, 216, 29, 129, 112, 207,
+            152, 165, 48, 118, 172, 101, 106, 76, 4, 16, 248, 172, 170, 39,
+        ],
+        [
+            60, 126, 38, 248, 48, 18, 168, 77, 10, 58, 62, 36, 45, 84, 12, 6, 72, 185, 147, 255,
+            88, 135, 221, 226, 229, 114, 39, 186, 151, 16, 175, 17,
+        ],
+        [
+            62, 55, 177, 217, 205, 252, 191, 205, 39, 137, 103, 195, 252, 240, 216, 28, 24, 138,
+            162, 54, 48, 159, 17, 103, 110, 255, 103, 3, 150, 20, 31, 15,
+        ],
+        [
+            120, 251, 98, 40, 80, 237, 108, 131, 14, 65, 116, 12, 242, 115, 26, 181, 106, 240, 90,
+            13, 158, 21, 68, 3, 88, 14, 59, 191, 63, 253, 247, 19,
+        ],
+        [
+            218, 240, 72, 194, 44, 92, 246, 87, 69, 50, 34, 84, 102, 185, 46, 200, 68, 10, 145, 56,
+            10, 240, 100, 73, 125, 33, 207, 254, 198, 215, 119, 23,
+        ],
+        [
+            166, 98, 74, 208, 109, 114, 207, 207, 253, 137, 146, 124, 252, 37, 92, 142, 72, 195,
+            79, 128, 83, 3, 62, 182, 252, 140, 69, 112, 81, 35, 14, 63,
+        ],
+        [
+            216, 80, 1, 36, 96, 224, 105, 59, 214, 215, 53, 144, 31, 78, 236, 102, 94, 23, 217,
+            195, 69, 74, 56, 14, 28, 241, 94, 33, 216, 166, 153, 47,
+        ],
+        [
+            239, 70, 89, 170, 122, 62, 9, 125, 238, 216, 0, 168, 95, 170, 65, 156, 31, 4, 6, 163,
+            64, 110, 235, 190, 227, 59, 9, 254, 83, 42, 179, 19,
+        ],
+    ],
+    [
+        [
+            231, 7, 127, 64, 136, 255, 178, 190, 36, 15, 199, 117, 145, 167, 218, 125, 217, 43,
+            195, 87, 29, 177, 173, 97, 128, 42, 111, 135, 122, 245, 128, 55,
+        ],
+        [
+            35, 175, 64, 138, 189, 200, 135, 138, 203, 147, 145, 199, 126, 81, 114, 39, 30, 64, 73,
+            90, 94, 109, 230, 69, 49, 71, 190, 180, 50, 10, 203, 20,
+        ],
+        [
+            110, 75, 166, 243, 255, 128, 242, 208, 67, 78, 166, 29, 124, 54, 56, 160, 106, 113,
+            190, 155, 58, 241, 21, 161, 93, 198, 173, 46, 251, 76, 109, 34,
+        ],
+        [
+            18, 157, 21, 73, 163, 78, 187, 222, 155, 123, 56, 158, 35, 155, 108, 36, 154, 199, 10,
+            39, 245, 212, 70, 250, 249, 38, 212, 21, 226, 178, 136, 44,
+        ],
+        [
+            135, 162, 176, 158, 247, 168, 215, 162, 0, 67, 153, 248, 4, 101, 176, 233, 224, 73,
+            213, 227, 132, 34, 140, 44, 207, 79, 194, 198, 151, 218, 52, 50,
+        ],
+        [
+            201, 18, 231, 111, 222, 85, 53, 39, 138, 60, 182, 53, 132, 16, 164, 42, 57, 56, 88,
+            234, 13, 162, 66, 189, 142, 130, 211, 204, 252, 71, 47, 16,
+        ],
+        [
+            91, 194, 190, 127, 41, 158, 183, 169, 31, 35, 96, 249, 162, 84, 132, 230, 161, 243,
+            170, 226, 210, 24, 14, 186, 83, 31, 210, 85, 195, 185, 24, 20,
+        ],
+        [
+            217, 59, 106, 21, 76, 11, 79, 85, 36, 138, 162, 208, 13, 136, 63, 206, 136, 158, 34,
+            207, 169, 168, 252, 135, 67, 172, 77, 234, 167, 29, 87, 45,
+        ],
+    ],
+    [
+        [
+            228, 252, 249, 53, 147, 111, 53, 172, 223, 102, 206, 74, 150, 3, 55, 233, 88, 23, 159,
+            60, 57, 46, 186, 171, 76, 170, 249, 69, 244, 79, 192, 30,
+        ],
+        [
+            128, 217, 236, 6, 89, 109, 19, 109, 108, 57, 35, 181, 116, 110, 215, 182, 43, 137, 252,
+            11, 156, 212, 132, 209, 86, 87, 8, 233, 186, 24, 134, 41,
+        ],
+        [
+            159, 52, 52, 246, 254, 33, 247, 217, 161, 118, 36, 12, 186, 90, 199, 184, 112, 54, 159,
+            71, 21, 210, 38, 191, 179, 162, 228, 205, 173, 111, 182, 43,
+        ],
+        [
+            19, 68, 116, 77, 123, 197, 44, 57, 140, 130, 231, 218, 37, 95, 228, 61, 81, 117, 38,
+            22, 118, 84, 173, 119, 161, 183, 187, 24, 201, 83, 166, 40,
+        ],
+        [
+            203, 74, 138, 253, 8, 155, 80, 99, 82, 194, 145, 185, 32, 193, 80, 85, 61, 166, 71, 92,
+            106, 41, 55, 60, 40, 237, 54, 145, 112, 90, 104, 41,
+        ],
+        [
+            152, 100, 177, 4, 228, 177, 130, 52, 85, 136, 118, 163, 98, 102, 225, 225, 113, 159,
+            224, 37, 25, 80, 112, 245, 96, 183, 221, 146, 174, 25, 48, 41,
+        ],
+        [
+            124, 166, 27, 180, 114, 17, 98, 30, 99, 232, 181, 40, 65, 191, 114, 222, 48, 209, 53,
+            93, 98, 38, 42, 146, 68, 143, 229, 208, 46, 178, 238, 62,
+        ],
+        [
+            238, 242, 49, 191, 50, 111, 197, 182, 193, 77, 103, 223, 113, 224, 125, 195, 23, 135,
+            50, 145, 77, 171, 82, 132, 173, 196, 80, 142, 107, 157, 142, 29,
+        ],
+    ],
+    [
+        [
+            82, 195, 210, 133, 249, 13, 111, 212, 92, 164, 28, 91, 160, 60, 34, 35, 243, 234, 176,
+            255, 53, 140, 151, 76, 109, 87, 182, 16, 14, 250, 248, 2,
+        ],
+        [
+            130, 201, 107, 39, 163, 233, 135, 216, 65, 13, 199, 247, 155, 234, 100, 133, 254, 230,
+            170, 109, 170, 222, 252, 40, 68, 48, 107, 211, 83, 112, 240, 60,
+        ],
+        [
+            30, 28, 129, 71, 31, 137, 206, 248, 195, 232, 69, 203, 96, 43, 67, 68, 33, 187, 167,
+            235, 204, 62, 103, 193, 206, 147, 89, 203, 190, 181, 114, 10,
+        ],
+        [
+            127, 36, 5, 200, 56, 245, 144, 50, 154, 33, 53, 7, 127, 232, 151, 11, 124, 180, 160,
+            89, 172, 138, 214, 238, 131, 54, 191, 199, 206, 111, 61, 23,
+        ],
+        [
+            146, 197, 178, 24, 254, 19, 211, 232, 156, 144, 13, 104, 87, 52, 25, 6, 187, 206, 19,
+            91, 43, 70, 93, 18, 227, 52, 139, 210, 183, 88, 127, 36,
+        ],
+        [
+            113, 170, 45, 153, 118, 29, 249, 241, 96, 85, 78, 221, 223, 55, 10, 199, 137, 15, 230,
+            113, 214, 92, 169, 32, 58, 251, 62, 186, 233, 37, 32, 1,
+        ],
+        [
+            47, 80, 145, 109, 177, 172, 202, 217, 197, 228, 249, 136, 223, 48, 136, 55, 244, 227,
+            206, 93, 78, 84, 183, 243, 203, 98, 169, 196, 103, 39, 76, 48,
+        ],
+        [
+            32, 251, 111, 146, 107, 57, 148, 119, 188, 206, 74, 49, 89, 16, 106, 149, 111, 90, 210,
+            38, 142, 50, 196, 143, 191, 133, 221, 123, 219, 205, 157, 15,
+        ],
+    ],
+    [
+        [
+            124, 193, 251, 119, 28, 89, 69, 168, 245, 164, 145, 5, 34, 127, 237, 40, 9, 194, 222,
+            92, 5, 254, 145, 164, 238, 22, 168, 97, 39, 63, 63, 48,
+        ],
+        [
+            128, 14, 241, 12, 198, 51, 53, 31, 29, 56, 116, 167, 33, 172, 77, 124, 84, 230, 106,
+            120, 94, 231, 26, 253, 29, 246, 251, 225, 144, 208, 93, 41,
+        ],
+        [
+            145, 233, 236, 72, 57, 76, 123, 17, 55, 100, 127, 228, 145, 32, 165, 62, 23, 123, 121,
+            2, 13, 178, 199, 180, 214, 163, 228, 157, 63, 135, 187, 30,
+        ],
+        [
+            76, 75, 200, 240, 37, 16, 184, 100, 38, 65, 206, 138, 92, 149, 194, 84, 241, 42, 194,
+            161, 149, 93, 182, 230, 110, 171, 51, 65, 219, 158, 252, 19,
+        ],
+        [
+            169, 156, 202, 117, 173, 222, 62, 242, 203, 66, 26, 216, 9, 92, 112, 184, 46, 165, 52,
+            160, 114, 38, 68, 43, 148, 62, 30, 121, 26, 192, 152, 0,
+        ],
+        [
+            38, 77, 105, 144, 232, 160, 9, 77, 14, 96, 247, 59, 109, 53, 101, 114, 55, 121, 243,
+            111, 90, 240, 61, 220, 55, 0, 114, 64, 49, 194, 37, 63,
+        ],
+        [
+            94, 199, 2, 248, 34, 232, 68, 130, 1, 237, 3, 73, 251, 153, 188, 183, 202, 133, 201,
+            127, 244, 156, 184, 58, 22, 53, 115, 184, 107, 251, 115, 41,
+        ],
+        [
+            44, 105, 2, 121, 133, 252, 4, 51, 135, 185, 18, 240, 184, 64, 39, 128, 126, 216, 168,
+            25, 54, 230, 96, 205, 156, 5, 228, 79, 121, 245, 0, 37,
+        ],
+    ],
+    [
+        [
+            26, 227, 128, 219, 221, 39, 112, 88, 84, 130, 216, 87, 157, 119, 89, 202, 85, 179, 237,
+            107, 51, 211, 185, 30, 143, 196, 239, 4, 187, 89, 157, 46,
+        ],
+        [
+            11, 54, 239, 254, 23, 23, 81, 152, 249, 219, 38, 144, 14, 66, 140, 19, 125, 160, 65,
+            238, 136, 168, 185, 167, 131, 60, 217, 246, 38, 125, 58, 35,
+        ],
+        [
+            157, 212, 24, 185, 100, 207, 250, 73, 82, 53, 146, 208, 36, 19, 63, 130, 58, 99, 61,
+            79, 153, 247, 2, 65, 234, 255, 31, 19, 13, 168, 227, 45,
+        ],
+        [
+            36, 219, 99, 139, 180, 218, 207, 143, 166, 191, 127, 239, 60, 76, 145, 170, 56, 128,
+            112, 71, 49, 92, 121, 144, 212, 14, 21, 80, 66, 58, 141, 30,
+        ],
+        [
+            36, 182, 110, 54, 159, 120, 85, 112, 6, 158, 77, 194, 157, 33, 36, 82, 2, 190, 84, 155,
+            101, 244, 186, 202, 94, 98, 115, 72, 231, 202, 129, 55,
+        ],
+        [
+            39, 152, 205, 65, 57, 155, 123, 160, 72, 205, 121, 246, 119, 90, 39, 77, 49, 95, 30,
+            159, 243, 241, 69, 154, 109, 150, 235, 177, 140, 158, 197, 50,
+        ],
+        [
+            101, 168, 129, 120, 249, 152, 206, 97, 236, 88, 65, 123, 54, 174, 153, 187, 243, 114,
+            75, 24, 105, 33, 133, 230, 209, 159, 244, 92, 139, 79, 29, 60,
+        ],
+        [
+            159, 56, 171, 163, 194, 74, 206, 171, 192, 125, 50, 168, 220, 194, 217, 246, 53, 51,
+            143, 119, 97, 16, 102, 154, 202, 171, 112, 0, 9, 76, 52, 33,
+        ],
+    ],
+    [
+        [
+            109, 67, 166, 112, 18, 88, 181, 61, 137, 12, 191, 223, 140, 243, 174, 222, 244, 102,
+            170, 101, 139, 159, 219, 120, 143, 31, 69, 70, 172, 184, 26, 47,
+        ],
+        [
+            49, 226, 39, 237, 179, 21, 55, 83, 139, 192, 65, 216, 225, 192, 239, 65, 235, 37, 109,
+            139, 101, 80, 151, 15, 183, 1, 40, 226, 236, 136, 173, 62,
+        ],
+        [
+            132, 87, 121, 118, 184, 56, 103, 98, 191, 218, 47, 214, 204, 128, 57, 24, 141, 86, 189,
+            135, 180, 249, 214, 40, 206, 182, 57, 238, 90, 133, 168, 5,
+        ],
+        [
+            60, 151, 209, 75, 237, 97, 152, 67, 235, 169, 140, 65, 35, 251, 107, 207, 254, 72, 81,
+            3, 244, 168, 187, 246, 125, 37, 167, 104, 81, 165, 105, 34,
+        ],
+        [
+            231, 77, 104, 60, 44, 124, 228, 21, 207, 19, 248, 89, 180, 91, 64, 64, 251, 244, 223,
+            207, 76, 3, 207, 142, 92, 16, 177, 109, 3, 141, 225, 16,
+        ],
+        [
+            229, 156, 173, 75, 130, 73, 204, 213, 61, 179, 238, 170, 15, 77, 113, 178, 84, 151,
+            137, 159, 149, 224, 204, 243, 232, 113, 208, 238, 82, 107, 180, 32,
+        ],
+        [
+            136, 153, 152, 220, 13, 5, 102, 224, 162, 188, 90, 143, 119, 179, 243, 104, 91, 134,
+            56, 22, 5, 152, 153, 17, 234, 167, 107, 234, 16, 66, 85, 34,
+        ],
+        [
+            130, 45, 164, 141, 146, 197, 199, 12, 51, 82, 156, 32, 239, 243, 29, 170, 63, 17, 153,
+            176, 150, 114, 38, 219, 27, 107, 187, 72, 32, 106, 68, 20,
+        ],
+    ],
+    [
+        [
+            51, 54, 182, 167, 147, 255, 80, 103, 13, 213, 237, 114, 233, 242, 173, 177, 188, 54, 5,
+            143, 165, 220, 114, 249, 175, 171, 173, 188, 4, 162, 62, 26,
+        ],
+        [
+            241, 98, 202, 23, 140, 169, 52, 94, 94, 232, 69, 90, 53, 215, 112, 146, 164, 223, 204,
+            33, 208, 138, 238, 181, 48, 56, 243, 170, 171, 35, 126, 48,
+        ],
+        [
+            56, 210, 32, 249, 23, 217, 198, 162, 239, 118, 198, 97, 177, 72, 116, 153, 131, 248,
+            194, 171, 180, 33, 195, 66, 159, 125, 110, 230, 56, 89, 15, 9,
+        ],
+        [
+            5, 133, 98, 216, 11, 182, 6, 102, 218, 117, 248, 20, 242, 170, 0, 183, 178, 30, 67,
+            211, 90, 255, 24, 70, 135, 65, 114, 85, 238, 29, 70, 40,
+        ],
+        [
+            102, 170, 201, 230, 61, 107, 34, 64, 162, 224, 15, 128, 93, 20, 103, 143, 19, 116, 25,
+            123, 93, 16, 154, 219, 136, 216, 69, 185, 35, 126, 242, 30,
+        ],
+        [
+            204, 190, 215, 249, 104, 142, 254, 130, 121, 238, 163, 234, 63, 91, 230, 251, 121, 201,
+            127, 69, 0, 121, 61, 203, 137, 2, 77, 227, 203, 127, 89, 44,
+        ],
+        [
+            159, 236, 163, 243, 192, 6, 217, 134, 210, 91, 90, 137, 46, 126, 9, 76, 108, 26, 31,
+            241, 181, 180, 29, 63, 62, 119, 7, 143, 166, 173, 8, 6,
+        ],
+        [
+            8, 238, 253, 27, 28, 102, 219, 25, 139, 220, 55, 32, 203, 141, 243, 93, 224, 72, 195,
+            75, 45, 78, 151, 142, 71, 137, 38, 141, 205, 102, 85, 35,
+        ],
+    ],
+    [
+        [
+            98, 124, 121, 75, 138, 47, 120, 198, 57, 252, 117, 98, 53, 109, 168, 113, 235, 254,
+            170, 23, 167, 88, 117, 230, 246, 7, 189, 223, 21, 12, 28, 43,
+        ],
+        [
+            172, 101, 158, 162, 23, 10, 251, 252, 92, 152, 13, 48, 159, 45, 112, 195, 149, 53, 198,
+            137, 77, 177, 135, 21, 86, 161, 36, 67, 10, 84, 115, 59,
+        ],
+        [
+            89, 60, 73, 153, 180, 157, 56, 238, 205, 197, 102, 16, 177, 170, 181, 232, 46, 160,
+            135, 229, 62, 155, 44, 183, 1, 70, 211, 211, 124, 120, 222, 26,
+        ],
+        [
+            126, 135, 102, 76, 24, 172, 65, 102, 115, 181, 92, 106, 34, 101, 203, 56, 249, 148, 93,
+            125, 212, 127, 82, 177, 180, 49, 119, 240, 169, 234, 9, 49,
+        ],
+        [
+            71, 143, 202, 34, 243, 214, 106, 210, 230, 70, 197, 6, 173, 230, 236, 14, 39, 19, 42,
+            121, 111, 148, 97, 89, 223, 152, 217, 77, 66, 193, 126, 54,
+        ],
+        [
+            81, 149, 56, 199, 215, 100, 87, 71, 249, 207, 114, 45, 137, 99, 209, 60, 26, 92, 202,
+            131, 184, 151, 170, 22, 219, 93, 71, 234, 107, 142, 232, 59,
+        ],
+        [
+            17, 166, 47, 181, 47, 121, 77, 103, 36, 162, 150, 155, 54, 127, 29, 40, 219, 189, 57,
+            150, 76, 147, 110, 67, 241, 212, 104, 10, 154, 50, 48, 17,
+        ],
+        [
+            20, 246, 109, 111, 72, 251, 94, 213, 187, 51, 196, 220, 212, 10, 167, 224, 102, 27,
+            115, 235, 106, 242, 214, 243, 148, 66, 111, 9, 221, 230, 224, 13,
+        ],
+    ],
+    [
+        [
+            158, 218, 203, 21, 240, 183, 105, 204, 138, 99, 207, 223, 104, 252, 85, 27, 195, 215,
+            225, 142, 69, 132, 177, 232, 49, 174, 246, 78, 103, 125, 17, 29,
+        ],
+        [
+            228, 101, 236, 222, 176, 167, 152, 154, 183, 104, 237, 123, 248, 121, 232, 69, 215,
+            181, 73, 228, 140, 179, 94, 40, 67, 69, 67, 102, 154, 223, 122, 51,
+        ],
+        [
+            248, 30, 67, 220, 168, 33, 81, 46, 96, 22, 94, 129, 31, 130, 56, 223, 184, 1, 198, 98,
+            212, 233, 165, 210, 145, 4, 100, 44, 234, 75, 14, 6,
+        ],
+        [
+            176, 203, 91, 145, 241, 154, 103, 144, 187, 208, 156, 255, 219, 145, 244, 86, 128, 136,
+            123, 221, 50, 148, 156, 138, 187, 15, 153, 186, 86, 77, 138, 8,
+        ],
+        [
+            180, 19, 118, 126, 101, 180, 248, 122, 194, 255, 63, 91, 186, 33, 147, 163, 36, 254,
+            211, 96, 175, 110, 18, 140, 9, 76, 246, 237, 146, 1, 231, 12,
+        ],
+        [
+            88, 60, 192, 62, 79, 179, 180, 200, 248, 127, 196, 132, 80, 39, 113, 255, 229, 201,
+            241, 38, 97, 34, 4, 49, 232, 50, 107, 64, 4, 224, 224, 37,
+        ],
+        [
+            149, 121, 11, 212, 194, 55, 251, 28, 119, 100, 176, 84, 249, 60, 182, 190, 221, 64,
+            228, 2, 214, 39, 56, 220, 227, 136, 228, 13, 141, 159, 245, 42,
+        ],
+        [
+            60, 243, 115, 233, 255, 140, 63, 231, 210, 14, 155, 130, 118, 194, 7, 141, 48, 173,
+            107, 162, 177, 75, 123, 169, 232, 103, 73, 240, 67, 80, 57, 24,
+        ],
+    ],
+    [
+        [
+            123, 136, 142, 35, 186, 163, 74, 144, 91, 217, 190, 33, 143, 34, 55, 166, 163, 87, 199,
+            199, 13, 152, 48, 89, 144, 123, 47, 91, 121, 216, 134, 26,
+        ],
+        [
+            91, 28, 158, 185, 86, 38, 1, 159, 40, 166, 63, 248, 93, 73, 118, 55, 180, 26, 78, 86,
+            42, 5, 98, 205, 83, 26, 145, 23, 158, 205, 197, 54,
+        ],
+        [
+            13, 183, 119, 158, 77, 201, 152, 68, 105, 136, 252, 223, 120, 231, 59, 72, 171, 229,
+            90, 75, 140, 89, 17, 82, 61, 117, 213, 226, 128, 253, 101, 39,
+        ],
+        [
+            59, 213, 226, 8, 10, 97, 178, 127, 43, 50, 225, 84, 92, 71, 0, 6, 25, 254, 192, 225,
+            129, 154, 45, 197, 149, 89, 51, 131, 185, 23, 99, 50,
+        ],
+        [
+            86, 45, 93, 113, 243, 120, 77, 157, 17, 22, 33, 162, 239, 86, 34, 58, 187, 204, 242,
+            211, 193, 192, 149, 103, 35, 85, 43, 239, 101, 191, 214, 23,
+        ],
+        [
+            46, 196, 68, 68, 11, 189, 17, 137, 247, 165, 190, 8, 171, 95, 251, 9, 230, 51, 75, 122,
+            196, 72, 18, 142, 118, 216, 157, 154, 149, 160, 68, 23,
+        ],
+        [
+            135, 237, 213, 40, 201, 43, 82, 54, 223, 17, 46, 232, 102, 235, 40, 83, 119, 29, 149,
+            23, 11, 62, 225, 95, 65, 46, 134, 46, 176, 242, 155, 0,
+        ],
+        [
+            253, 9, 210, 43, 163, 50, 199, 172, 36, 116, 174, 131, 178, 56, 211, 11, 88, 67, 68,
+            216, 138, 157, 28, 47, 254, 216, 114, 210, 142, 206, 184, 55,
+        ],
+    ],
+    [
+        [
+            197, 81, 131, 228, 67, 23, 186, 51, 177, 152, 255, 231, 198, 185, 86, 51, 221, 245,
+            167, 67, 74, 178, 231, 210, 217, 140, 72, 202, 217, 176, 139, 60,
+        ],
+        [
+            84, 252, 34, 127, 193, 224, 200, 198, 234, 98, 124, 60, 4, 168, 73, 124, 79, 120, 198,
+            114, 70, 123, 112, 62, 82, 53, 64, 80, 174, 183, 98, 6,
+        ],
+        [
+            199, 164, 163, 248, 113, 221, 67, 237, 201, 176, 1, 167, 144, 149, 235, 184, 83, 244,
+            12, 92, 104, 253, 162, 59, 22, 201, 221, 234, 163, 224, 89, 5,
+        ],
+        [
+            87, 154, 186, 165, 223, 109, 104, 245, 249, 189, 175, 226, 10, 125, 198, 87, 129, 98,
+            86, 13, 230, 38, 3, 66, 58, 175, 193, 243, 130, 7, 197, 41,
+        ],
+        [
+            71, 25, 97, 21, 122, 68, 82, 109, 212, 193, 136, 140, 58, 0, 12, 145, 215, 119, 7, 158,
+            82, 133, 73, 16, 20, 124, 236, 178, 228, 255, 82, 37,
+        ],
+        [
+            3, 127, 251, 18, 54, 47, 117, 7, 70, 9, 116, 157, 145, 150, 42, 199, 157, 49, 154, 22,
+            251, 13, 55, 97, 62, 218, 210, 141, 253, 191, 74, 6,
+        ],
+        [
+            173, 242, 97, 188, 114, 16, 6, 168, 246, 152, 247, 172, 229, 126, 102, 1, 15, 91, 193,
+            129, 169, 34, 47, 166, 229, 92, 100, 13, 226, 74, 56, 52,
+        ],
+        [
+            37, 169, 210, 23, 92, 170, 67, 52, 168, 83, 127, 25, 142, 75, 150, 126, 218, 154, 237,
+            239, 54, 45, 19, 253, 219, 252, 48, 37, 104, 56, 2, 21,
+        ],
+    ],
+    [
+        [
+            60, 125, 249, 106, 109, 26, 169, 114, 202, 228, 129, 132, 38, 39, 147, 68, 43, 242, 79,
+            218, 20, 31, 165, 156, 137, 220, 49, 241, 151, 247, 105, 53,
+        ],
+        [
+            212, 200, 140, 161, 15, 200, 20, 128, 243, 18, 105, 104, 217, 199, 147, 246, 93, 207,
+            207, 122, 198, 145, 173, 157, 243, 84, 236, 192, 37, 75, 26, 18,
+        ],
+        [
+            48, 74, 217, 159, 193, 212, 181, 11, 109, 13, 103, 211, 74, 136, 28, 55, 187, 15, 70,
+            196, 203, 198, 192, 71, 116, 32, 179, 94, 46, 123, 243, 62,
+        ],
+        [
+            32, 118, 247, 159, 253, 204, 153, 215, 217, 29, 212, 104, 196, 46, 55, 76, 139, 95,
+            221, 156, 28, 206, 109, 199, 191, 207, 48, 128, 215, 199, 153, 14,
+        ],
+        [
+            243, 149, 62, 162, 172, 158, 84, 72, 94, 135, 29, 157, 48, 234, 186, 120, 34, 167, 217,
+            200, 135, 119, 88, 173, 184, 86, 133, 70, 192, 84, 196, 57,
+        ],
+        [
+            244, 67, 190, 58, 76, 41, 196, 149, 51, 29, 81, 123, 148, 148, 73, 244, 118, 244, 250,
+            41, 239, 117, 59, 26, 104, 33, 23, 149, 65, 244, 39, 33,
+        ],
+        [
+            54, 60, 215, 246, 79, 251, 104, 178, 207, 103, 237, 158, 80, 0, 147, 131, 213, 98, 195,
+            57, 104, 115, 125, 246, 1, 99, 10, 173, 43, 139, 242, 1,
+        ],
+        [
+            84, 50, 191, 103, 217, 208, 123, 53, 160, 95, 108, 77, 170, 154, 202, 199, 67, 242, 75,
+            192, 30, 171, 48, 213, 177, 52, 208, 103, 137, 76, 9, 0,
+        ],
+    ],
+    [
+        [
+            198, 88, 29, 105, 10, 101, 59, 211, 37, 76, 97, 63, 188, 168, 187, 252, 174, 75, 103,
+            28, 207, 172, 19, 47, 89, 231, 179, 10, 117, 142, 240, 27,
+        ],
+        [
+            37, 124, 164, 233, 8, 135, 109, 1, 136, 169, 167, 146, 195, 44, 71, 214, 193, 210, 10,
+            250, 119, 80, 176, 97, 1, 122, 97, 4, 251, 47, 251, 14,
+        ],
+        [
+            189, 244, 239, 17, 181, 148, 184, 159, 229, 49, 128, 129, 26, 100, 215, 116, 27, 55,
+            169, 152, 190, 16, 82, 32, 145, 95, 121, 181, 178, 107, 32, 38,
+        ],
+        [
+            208, 57, 233, 100, 166, 183, 132, 121, 242, 57, 169, 22, 247, 39, 94, 133, 137, 112,
+            113, 87, 193, 38, 162, 181, 160, 250, 164, 231, 50, 189, 83, 18,
+        ],
+        [
+            89, 30, 89, 240, 145, 188, 55, 190, 206, 229, 82, 37, 221, 78, 109, 41, 114, 35, 237,
+            224, 11, 114, 82, 220, 237, 91, 24, 25, 209, 240, 157, 54,
+        ],
+        [
+            53, 11, 143, 37, 127, 190, 2, 16, 220, 176, 53, 153, 217, 128, 213, 211, 52, 117, 20,
+            40, 23, 78, 48, 220, 36, 118, 56, 67, 198, 220, 105, 61,
+        ],
+        [
+            130, 17, 90, 245, 190, 206, 74, 238, 215, 29, 201, 98, 113, 136, 240, 128, 69, 26, 86,
+            198, 78, 240, 146, 69, 242, 168, 245, 180, 73, 231, 119, 3,
+        ],
+        [
+            117, 183, 82, 52, 195, 130, 3, 41, 1, 9, 249, 106, 246, 164, 128, 188, 215, 143, 162,
+            187, 35, 36, 150, 143, 43, 50, 156, 147, 232, 175, 97, 49,
+        ],
+    ],
+    [
+        [
+            38, 224, 69, 88, 100, 38, 34, 196, 95, 198, 226, 152, 100, 82, 198, 120, 108, 7, 59,
+            14, 129, 184, 42, 54, 141, 209, 250, 70, 224, 158, 238, 62,
+        ],
+        [
+            39, 179, 16, 131, 80, 58, 46, 177, 58, 161, 92, 239, 226, 252, 174, 213, 245, 185, 34,
+            111, 151, 92, 102, 16, 136, 219, 119, 113, 139, 136, 34, 3,
+        ],
+        [
+            150, 71, 69, 203, 65, 36, 72, 94, 92, 38, 188, 129, 142, 8, 151, 232, 181, 160, 72,
+            169, 34, 41, 159, 165, 68, 204, 138, 253, 86, 27, 121, 25,
+        ],
+        [
+            39, 162, 63, 3, 162, 220, 95, 191, 231, 84, 23, 145, 162, 179, 153, 113, 214, 161, 86,
+            3, 160, 28, 114, 83, 175, 233, 79, 73, 219, 69, 177, 9,
+        ],
+        [
+            137, 4, 29, 218, 129, 49, 228, 150, 66, 226, 72, 29, 194, 103, 28, 253, 238, 18, 6, 77,
+            175, 84, 92, 130, 186, 220, 67, 10, 191, 26, 234, 28,
+        ],
+        [
+            84, 223, 200, 75, 221, 183, 164, 115, 0, 67, 189, 87, 45, 218, 79, 28, 148, 155, 97,
+            88, 245, 71, 78, 252, 147, 23, 126, 73, 127, 176, 246, 40,
+        ],
+        [
+            179, 241, 1, 84, 103, 179, 254, 187, 112, 110, 174, 233, 19, 158, 3, 90, 250, 147, 45,
+            63, 243, 166, 155, 159, 8, 234, 67, 205, 55, 245, 253, 14,
+        ],
+        [
+            226, 134, 21, 50, 73, 160, 26, 45, 255, 234, 88, 153, 31, 125, 250, 213, 120, 231, 112,
+            91, 28, 234, 92, 44, 231, 118, 31, 130, 206, 179, 242, 8,
+        ],
+    ],
+    [
+        [
+            167, 13, 48, 42, 131, 107, 78, 98, 138, 196, 106, 57, 105, 59, 218, 50, 239, 183, 45,
+            39, 30, 212, 206, 92, 65, 91, 170, 52, 34, 57, 174, 11,
+        ],
+        [
+            217, 73, 127, 55, 81, 100, 78, 66, 157, 217, 177, 137, 100, 148, 138, 154, 9, 201, 139,
+            236, 209, 100, 133, 99, 114, 87, 106, 9, 109, 201, 195, 11,
+        ],
+        [
+            94, 10, 206, 24, 189, 217, 152, 247, 221, 25, 15, 16, 3, 132, 132, 84, 101, 19, 137,
+            74, 224, 150, 101, 239, 114, 174, 156, 74, 119, 58, 68, 13,
+        ],
+        [
+            23, 77, 197, 220, 177, 194, 206, 23, 139, 196, 0, 238, 80, 128, 118, 20, 243, 149, 74,
+            32, 204, 153, 72, 26, 160, 54, 66, 168, 143, 169, 204, 51,
+        ],
+        [
+            40, 217, 104, 147, 156, 74, 178, 30, 32, 214, 13, 145, 178, 253, 53, 41, 125, 142, 47,
+            40, 15, 49, 207, 85, 55, 217, 159, 250, 157, 91, 55, 55,
+        ],
+        [
+            40, 244, 153, 231, 80, 142, 238, 13, 177, 131, 169, 177, 186, 16, 151, 255, 8, 111, 47,
+            152, 52, 15, 83, 240, 84, 197, 239, 128, 202, 202, 76, 30,
+        ],
+        [
+            250, 60, 71, 175, 180, 159, 32, 159, 225, 187, 30, 160, 169, 116, 171, 153, 23, 152,
+            172, 89, 254, 12, 18, 217, 158, 115, 139, 123, 180, 230, 119, 58,
+        ],
+        [
+            208, 102, 76, 132, 87, 190, 6, 202, 244, 78, 197, 130, 183, 148, 55, 26, 61, 211, 35,
+            148, 181, 36, 158, 12, 157, 120, 21, 100, 45, 85, 114, 5,
+        ],
+    ],
+    [
+        [
+            154, 225, 115, 161, 18, 54, 207, 2, 188, 4, 87, 220, 139, 224, 192, 9, 203, 28, 219,
+            127, 130, 225, 41, 129, 213, 5, 243, 222, 219, 195, 53, 54,
+        ],
+        [
+            112, 249, 215, 104, 105, 10, 110, 38, 76, 233, 154, 73, 92, 73, 120, 254, 31, 78, 198,
+            139, 142, 165, 130, 70, 118, 175, 226, 90, 139, 203, 142, 30,
+        ],
+        [
+            98, 135, 112, 214, 115, 38, 47, 143, 75, 8, 199, 93, 243, 142, 80, 205, 242, 230, 144,
+            69, 57, 131, 221, 123, 154, 254, 70, 177, 38, 5, 179, 55,
+        ],
+        [
+            172, 90, 158, 114, 79, 59, 0, 48, 148, 66, 138, 218, 129, 224, 130, 181, 91, 214, 102,
+            138, 186, 20, 248, 111, 189, 6, 113, 155, 152, 70, 184, 53,
+        ],
+        [
+            93, 132, 123, 157, 80, 196, 33, 122, 74, 252, 53, 16, 109, 153, 14, 47, 185, 36, 0,
+            205, 112, 169, 47, 118, 85, 10, 88, 148, 215, 102, 50, 49,
+        ],
+        [
+            227, 29, 11, 192, 11, 129, 121, 0, 224, 246, 251, 181, 43, 252, 124, 103, 158, 178,
+            116, 105, 135, 194, 215, 0, 74, 24, 4, 103, 198, 99, 92, 62,
+        ],
+        [
+            215, 88, 93, 169, 126, 62, 12, 33, 41, 174, 153, 42, 94, 183, 54, 237, 185, 27, 82,
+            137, 5, 203, 193, 5, 43, 214, 218, 227, 158, 86, 67, 11,
+        ],
+        [
+            204, 198, 113, 206, 88, 212, 218, 203, 76, 170, 88, 64, 85, 144, 199, 183, 19, 103,
+            204, 12, 154, 29, 84, 152, 96, 147, 233, 62, 34, 37, 252, 19,
+        ],
+    ],
+    [
+        [
+            22, 87, 1, 109, 71, 145, 157, 11, 187, 118, 148, 132, 206, 10, 133, 13, 217, 56, 66,
+            83, 203, 55, 30, 139, 161, 158, 238, 242, 100, 169, 53, 2,
+        ],
+        [
+            71, 213, 215, 26, 60, 9, 211, 106, 70, 217, 178, 104, 196, 36, 165, 198, 160, 50, 164,
+            0, 229, 135, 70, 162, 214, 3, 75, 70, 207, 163, 75, 56,
+        ],
+        [
+            221, 79, 237, 22, 189, 144, 124, 70, 190, 2, 159, 160, 123, 87, 13, 127, 179, 26, 237,
+            107, 37, 252, 71, 33, 180, 38, 63, 45, 24, 235, 161, 20,
+        ],
+        [
+            187, 190, 72, 212, 201, 195, 98, 232, 141, 33, 40, 137, 167, 195, 147, 44, 89, 98, 212,
+            216, 94, 167, 189, 122, 222, 141, 116, 37, 88, 168, 103, 17,
+        ],
+        [
+            239, 90, 233, 200, 169, 16, 109, 99, 224, 159, 160, 124, 212, 51, 244, 255, 153, 179,
+            203, 234, 125, 186, 86, 67, 157, 144, 19, 254, 145, 81, 67, 37,
+        ],
+        [
+            43, 152, 102, 183, 158, 246, 197, 209, 214, 63, 126, 228, 123, 198, 231, 33, 187, 146,
+            175, 159, 120, 2, 176, 113, 101, 202, 195, 61, 128, 217, 57, 41,
+        ],
+        [
+            34, 53, 55, 23, 239, 129, 15, 228, 220, 113, 238, 34, 251, 139, 231, 49, 202, 252, 146,
+            71, 231, 123, 197, 152, 214, 254, 26, 213, 42, 141, 44, 59,
+        ],
+        [
+            14, 199, 227, 234, 179, 149, 80, 241, 36, 197, 33, 50, 41, 101, 228, 198, 1, 235, 176,
+            65, 116, 150, 209, 35, 170, 142, 31, 4, 168, 133, 28, 25,
+        ],
+    ],
+    [
+        [
+            227, 69, 192, 97, 61, 2, 159, 47, 31, 246, 219, 46, 10, 9, 197, 91, 223, 218, 48, 88,
+            68, 196, 183, 101, 146, 42, 88, 243, 6, 163, 85, 24,
+        ],
+        [
+            133, 181, 41, 19, 10, 65, 213, 69, 31, 230, 153, 104, 99, 35, 68, 61, 213, 42, 252,
+            215, 14, 69, 37, 225, 58, 113, 145, 234, 102, 36, 26, 61,
+        ],
+        [
+            36, 174, 201, 204, 110, 25, 137, 23, 88, 63, 173, 206, 140, 217, 221, 34, 191, 239,
+            200, 133, 87, 234, 201, 114, 100, 21, 214, 213, 227, 116, 87, 43,
+        ],
+        [
+            33, 254, 187, 9, 6, 142, 196, 236, 174, 73, 115, 38, 11, 202, 94, 21, 232, 88, 10, 16,
+            86, 137, 2, 114, 74, 232, 75, 217, 55, 154, 163, 36,
+        ],
+        [
+            61, 43, 128, 223, 251, 52, 151, 169, 224, 228, 34, 213, 36, 60, 191, 138, 119, 196,
+            244, 87, 107, 167, 139, 227, 227, 36, 95, 70, 145, 206, 23, 59,
+        ],
+        [
+            149, 239, 176, 117, 82, 16, 109, 249, 224, 163, 81, 48, 91, 82, 238, 212, 205, 250,
+            105, 102, 169, 8, 45, 218, 154, 106, 204, 233, 104, 179, 21, 47,
+        ],
+        [
+            136, 82, 212, 89, 173, 244, 117, 33, 77, 197, 211, 141, 19, 126, 62, 14, 18, 88, 118,
+            61, 46, 233, 207, 23, 181, 122, 253, 31, 223, 68, 115, 44,
+        ],
+        [
+            230, 82, 213, 56, 121, 61, 11, 146, 68, 52, 147, 115, 18, 230, 149, 148, 48, 88, 173,
+            238, 218, 98, 191, 129, 200, 222, 212, 245, 210, 215, 171, 28,
+        ],
+    ],
+    [
+        [
+            191, 225, 193, 65, 70, 115, 255, 253, 40, 60, 196, 222, 142, 70, 14, 97, 163, 100, 23,
+            145, 35, 160, 154, 227, 141, 93, 182, 222, 47, 174, 56, 40,
+        ],
+        [
+            197, 21, 27, 76, 137, 232, 211, 79, 171, 229, 90, 184, 215, 43, 72, 109, 244, 111, 249,
+            227, 72, 76, 67, 98, 93, 71, 22, 15, 118, 88, 255, 26,
+        ],
+        [
+            171, 251, 162, 17, 102, 160, 158, 12, 84, 9, 1, 167, 213, 63, 157, 165, 63, 95, 171,
+            233, 58, 186, 255, 70, 112, 8, 197, 221, 248, 175, 3, 11,
+        ],
+        [
+            211, 3, 175, 11, 139, 74, 240, 174, 110, 157, 211, 68, 153, 75, 254, 118, 192, 108,
+            206, 103, 55, 115, 235, 149, 79, 220, 166, 192, 115, 153, 230, 48,
+        ],
+        [
+            27, 45, 52, 129, 100, 72, 202, 230, 149, 80, 18, 81, 42, 120, 156, 241, 218, 16, 49,
+            65, 215, 124, 129, 56, 207, 166, 117, 199, 29, 53, 222, 26,
+        ],
+        [
+            76, 70, 58, 161, 96, 99, 111, 185, 67, 54, 34, 220, 49, 46, 125, 120, 115, 149, 96,
+            111, 185, 212, 0, 186, 22, 117, 140, 245, 135, 179, 42, 19,
+        ],
+        [
+            66, 230, 5, 90, 123, 140, 234, 5, 139, 250, 44, 103, 84, 127, 174, 178, 194, 65, 195,
+            50, 213, 77, 153, 212, 244, 209, 216, 149, 55, 234, 135, 6,
+        ],
+        [
+            254, 64, 206, 41, 117, 44, 153, 71, 0, 204, 67, 65, 231, 116, 35, 8, 99, 69, 207, 34,
+            15, 233, 184, 86, 39, 186, 205, 238, 233, 245, 250, 44,
+        ],
+    ],
+    [
+        [
+            199, 157, 28, 88, 230, 49, 91, 18, 24, 87, 45, 179, 63, 135, 122, 54, 172, 223, 233,
+            189, 237, 197, 203, 20, 126, 47, 99, 38, 69, 226, 255, 14,
+        ],
+        [
+            166, 224, 94, 181, 103, 110, 4, 185, 117, 168, 188, 254, 60, 122, 232, 159, 147, 129,
+            120, 140, 200, 103, 249, 27, 133, 22, 186, 19, 170, 127, 231, 35,
+        ],
+        [
+            148, 181, 107, 54, 45, 247, 223, 58, 41, 106, 43, 34, 157, 54, 190, 18, 237, 98, 10,
+            159, 193, 210, 95, 129, 44, 182, 121, 37, 250, 123, 200, 56,
+        ],
+        [
+            165, 157, 120, 229, 210, 117, 15, 122, 29, 182, 94, 216, 135, 219, 142, 206, 235, 38,
+            6, 254, 112, 192, 172, 33, 177, 179, 58, 161, 33, 231, 226, 44,
+        ],
+        [
+            22, 188, 212, 0, 63, 2, 102, 220, 41, 147, 252, 183, 186, 222, 65, 133, 223, 104, 245,
+            251, 67, 50, 241, 141, 16, 153, 53, 36, 223, 92, 56, 33,
+        ],
+        [
+            3, 171, 26, 109, 247, 144, 210, 147, 173, 157, 69, 27, 151, 43, 191, 184, 230, 134,
+            121, 109, 159, 59, 207, 83, 160, 231, 1, 16, 121, 248, 25, 2,
+        ],
+        [
+            187, 76, 191, 137, 218, 205, 64, 191, 85, 92, 226, 13, 159, 50, 44, 20, 106, 248, 106,
+            104, 38, 147, 26, 206, 72, 152, 219, 227, 39, 111, 153, 22,
+        ],
+        [
+            37, 88, 160, 215, 216, 90, 55, 159, 157, 19, 83, 137, 20, 17, 97, 87, 108, 194, 57,
+            124, 237, 155, 251, 143, 155, 24, 194, 250, 107, 157, 108, 6,
+        ],
+    ],
+    [
+        [
+            179, 238, 187, 220, 201, 52, 151, 82, 231, 246, 234, 157, 60, 224, 148, 107, 52, 158,
+            184, 135, 41, 91, 13, 157, 216, 87, 79, 70, 110, 154, 19, 9,
+        ],
+        [
+            79, 134, 215, 209, 161, 228, 162, 74, 17, 227, 169, 26, 65, 40, 189, 70, 253, 44, 93,
+            128, 39, 142, 12, 97, 154, 111, 201, 52, 11, 129, 200, 9,
+        ],
+        [
+            73, 100, 11, 140, 141, 41, 181, 27, 253, 130, 136, 154, 107, 9, 135, 217, 16, 152, 64,
+            77, 175, 250, 164, 120, 110, 201, 44, 94, 10, 74, 233, 42,
+        ],
+        [
+            9, 25, 17, 237, 209, 6, 7, 44, 161, 60, 19, 113, 80, 235, 188, 115, 251, 74, 128, 65,
+            255, 21, 126, 249, 164, 59, 22, 226, 177, 71, 22, 24,
+        ],
+        [
+            34, 100, 239, 148, 80, 7, 119, 217, 234, 64, 187, 147, 240, 200, 246, 154, 249, 100,
+            209, 249, 185, 119, 23, 202, 156, 219, 19, 22, 127, 127, 212, 25,
+        ],
+        [
+            239, 117, 59, 251, 76, 110, 242, 157, 3, 197, 97, 180, 211, 12, 224, 189, 252, 196,
+            171, 31, 104, 172, 244, 239, 53, 75, 208, 126, 41, 144, 59, 49,
+        ],
+        [
+            29, 222, 224, 229, 25, 2, 93, 176, 51, 17, 100, 137, 64, 86, 76, 200, 138, 21, 29, 217,
+            63, 159, 144, 129, 8, 201, 76, 236, 91, 62, 67, 50,
+        ],
+        [
+            24, 21, 241, 5, 210, 159, 87, 84, 200, 22, 175, 154, 87, 212, 37, 148, 23, 160, 175,
+            200, 118, 117, 174, 229, 11, 130, 157, 255, 26, 52, 11, 8,
+        ],
+    ],
+    [
+        [
+            252, 153, 100, 93, 87, 56, 92, 116, 12, 45, 12, 57, 66, 110, 227, 147, 147, 101, 100,
+            0, 10, 181, 178, 164, 21, 13, 180, 13, 89, 248, 205, 7,
+        ],
+        [
+            86, 69, 138, 31, 50, 117, 37, 245, 147, 126, 71, 200, 159, 103, 75, 102, 204, 178, 135,
+            180, 3, 63, 115, 110, 254, 22, 32, 8, 50, 111, 104, 22,
+        ],
+        [
+            66, 78, 49, 221, 153, 235, 211, 155, 58, 202, 119, 231, 206, 30, 248, 215, 223, 171,
+            150, 81, 46, 255, 66, 79, 74, 248, 252, 151, 251, 131, 160, 7,
+        ],
+        [
+            153, 143, 67, 122, 83, 102, 174, 152, 47, 152, 114, 206, 200, 235, 113, 13, 45, 164,
+            174, 214, 19, 129, 73, 211, 103, 185, 237, 210, 68, 157, 11, 24,
+        ],
+        [
+            83, 217, 27, 197, 244, 71, 107, 145, 132, 40, 44, 124, 230, 82, 21, 131, 249, 225, 116,
+            102, 163, 121, 50, 142, 20, 27, 72, 67, 183, 28, 169, 46,
+        ],
+        [
+            56, 15, 117, 133, 19, 226, 237, 94, 34, 153, 237, 147, 143, 59, 163, 126, 83, 107, 102,
+            25, 204, 62, 208, 59, 218, 48, 126, 107, 79, 164, 3, 3,
+        ],
+        [
+            127, 209, 7, 206, 197, 21, 110, 43, 111, 178, 96, 254, 183, 112, 65, 204, 159, 42, 129,
+            127, 147, 172, 175, 22, 114, 1, 144, 109, 70, 51, 246, 28,
+        ],
+        [
+            126, 247, 38, 212, 155, 106, 76, 120, 152, 196, 61, 109, 174, 141, 172, 42, 144, 51,
+            35, 254, 134, 214, 219, 152, 80, 109, 121, 166, 91, 226, 119, 18,
+        ],
+    ],
+    [
+        [
+            131, 89, 210, 253, 224, 36, 151, 136, 156, 86, 88, 23, 205, 83, 177, 59, 106, 12, 16,
+            233, 183, 197, 90, 203, 29, 196, 1, 237, 224, 223, 99, 15,
+        ],
+        [
+            224, 204, 224, 17, 99, 37, 205, 45, 255, 41, 69, 6, 204, 226, 63, 14, 180, 116, 248,
+            184, 82, 55, 19, 160, 151, 69, 187, 35, 87, 120, 132, 15,
+        ],
+        [
+            125, 177, 114, 23, 209, 68, 219, 141, 142, 186, 25, 218, 57, 226, 190, 210, 45, 94,
+            196, 39, 20, 233, 122, 93, 225, 23, 220, 158, 192, 78, 152, 24,
+        ],
+        [
+            57, 56, 40, 61, 97, 131, 104, 4, 240, 109, 227, 75, 152, 44, 242, 243, 188, 45, 229,
+            118, 46, 27, 180, 167, 240, 224, 124, 15, 143, 50, 225, 6,
+        ],
+        [
+            53, 16, 46, 178, 58, 24, 197, 247, 42, 220, 177, 47, 133, 95, 81, 61, 134, 28, 220,
+            184, 45, 12, 121, 18, 174, 234, 250, 124, 46, 190, 104, 19,
+        ],
+        [
+            38, 156, 61, 146, 163, 231, 91, 107, 19, 123, 200, 192, 85, 173, 156, 34, 44, 66, 161,
+            83, 221, 166, 70, 51, 85, 232, 243, 252, 162, 18, 15, 56,
+        ],
+        [
+            123, 18, 87, 200, 196, 100, 121, 223, 151, 195, 24, 144, 131, 124, 56, 229, 199, 83,
+            183, 137, 62, 154, 247, 40, 76, 135, 146, 9, 103, 5, 68, 33,
+        ],
+        [
+            184, 165, 230, 0, 109, 19, 115, 70, 25, 102, 2, 138, 190, 210, 62, 196, 27, 76, 57, 31,
+            127, 78, 172, 163, 114, 236, 24, 224, 54, 31, 4, 45,
+        ],
+    ],
+    [
+        [
+            138, 133, 77, 92, 247, 250, 141, 156, 66, 158, 130, 208, 243, 85, 97, 12, 47, 187, 101,
+            220, 195, 14, 119, 254, 22, 0, 119, 0, 247, 177, 238, 18,
+        ],
+        [
+            202, 128, 126, 221, 182, 213, 55, 69, 34, 2, 42, 251, 22, 177, 35, 130, 132, 199, 33,
+            5, 210, 99, 140, 214, 159, 25, 136, 202, 160, 255, 153, 29,
+        ],
+        [
+            8, 156, 183, 206, 52, 122, 127, 243, 45, 216, 68, 38, 215, 206, 139, 166, 196, 43, 58,
+            250, 200, 141, 58, 74, 28, 236, 244, 39, 167, 34, 55, 26,
+        ],
+        [
+            174, 91, 180, 80, 186, 115, 38, 145, 115, 89, 5, 138, 189, 53, 49, 203, 52, 86, 205,
+            123, 164, 146, 169, 110, 119, 202, 249, 86, 19, 179, 89, 60,
+        ],
+        [
+            135, 230, 4, 37, 38, 213, 28, 78, 101, 215, 177, 207, 184, 98, 242, 130, 215, 189, 209,
+            198, 171, 165, 39, 79, 18, 196, 43, 75, 85, 32, 191, 46,
+        ],
+        [
+            121, 226, 59, 93, 13, 120, 205, 138, 103, 215, 23, 193, 170, 191, 103, 45, 154, 1, 76,
+            213, 25, 118, 23, 228, 233, 180, 229, 181, 61, 104, 52, 14,
+        ],
+        [
+            4, 161, 12, 147, 13, 60, 20, 82, 53, 224, 72, 90, 102, 123, 77, 85, 31, 11, 131, 50,
+            41, 88, 50, 22, 149, 35, 29, 142, 247, 84, 135, 16,
+        ],
+        [
+            196, 43, 149, 199, 167, 192, 232, 239, 9, 9, 110, 4, 148, 64, 58, 97, 207, 253, 80,
+            247, 228, 179, 121, 4, 183, 162, 169, 120, 200, 254, 109, 35,
+        ],
+    ],
+    [
+        [
+            217, 164, 120, 31, 248, 243, 75, 91, 94, 55, 138, 226, 220, 92, 79, 18, 59, 193, 156,
+            126, 26, 222, 103, 8, 250, 221, 211, 68, 177, 71, 133, 11,
+        ],
+        [
+            34, 78, 160, 92, 3, 181, 43, 166, 227, 79, 153, 125, 39, 253, 0, 135, 22, 125, 102,
+            161, 212, 195, 132, 46, 25, 132, 4, 234, 198, 43, 85, 49,
+        ],
+        [
+            133, 39, 163, 244, 250, 113, 200, 90, 202, 172, 126, 52, 182, 135, 223, 43, 6, 214,
+            135, 140, 239, 172, 1, 36, 37, 93, 212, 96, 74, 51, 189, 10,
+        ],
+        [
+            126, 177, 236, 150, 50, 183, 198, 85, 154, 215, 89, 75, 4, 57, 211, 33, 179, 220, 253,
+            182, 13, 65, 218, 80, 132, 54, 222, 214, 52, 39, 198, 7,
+        ],
+        [
+            133, 246, 57, 187, 96, 68, 33, 138, 75, 185, 97, 210, 2, 89, 238, 63, 73, 39, 51, 58,
+            242, 125, 16, 9, 91, 94, 243, 69, 35, 42, 136, 9,
+        ],
+        [
+            149, 191, 120, 245, 46, 159, 66, 53, 67, 200, 107, 196, 86, 191, 234, 195, 140, 23,
+            152, 5, 213, 125, 61, 250, 113, 227, 62, 153, 193, 198, 62, 23,
+        ],
+        [
+            181, 92, 7, 115, 101, 203, 87, 170, 108, 11, 133, 229, 209, 88, 235, 9, 211, 0, 34,
+            128, 143, 32, 158, 16, 55, 100, 222, 242, 247, 39, 217, 41,
+        ],
+        [
+            176, 9, 186, 146, 2, 201, 229, 116, 61, 190, 159, 129, 11, 22, 215, 50, 181, 105, 128,
+            91, 161, 104, 19, 214, 144, 254, 225, 169, 186, 237, 100, 32,
+        ],
+    ],
+    [
+        [
+            40, 7, 199, 148, 140, 28, 231, 90, 252, 187, 127, 106, 225, 109, 28, 74, 174, 202, 162,
+            233, 111, 25, 39, 121, 86, 188, 166, 60, 26, 192, 125, 23,
+        ],
+        [
+            29, 191, 141, 163, 214, 37, 63, 14, 117, 75, 249, 36, 245, 31, 107, 34, 130, 14, 5,
+            129, 145, 43, 255, 54, 59, 211, 77, 194, 248, 213, 122, 10,
+        ],
+        [
+            90, 72, 79, 149, 87, 28, 38, 255, 171, 49, 255, 93, 202, 66, 30, 225, 2, 33, 50, 59,
+            167, 22, 89, 84, 195, 250, 231, 41, 48, 59, 54, 54,
+        ],
+        [
+            52, 242, 43, 225, 153, 145, 156, 46, 4, 211, 112, 65, 19, 141, 52, 99, 139, 149, 190,
+            143, 143, 57, 228, 85, 0, 67, 199, 163, 60, 171, 182, 2,
+        ],
+        [
+            6, 134, 104, 87, 111, 169, 74, 7, 110, 63, 55, 7, 135, 154, 171, 179, 33, 64, 254, 160,
+            90, 79, 218, 218, 147, 45, 244, 115, 21, 71, 63, 54,
+        ],
+        [
+            182, 244, 16, 171, 5, 16, 178, 183, 14, 152, 205, 29, 128, 93, 92, 17, 206, 47, 111,
+            155, 27, 164, 23, 21, 13, 125, 119, 240, 170, 148, 16, 53,
+        ],
+        [
+            78, 4, 253, 34, 167, 129, 30, 5, 1, 146, 243, 55, 152, 9, 74, 73, 26, 199, 175, 138,
+            162, 181, 235, 238, 158, 40, 157, 162, 8, 163, 63, 29,
+        ],
+        [
+            159, 213, 249, 32, 115, 186, 250, 55, 240, 55, 181, 229, 106, 166, 99, 149, 114, 141,
+            239, 154, 192, 4, 127, 64, 247, 172, 240, 23, 243, 109, 102, 16,
+        ],
+    ],
+    [
+        [
+            208, 62, 192, 255, 179, 46, 237, 29, 32, 212, 88, 59, 32, 109, 116, 45, 150, 40, 251,
+            132, 136, 88, 63, 10, 111, 34, 102, 42, 7, 106, 48, 30,
+        ],
+        [
+            235, 194, 35, 149, 132, 244, 37, 88, 78, 71, 224, 63, 246, 169, 172, 201, 131, 7, 57,
+            88, 91, 199, 146, 170, 188, 167, 141, 1, 40, 121, 209, 61,
+        ],
+        [
+            50, 65, 193, 19, 111, 120, 148, 118, 147, 240, 246, 104, 72, 174, 113, 54, 201, 144,
+            17, 98, 92, 11, 113, 250, 183, 114, 0, 74, 134, 20, 217, 47,
+        ],
+        [
+            87, 190, 24, 114, 241, 193, 159, 122, 102, 3, 11, 48, 61, 248, 75, 21, 92, 19, 224,
+            163, 186, 64, 204, 3, 37, 86, 103, 31, 53, 49, 204, 62,
+        ],
+        [
+            137, 116, 208, 75, 219, 108, 60, 61, 85, 214, 112, 149, 190, 75, 153, 174, 134, 62,
+            187, 183, 63, 151, 51, 41, 250, 231, 194, 99, 131, 71, 91, 57,
+        ],
+        [
+            214, 76, 152, 156, 14, 135, 169, 54, 244, 66, 31, 124, 203, 249, 203, 238, 149, 193,
+            165, 38, 141, 78, 15, 161, 59, 180, 218, 91, 96, 75, 3, 42,
+        ],
+        [
+            9, 219, 89, 115, 107, 140, 184, 162, 172, 175, 14, 145, 179, 159, 157, 5, 36, 112, 255,
+            25, 134, 192, 252, 32, 94, 23, 81, 146, 187, 238, 88, 59,
+        ],
+        [
+            226, 191, 50, 112, 133, 132, 199, 142, 252, 89, 92, 227, 45, 129, 181, 217, 107, 158,
+            105, 62, 76, 104, 15, 6, 219, 239, 88, 28, 104, 248, 0, 39,
+        ],
+    ],
+    [
+        [
+            135, 78, 215, 34, 105, 20, 88, 1, 116, 251, 173, 74, 81, 101, 102, 140, 171, 42, 13,
+            54, 241, 73, 104, 41, 94, 167, 87, 232, 13, 15, 171, 6,
+        ],
+        [
+            18, 88, 231, 231, 168, 128, 81, 148, 23, 38, 172, 207, 34, 73, 241, 215, 221, 119, 64,
+            126, 107, 176, 138, 251, 112, 72, 252, 250, 245, 48, 36, 32,
+        ],
+        [
+            20, 44, 38, 7, 55, 71, 118, 91, 105, 195, 150, 14, 32, 211, 187, 89, 108, 224, 153,
+            109, 204, 72, 160, 152, 23, 199, 155, 84, 53, 183, 30, 17,
+        ],
+        [
+            244, 232, 165, 147, 219, 157, 69, 181, 173, 36, 94, 183, 49, 16, 68, 180, 203, 232,
+            159, 198, 107, 174, 162, 163, 135, 203, 109, 106, 71, 28, 132, 54,
+        ],
+        [
+            128, 32, 218, 132, 20, 69, 199, 166, 54, 131, 78, 244, 246, 161, 200, 50, 62, 90, 228,
+            51, 26, 1, 225, 211, 41, 51, 115, 34, 4, 184, 7, 29,
+        ],
+        [
+            77, 46, 225, 194, 127, 232, 30, 240, 158, 194, 26, 28, 221, 172, 60, 118, 248, 174,
+            218, 183, 52, 107, 113, 40, 234, 106, 137, 58, 251, 190, 14, 47,
+        ],
+        [
+            84, 208, 14, 230, 33, 132, 17, 151, 159, 240, 47, 66, 226, 210, 183, 101, 220, 32, 19,
+            175, 47, 156, 100, 55, 2, 45, 224, 187, 154, 232, 63, 45,
+        ],
+        [
+            38, 3, 199, 23, 232, 121, 90, 88, 192, 71, 149, 125, 160, 140, 92, 248, 244, 52, 250,
+            237, 159, 240, 87, 131, 206, 103, 57, 231, 240, 126, 44, 8,
+        ],
+    ],
+    [
+        [
+            121, 185, 230, 118, 95, 189, 254, 13, 234, 203, 79, 140, 250, 63, 61, 205, 108, 239,
+            89, 178, 242, 36, 237, 131, 191, 178, 198, 57, 106, 146, 208, 2,
+        ],
+        [
+            254, 175, 112, 227, 155, 33, 74, 141, 22, 57, 159, 5, 129, 57, 239, 27, 96, 22, 86, 8,
+            223, 241, 173, 226, 171, 232, 32, 45, 158, 169, 2, 25,
+        ],
+        [
+            21, 46, 93, 77, 133, 253, 127, 147, 1, 240, 85, 211, 36, 215, 94, 13, 26, 253, 25, 72,
+            67, 90, 229, 7, 174, 236, 233, 250, 65, 217, 124, 51,
+        ],
+        [
+            213, 61, 22, 32, 180, 27, 96, 10, 216, 12, 135, 161, 36, 223, 176, 137, 197, 99, 83,
+            215, 58, 242, 191, 192, 84, 236, 195, 12, 141, 45, 215, 23,
+        ],
+        [
+            147, 199, 116, 205, 253, 64, 71, 177, 48, 220, 174, 145, 113, 191, 60, 31, 60, 171, 79,
+            86, 141, 122, 89, 188, 252, 100, 42, 127, 193, 98, 172, 43,
+        ],
+        [
+            83, 40, 233, 182, 200, 135, 94, 11, 109, 77, 241, 71, 248, 64, 10, 227, 84, 146, 205,
+            168, 77, 57, 138, 34, 128, 201, 16, 115, 35, 244, 147, 0,
+        ],
+        [
+            8, 124, 97, 197, 83, 77, 42, 95, 91, 69, 173, 108, 237, 215, 44, 211, 28, 202, 237, 0,
+            22, 248, 104, 213, 146, 245, 52, 221, 218, 26, 160, 62,
+        ],
+        [
+            46, 200, 28, 76, 156, 255, 239, 240, 233, 131, 252, 96, 12, 144, 56, 163, 52, 116, 162,
+            59, 149, 1, 133, 107, 190, 132, 233, 235, 230, 244, 231, 49,
+        ],
+    ],
+    [
+        [
+            131, 244, 147, 237, 104, 133, 117, 169, 82, 239, 134, 219, 21, 106, 10, 250, 191, 18,
+            211, 97, 10, 161, 87, 187, 16, 85, 107, 192, 9, 17, 208, 44,
+        ],
+        [
+            129, 156, 210, 98, 148, 44, 136, 246, 152, 130, 74, 18, 3, 30, 242, 12, 155, 8, 49,
+            245, 49, 215, 93, 167, 0, 8, 213, 68, 9, 38, 113, 53,
+        ],
+        [
+            114, 214, 69, 108, 113, 73, 81, 37, 251, 91, 43, 99, 248, 39, 99, 40, 85, 223, 101, 78,
+            243, 170, 160, 149, 155, 104, 14, 78, 97, 248, 37, 57,
+        ],
+        [
+            77, 232, 118, 221, 50, 130, 124, 90, 91, 140, 68, 158, 193, 229, 180, 176, 151, 167,
+            148, 141, 46, 104, 179, 55, 57, 142, 216, 23, 141, 196, 236, 54,
+        ],
+        [
+            198, 180, 66, 160, 132, 49, 199, 243, 237, 240, 166, 225, 99, 37, 155, 24, 179, 113,
+            199, 80, 80, 132, 32, 52, 251, 211, 162, 116, 170, 203, 81, 42,
+        ],
+        [
+            241, 79, 65, 222, 239, 74, 64, 122, 34, 93, 203, 102, 251, 103, 65, 233, 204, 203, 192,
+            245, 189, 251, 1, 151, 128, 157, 182, 203, 193, 102, 27, 23,
+        ],
+        [
+            60, 20, 8, 87, 8, 19, 211, 166, 63, 239, 146, 164, 49, 67, 11, 133, 95, 9, 182, 199,
+            17, 86, 113, 170, 168, 83, 77, 230, 81, 201, 238, 13,
+        ],
+        [
+            68, 167, 166, 81, 81, 66, 93, 73, 185, 91, 178, 215, 84, 163, 122, 201, 149, 247, 161,
+            87, 127, 103, 79, 29, 14, 199, 44, 247, 33, 123, 183, 38,
+        ],
+    ],
+    [
+        [
+            143, 198, 147, 9, 216, 184, 32, 238, 248, 95, 47, 180, 248, 117, 252, 150, 150, 89,
+            148, 161, 187, 47, 61, 225, 246, 154, 106, 101, 128, 51, 151, 12,
+        ],
+        [
+            38, 250, 166, 101, 235, 31, 63, 68, 193, 170, 168, 34, 52, 63, 97, 98, 214, 229, 31,
+            74, 233, 172, 22, 81, 196, 245, 11, 111, 44, 98, 185, 1,
+        ],
+        [
+            141, 209, 110, 148, 171, 39, 157, 235, 89, 173, 140, 216, 148, 1, 175, 157, 227, 104,
+            210, 112, 66, 160, 156, 124, 27, 102, 120, 142, 149, 110, 148, 12,
+        ],
+        [
+            71, 30, 90, 107, 232, 6, 151, 1, 6, 25, 188, 6, 31, 64, 184, 104, 184, 216, 57, 92,
+            230, 236, 169, 238, 77, 38, 45, 165, 162, 162, 252, 7,
+        ],
+        [
+            136, 10, 204, 99, 83, 109, 73, 101, 61, 41, 237, 197, 0, 232, 185, 168, 79, 128, 191,
+            219, 87, 14, 163, 244, 0, 145, 72, 199, 11, 55, 218, 38,
+        ],
+        [
+            246, 115, 92, 44, 64, 216, 74, 82, 132, 50, 82, 211, 56, 171, 176, 137, 24, 110, 103,
+            158, 46, 158, 151, 154, 132, 254, 220, 180, 5, 120, 72, 10,
+        ],
+        [
+            30, 159, 81, 104, 246, 32, 96, 43, 152, 44, 150, 221, 165, 14, 162, 61, 30, 166, 133,
+            194, 104, 127, 76, 214, 122, 89, 109, 2, 219, 232, 185, 5,
+        ],
+        [
+            138, 10, 208, 162, 118, 236, 11, 68, 180, 213, 38, 108, 145, 79, 115, 185, 231, 51, 84,
+            160, 104, 136, 76, 142, 201, 121, 111, 41, 3, 126, 71, 52,
+        ],
+    ],
+    [
+        [
+            146, 172, 178, 233, 212, 141, 180, 76, 211, 173, 0, 136, 102, 215, 35, 18, 210, 57,
+            230, 203, 52, 90, 73, 253, 90, 56, 84, 206, 187, 227, 139, 51,
+        ],
+        [
+            12, 172, 149, 245, 3, 108, 117, 73, 133, 51, 161, 59, 203, 181, 112, 71, 115, 193, 65,
+            135, 234, 163, 80, 138, 170, 33, 62, 175, 158, 128, 5, 62,
+        ],
+        [
+            133, 76, 138, 32, 247, 244, 21, 235, 18, 19, 89, 83, 65, 116, 151, 3, 0, 132, 125, 21,
+            220, 165, 25, 140, 77, 25, 235, 191, 41, 144, 142, 54,
+        ],
+        [
+            234, 91, 142, 174, 106, 23, 132, 53, 16, 96, 217, 122, 84, 117, 226, 87, 131, 59, 157,
+            78, 201, 217, 103, 134, 14, 141, 193, 42, 17, 135, 118, 3,
+        ],
+        [
+            60, 209, 64, 222, 188, 72, 228, 235, 152, 155, 14, 252, 73, 49, 37, 168, 181, 101, 219,
+            232, 169, 55, 171, 90, 138, 159, 181, 180, 41, 195, 41, 48,
+        ],
+        [
+            153, 0, 87, 75, 203, 95, 71, 181, 161, 183, 42, 85, 14, 77, 220, 46, 138, 157, 229,
+            178, 159, 144, 57, 24, 238, 125, 128, 79, 134, 222, 64, 61,
+        ],
+        [
+            51, 123, 20, 217, 230, 53, 195, 7, 147, 10, 229, 20, 147, 206, 100, 197, 88, 73, 14,
+            211, 138, 72, 211, 100, 184, 62, 149, 254, 53, 140, 211, 38,
+        ],
+        [
+            125, 218, 238, 203, 197, 139, 19, 248, 119, 73, 85, 241, 205, 20, 187, 100, 110, 150,
+            80, 176, 39, 83, 85, 44, 160, 209, 47, 240, 119, 195, 98, 9,
+        ],
+    ],
+    [
+        [
+            225, 193, 188, 61, 63, 105, 192, 160, 101, 114, 91, 50, 187, 102, 91, 202, 144, 99, 48,
+            178, 235, 57, 151, 190, 202, 221, 26, 129, 39, 222, 144, 13,
+        ],
+        [
+            214, 4, 119, 107, 105, 182, 45, 196, 47, 123, 78, 115, 118, 142, 134, 160, 176, 161,
+            175, 251, 249, 25, 123, 177, 39, 236, 198, 98, 166, 14, 35, 47,
+        ],
+        [
+            227, 146, 231, 46, 217, 182, 26, 134, 224, 88, 174, 142, 210, 131, 27, 217, 90, 20,
+            169, 93, 202, 238, 30, 17, 75, 25, 218, 94, 117, 74, 98, 28,
+        ],
+        [
+            211, 62, 181, 29, 241, 231, 74, 132, 58, 71, 13, 180, 216, 120, 215, 208, 191, 166,
+            110, 238, 239, 129, 248, 13, 11, 70, 25, 173, 118, 194, 208, 38,
+        ],
+        [
+            66, 6, 102, 187, 1, 88, 189, 123, 109, 200, 226, 193, 103, 248, 134, 154, 16, 188, 82,
+            145, 255, 211, 203, 237, 25, 60, 201, 58, 159, 125, 47, 51,
+        ],
+        [
+            92, 174, 73, 174, 127, 71, 106, 23, 242, 24, 143, 255, 40, 70, 242, 75, 236, 158, 165,
+            248, 142, 147, 103, 167, 116, 17, 171, 193, 247, 38, 196, 17,
+        ],
+        [
+            195, 200, 231, 140, 158, 101, 132, 162, 20, 214, 89, 132, 144, 2, 45, 206, 161, 228,
+            31, 197, 107, 84, 171, 48, 231, 66, 103, 57, 182, 100, 148, 9,
+        ],
+        [
+            91, 239, 228, 202, 109, 58, 224, 173, 255, 33, 238, 51, 252, 38, 7, 104, 68, 71, 61,
+            50, 61, 234, 52, 125, 225, 246, 120, 198, 204, 251, 42, 21,
+        ],
+    ],
+    [
+        [
+            227, 156, 120, 101, 157, 6, 24, 17, 138, 120, 0, 7, 99, 255, 30, 170, 247, 10, 28, 78,
+            237, 183, 120, 0, 36, 150, 114, 5, 52, 27, 118, 43,
+        ],
+        [
+            89, 179, 59, 45, 37, 224, 161, 148, 170, 242, 21, 93, 17, 112, 56, 87, 146, 224, 32,
+            16, 205, 72, 120, 24, 201, 226, 101, 138, 140, 191, 35, 60,
+        ],
+        [
+            101, 246, 160, 36, 45, 192, 37, 250, 141, 131, 166, 105, 246, 253, 183, 78, 45, 17,
+            224, 198, 219, 4, 184, 41, 159, 25, 227, 42, 184, 110, 168, 47,
+        ],
+        [
+            254, 68, 240, 20, 227, 67, 252, 227, 74, 173, 78, 4, 237, 230, 36, 46, 168, 242, 97,
+            165, 41, 179, 234, 114, 25, 118, 188, 115, 134, 176, 144, 56,
+        ],
+        [
+            136, 19, 168, 231, 61, 23, 128, 30, 218, 186, 214, 182, 64, 202, 240, 242, 242, 27,
+            190, 68, 139, 239, 118, 209, 45, 102, 252, 42, 203, 47, 190, 46,
+        ],
+        [
+            43, 185, 227, 112, 96, 91, 133, 107, 201, 158, 93, 223, 207, 3, 3, 113, 129, 81, 103,
+            112, 200, 142, 133, 213, 205, 249, 61, 35, 223, 149, 94, 46,
+        ],
+        [
+            21, 9, 170, 210, 27, 219, 51, 217, 231, 84, 155, 179, 113, 211, 235, 30, 198, 178, 115,
+            212, 243, 76, 239, 4, 80, 205, 216, 210, 216, 162, 54, 16,
+        ],
+        [
+            241, 46, 223, 153, 180, 201, 195, 235, 159, 17, 89, 184, 132, 27, 147, 66, 9, 118, 156,
+            32, 63, 60, 231, 176, 17, 181, 136, 199, 185, 156, 85, 49,
+        ],
+    ],
+    [
+        [
+            16, 63, 29, 234, 36, 248, 169, 46, 117, 122, 16, 213, 80, 112, 195, 180, 35, 236, 79,
+            11, 161, 39, 231, 149, 76, 182, 68, 223, 211, 132, 105, 60,
+        ],
+        [
+            90, 185, 155, 250, 193, 255, 242, 96, 46, 32, 211, 85, 104, 146, 242, 203, 136, 215,
+            207, 249, 156, 165, 186, 101, 172, 94, 196, 196, 215, 90, 242, 18,
+        ],
+        [
+            197, 35, 232, 78, 110, 178, 187, 0, 86, 140, 77, 150, 2, 34, 10, 28, 36, 222, 5, 126,
+            195, 84, 209, 117, 171, 224, 207, 178, 246, 55, 19, 23,
+        ],
+        [
+            7, 92, 45, 201, 159, 244, 184, 81, 84, 15, 16, 47, 29, 88, 220, 15, 84, 114, 193, 25,
+            178, 137, 226, 153, 49, 173, 132, 75, 132, 245, 35, 46,
+        ],
+        [
+            72, 45, 4, 235, 41, 35, 82, 6, 47, 12, 192, 121, 4, 244, 109, 216, 187, 189, 132, 96,
+            53, 230, 169, 219, 247, 118, 128, 25, 76, 227, 229, 21,
+        ],
+        [
+            11, 120, 128, 125, 181, 136, 90, 219, 125, 105, 13, 176, 160, 59, 54, 96, 25, 244, 122,
+            151, 1, 182, 7, 118, 193, 158, 96, 250, 212, 93, 136, 17,
+        ],
+        [
+            133, 10, 151, 153, 67, 142, 158, 17, 179, 30, 169, 96, 248, 213, 174, 250, 243, 228,
+            222, 11, 57, 109, 208, 34, 21, 91, 222, 40, 95, 116, 158, 42,
+        ],
+        [
+            144, 89, 121, 13, 187, 123, 87, 232, 28, 81, 15, 255, 80, 167, 8, 245, 134, 94, 176,
+            29, 69, 112, 191, 43, 174, 0, 147, 222, 94, 154, 107, 31,
+        ],
+    ],
+    [
+        [
+            30, 133, 165, 235, 190, 92, 40, 23, 196, 48, 17, 234, 31, 38, 10, 244, 66, 89, 244, 71,
+            136, 178, 252, 70, 108, 251, 8, 218, 62, 6, 12, 13,
+        ],
+        [
+            181, 217, 82, 12, 171, 165, 231, 168, 153, 34, 248, 106, 105, 24, 128, 34, 58, 33, 186,
+            213, 180, 153, 142, 141, 191, 219, 10, 88, 38, 80, 62, 2,
+        ],
+        [
+            3, 56, 194, 11, 68, 15, 132, 139, 250, 136, 196, 236, 244, 49, 232, 78, 78, 146, 217,
+            164, 195, 179, 210, 41, 198, 109, 232, 241, 142, 158, 120, 60,
+        ],
+        [
+            253, 122, 255, 208, 56, 178, 103, 118, 227, 193, 99, 164, 224, 85, 254, 159, 53, 45,
+            22, 186, 84, 156, 59, 10, 161, 181, 242, 40, 37, 167, 101, 14,
+        ],
+        [
+            170, 6, 86, 213, 88, 160, 229, 166, 21, 23, 82, 239, 180, 219, 65, 204, 51, 125, 82,
+            37, 217, 255, 248, 143, 97, 148, 22, 63, 59, 77, 172, 52,
+        ],
+        [
+            7, 111, 62, 154, 249, 48, 164, 29, 197, 139, 4, 132, 101, 228, 166, 111, 64, 212, 112,
+            92, 112, 133, 134, 100, 31, 126, 163, 217, 28, 154, 7, 10,
+        ],
+        [
+            16, 149, 13, 107, 255, 13, 114, 211, 25, 178, 249, 249, 126, 248, 167, 165, 239, 25,
+            152, 131, 140, 1, 109, 226, 30, 201, 210, 45, 192, 187, 195, 60,
+        ],
+        [
+            61, 150, 128, 112, 101, 124, 178, 16, 66, 126, 64, 241, 36, 2, 50, 130, 115, 227, 191,
+            51, 67, 137, 99, 202, 20, 115, 217, 8, 39, 161, 233, 10,
+        ],
+    ],
+    [
+        [
+            7, 91, 172, 227, 110, 194, 188, 240, 45, 58, 80, 180, 3, 254, 196, 195, 236, 211, 65,
+            120, 5, 170, 255, 3, 147, 252, 203, 94, 252, 67, 122, 45,
+        ],
+        [
+            101, 45, 123, 17, 211, 232, 240, 59, 210, 231, 30, 102, 247, 0, 185, 30, 255, 221, 153,
+            5, 173, 39, 166, 43, 26, 10, 173, 70, 17, 22, 169, 37,
+        ],
+        [
+            244, 80, 93, 226, 138, 172, 42, 204, 223, 176, 65, 190, 234, 140, 110, 167, 78, 238,
+            121, 100, 83, 24, 22, 229, 43, 230, 35, 182, 193, 93, 241, 13,
+        ],
+        [
+            40, 243, 125, 169, 93, 224, 111, 219, 8, 17, 241, 43, 153, 177, 12, 105, 193, 98, 163,
+            245, 54, 245, 241, 129, 42, 96, 240, 40, 196, 125, 248, 24,
+        ],
+        [
+            222, 158, 22, 92, 0, 102, 141, 6, 180, 153, 231, 232, 45, 5, 103, 172, 163, 27, 143,
+            240, 1, 243, 81, 122, 56, 142, 106, 205, 104, 219, 225, 40,
+        ],
+        [
+            113, 135, 24, 191, 205, 226, 63, 197, 101, 190, 0, 172, 160, 174, 236, 156, 179, 148,
+            128, 21, 127, 99, 19, 124, 27, 134, 120, 87, 48, 237, 244, 8,
+        ],
+        [
+            165, 118, 169, 41, 44, 57, 144, 54, 148, 117, 151, 165, 73, 209, 197, 162, 122, 129,
+            197, 73, 137, 248, 65, 137, 77, 187, 30, 54, 229, 62, 134, 9,
+        ],
+        [
+            235, 36, 130, 170, 81, 34, 149, 86, 235, 75, 240, 162, 216, 136, 174, 84, 169, 62, 208,
+            43, 212, 112, 204, 11, 242, 100, 111, 183, 20, 81, 103, 21,
+        ],
+    ],
+    [
+        [
+            69, 81, 105, 6, 179, 69, 132, 229, 251, 152, 83, 207, 7, 150, 148, 76, 118, 19, 77,
+            127, 197, 153, 52, 135, 5, 173, 199, 50, 172, 148, 240, 6,
+        ],
+        [
+            169, 73, 220, 22, 85, 117, 145, 40, 30, 80, 252, 140, 241, 71, 106, 187, 255, 19, 109,
+            24, 119, 194, 152, 102, 216, 102, 146, 61, 127, 23, 154, 8,
+        ],
+        [
+            67, 230, 84, 76, 200, 132, 151, 89, 246, 255, 51, 98, 217, 150, 32, 12, 179, 115, 164,
+            159, 240, 221, 100, 73, 215, 168, 61, 234, 33, 105, 80, 53,
+        ],
+        [
+            155, 123, 14, 229, 134, 242, 1, 66, 61, 136, 191, 36, 194, 117, 41, 185, 52, 239, 241,
+            89, 111, 60, 84, 126, 97, 45, 52, 194, 115, 90, 244, 41,
+        ],
+        [
+            47, 224, 100, 95, 184, 27, 152, 43, 14, 105, 24, 229, 40, 94, 231, 253, 136, 67, 97,
+            19, 139, 79, 52, 55, 208, 164, 206, 103, 93, 179, 49, 37,
+        ],
+        [
+            137, 28, 107, 166, 19, 3, 10, 137, 179, 248, 144, 129, 62, 138, 174, 40, 237, 112, 154,
+            187, 244, 126, 56, 209, 254, 195, 153, 32, 248, 146, 55, 25,
+        ],
+        [
+            28, 146, 146, 196, 134, 69, 193, 92, 102, 51, 189, 99, 24, 109, 22, 88, 189, 170, 218,
+            201, 146, 81, 245, 19, 95, 168, 181, 193, 4, 35, 77, 13,
+        ],
+        [
+            231, 152, 17, 26, 137, 49, 95, 140, 143, 240, 151, 215, 118, 240, 153, 94, 214, 99, 17,
+            203, 166, 250, 120, 226, 231, 74, 141, 20, 212, 20, 198, 10,
+        ],
+    ],
+    [
+        [
+            201, 36, 247, 251, 228, 99, 121, 198, 220, 187, 83, 50, 200, 54, 242, 88, 65, 214, 227,
+            76, 161, 238, 84, 184, 149, 41, 12, 124, 34, 236, 97, 59,
+        ],
+        [
+            126, 74, 151, 14, 16, 110, 166, 2, 235, 52, 43, 240, 222, 178, 145, 101, 104, 153, 171,
+            153, 93, 82, 21, 76, 37, 55, 5, 176, 118, 67, 19, 27,
+        ],
+        [
+            208, 113, 45, 31, 250, 171, 238, 119, 191, 57, 114, 133, 71, 167, 168, 207, 97, 125,
+            235, 44, 135, 224, 75, 206, 215, 143, 56, 111, 117, 215, 25, 21,
+        ],
+        [
+            247, 158, 25, 107, 7, 121, 254, 119, 228, 136, 246, 2, 15, 160, 69, 180, 190, 134, 179,
+            204, 64, 242, 118, 216, 121, 118, 35, 55, 57, 95, 110, 25,
+        ],
+        [
+            149, 84, 210, 56, 93, 110, 28, 177, 219, 155, 235, 168, 137, 141, 71, 114, 129, 55,
+            141, 177, 20, 180, 47, 26, 123, 157, 159, 133, 225, 81, 103, 47,
+        ],
+        [
+            215, 28, 126, 174, 218, 158, 19, 78, 226, 193, 168, 64, 223, 102, 211, 44, 25, 205, 14,
+            129, 65, 95, 189, 107, 107, 229, 97, 5, 86, 67, 37, 60,
+        ],
+        [
+            23, 91, 47, 107, 133, 237, 134, 217, 123, 232, 136, 140, 222, 76, 114, 80, 248, 160,
+            164, 212, 125, 157, 97, 81, 215, 159, 52, 135, 100, 153, 7, 26,
+        ],
+        [
+            192, 235, 48, 8, 201, 70, 70, 145, 16, 213, 165, 6, 236, 57, 71, 204, 39, 134, 61, 192,
+            139, 24, 175, 21, 108, 244, 90, 67, 206, 102, 17, 20,
+        ],
+    ],
+    [
+        [
+            59, 227, 100, 216, 15, 248, 10, 182, 89, 182, 173, 216, 232, 218, 171, 125, 44, 162,
+            99, 204, 165, 177, 157, 62, 219, 33, 124, 190, 160, 248, 193, 60,
+        ],
+        [
+            138, 137, 214, 237, 224, 227, 132, 212, 18, 215, 128, 173, 12, 134, 162, 2, 89, 17, 69,
+            88, 50, 193, 21, 158, 85, 194, 228, 207, 209, 15, 48, 56,
+        ],
+        [
+            235, 131, 4, 17, 94, 133, 194, 205, 154, 120, 81, 80, 60, 240, 201, 125, 250, 1, 149,
+            179, 58, 228, 68, 71, 224, 15, 212, 181, 170, 9, 135, 47,
+        ],
+        [
+            30, 162, 68, 164, 134, 183, 89, 52, 42, 138, 32, 99, 53, 176, 204, 80, 128, 32, 205,
+            64, 177, 197, 186, 93, 239, 127, 63, 219, 19, 200, 132, 5,
+        ],
+        [
+            255, 30, 56, 241, 97, 130, 220, 188, 77, 45, 179, 149, 97, 23, 65, 112, 235, 24, 127,
+            22, 204, 191, 181, 164, 28, 238, 158, 188, 52, 52, 239, 9,
+        ],
+        [
+            117, 70, 55, 141, 159, 39, 198, 73, 18, 25, 171, 142, 26, 7, 61, 178, 86, 181, 136, 11,
+            80, 110, 226, 235, 152, 116, 119, 80, 9, 77, 171, 1,
+        ],
+        [
+            145, 166, 166, 110, 183, 126, 211, 28, 74, 99, 88, 1, 60, 143, 245, 37, 61, 107, 94,
+            172, 101, 87, 64, 150, 89, 87, 23, 159, 223, 49, 13, 22,
+        ],
+        [
+            102, 212, 116, 255, 19, 29, 250, 185, 75, 229, 219, 55, 220, 164, 195, 61, 45, 46, 245,
+            119, 79, 113, 47, 229, 242, 74, 172, 24, 189, 248, 222, 35,
+        ],
+    ],
+    [
+        [
+            178, 128, 66, 22, 136, 89, 154, 163, 11, 60, 6, 113, 119, 121, 188, 80, 127, 170, 10,
+            61, 221, 229, 163, 217, 4, 206, 79, 88, 105, 222, 53, 9,
+        ],
+        [
+            185, 239, 123, 80, 135, 216, 219, 192, 225, 181, 44, 19, 223, 11, 150, 61, 21, 13, 170,
+            149, 8, 147, 248, 57, 43, 1, 222, 231, 81, 172, 49, 31,
+        ],
+        [
+            88, 32, 154, 70, 204, 46, 188, 217, 185, 179, 122, 163, 239, 139, 136, 119, 231, 117,
+            199, 74, 239, 108, 234, 25, 21, 246, 75, 183, 71, 172, 247, 25,
+        ],
+        [
+            143, 4, 10, 225, 34, 215, 168, 147, 44, 185, 131, 183, 230, 6, 125, 173, 71, 57, 255,
+            57, 45, 203, 159, 231, 97, 15, 80, 248, 189, 162, 230, 32,
+        ],
+        [
+            166, 187, 119, 117, 197, 168, 67, 253, 47, 170, 125, 165, 17, 15, 149, 44, 146, 58,
+            198, 97, 128, 144, 7, 40, 95, 143, 147, 172, 152, 219, 236, 28,
+        ],
+        [
+            28, 176, 50, 123, 16, 49, 98, 25, 185, 200, 78, 192, 135, 9, 17, 249, 80, 80, 148, 70,
+            197, 44, 151, 13, 252, 245, 170, 173, 184, 192, 179, 50,
+        ],
+        [
+            7, 203, 97, 103, 251, 87, 201, 89, 46, 123, 27, 243, 73, 93, 22, 209, 139, 173, 145,
+            228, 215, 23, 133, 50, 142, 179, 0, 115, 169, 54, 54, 36,
+        ],
+        [
+            103, 67, 224, 228, 216, 51, 67, 191, 241, 190, 231, 167, 239, 122, 145, 135, 27, 27,
+            121, 169, 32, 249, 121, 157, 76, 209, 1, 125, 128, 109, 122, 9,
+        ],
+    ],
+    [
+        [
+            148, 192, 149, 231, 219, 175, 220, 161, 114, 143, 131, 199, 122, 47, 237, 202, 210,
+            139, 29, 217, 170, 108, 115, 249, 68, 146, 176, 108, 222, 159, 233, 14,
+        ],
+        [
+            85, 172, 51, 155, 179, 59, 252, 236, 149, 163, 120, 147, 116, 175, 86, 1, 40, 81, 47,
+            133, 109, 255, 74, 131, 19, 129, 194, 4, 159, 185, 31, 3,
+        ],
+        [
+            209, 194, 182, 196, 5, 180, 67, 30, 36, 61, 3, 166, 211, 15, 123, 155, 128, 13, 120,
+            142, 137, 166, 245, 147, 78, 249, 140, 255, 203, 212, 85, 6,
+        ],
+        [
+            127, 131, 57, 200, 151, 146, 45, 152, 85, 62, 96, 86, 213, 36, 238, 237, 132, 44, 127,
+            149, 182, 216, 127, 58, 114, 211, 189, 141, 202, 194, 62, 62,
+        ],
+        [
+            99, 71, 21, 6, 166, 145, 151, 160, 236, 240, 86, 161, 124, 186, 117, 20, 238, 65, 92,
+            94, 164, 101, 27, 72, 90, 199, 127, 238, 171, 190, 35, 55,
+        ],
+        [
+            3, 197, 168, 159, 131, 53, 238, 255, 128, 42, 6, 120, 7, 172, 39, 108, 174, 46, 155,
+            47, 131, 151, 235, 200, 222, 175, 119, 50, 78, 128, 153, 3,
+        ],
+        [
+            116, 66, 37, 31, 30, 169, 73, 64, 193, 70, 88, 219, 59, 172, 96, 110, 243, 160, 105,
+            191, 2, 226, 190, 27, 52, 202, 22, 33, 25, 38, 220, 31,
+        ],
+        [
+            49, 200, 93, 193, 225, 104, 64, 102, 3, 223, 45, 31, 211, 145, 210, 114, 132, 27, 240,
+            232, 189, 127, 87, 226, 125, 18, 170, 133, 195, 198, 153, 16,
+        ],
+    ],
+    [
+        [
+            121, 53, 200, 131, 196, 84, 198, 124, 113, 102, 142, 218, 224, 247, 145, 131, 186, 103,
+            190, 167, 247, 147, 224, 16, 99, 39, 56, 226, 46, 1, 49, 59,
+        ],
+        [
+            22, 50, 40, 200, 159, 100, 214, 73, 77, 69, 163, 2, 110, 139, 27, 106, 154, 229, 182,
+            137, 7, 168, 187, 202, 17, 19, 160, 25, 162, 17, 89, 48,
+        ],
+        [
+            164, 44, 83, 249, 124, 41, 132, 94, 96, 167, 55, 81, 204, 189, 223, 195, 250, 225, 16,
+            205, 0, 3, 130, 36, 165, 36, 166, 132, 92, 91, 67, 63,
+        ],
+        [
+            74, 250, 76, 30, 147, 188, 232, 26, 69, 89, 236, 235, 117, 199, 87, 31, 17, 223, 161,
+            198, 244, 125, 157, 12, 237, 115, 191, 191, 71, 169, 248, 8,
+        ],
+        [
+            199, 31, 247, 17, 166, 210, 80, 23, 60, 82, 40, 177, 153, 123, 9, 176, 227, 228, 80,
+            110, 191, 176, 172, 159, 234, 227, 133, 97, 160, 201, 8, 45,
+        ],
+        [
+            76, 132, 117, 193, 103, 234, 31, 11, 42, 125, 132, 21, 248, 178, 136, 13, 191, 20, 46,
+            6, 95, 231, 230, 95, 29, 223, 70, 180, 205, 75, 70, 29,
+        ],
+        [
+            252, 10, 50, 84, 120, 20, 243, 48, 252, 113, 112, 249, 255, 250, 144, 178, 245, 108,
+            209, 169, 102, 254, 1, 34, 254, 141, 201, 39, 18, 66, 213, 37,
+        ],
+        [
+            216, 43, 15, 51, 184, 164, 7, 189, 92, 219, 230, 192, 138, 49, 17, 116, 209, 106, 26,
+            208, 1, 207, 209, 130, 200, 28, 194, 68, 159, 151, 92, 59,
+        ],
+    ],
+    [
+        [
+            130, 227, 156, 234, 103, 13, 183, 24, 209, 108, 219, 46, 240, 126, 63, 210, 226, 125,
+            54, 73, 152, 148, 106, 3, 165, 179, 217, 171, 135, 178, 187, 25,
+        ],
+        [
+            249, 123, 230, 251, 192, 186, 61, 109, 88, 101, 236, 21, 188, 172, 133, 102, 200, 159,
+            0, 83, 252, 97, 5, 193, 171, 41, 51, 40, 232, 17, 197, 47,
+        ],
+        [
+            230, 209, 96, 28, 233, 75, 176, 21, 83, 187, 216, 27, 42, 240, 129, 127, 124, 226, 24,
+            47, 194, 225, 110, 93, 108, 50, 169, 242, 24, 163, 130, 38,
+        ],
+        [
+            133, 62, 95, 11, 93, 161, 179, 247, 32, 25, 89, 217, 173, 147, 63, 62, 162, 228, 178,
+            45, 146, 101, 13, 17, 171, 246, 125, 143, 194, 108, 30, 58,
+        ],
+        [
+            246, 216, 189, 144, 11, 240, 154, 125, 249, 154, 103, 59, 40, 198, 29, 207, 162, 186,
+            17, 160, 63, 218, 136, 217, 105, 228, 71, 36, 45, 244, 135, 30,
+        ],
+        [
+            219, 147, 219, 20, 99, 77, 100, 59, 113, 73, 90, 255, 236, 117, 72, 139, 43, 36, 149,
+            4, 112, 41, 98, 157, 60, 2, 220, 9, 118, 181, 189, 46,
+        ],
+        [
+            4, 109, 33, 143, 207, 231, 44, 77, 113, 223, 222, 247, 110, 52, 82, 202, 123, 213, 168,
+            77, 249, 194, 9, 158, 7, 158, 246, 204, 165, 198, 9, 63,
+        ],
+        [
+            84, 44, 128, 238, 129, 148, 169, 143, 203, 17, 195, 37, 152, 129, 162, 175, 39, 140,
+            217, 131, 143, 238, 67, 49, 14, 235, 52, 228, 147, 63, 54, 35,
+        ],
+    ],
+    [
+        [
+            191, 200, 71, 7, 129, 246, 124, 225, 156, 59, 22, 9, 148, 195, 71, 78, 147, 151, 234,
+            102, 64, 121, 202, 224, 245, 27, 80, 223, 176, 227, 26, 17,
+        ],
+        [
+            157, 66, 240, 109, 254, 70, 22, 27, 239, 237, 53, 115, 128, 155, 233, 187, 164, 148,
+            232, 0, 41, 157, 202, 126, 95, 253, 77, 150, 3, 247, 218, 58,
+        ],
+        [
+            228, 151, 252, 188, 162, 217, 229, 108, 43, 184, 35, 147, 108, 83, 94, 28, 151, 48,
+            103, 150, 181, 98, 147, 212, 14, 134, 229, 37, 192, 112, 24, 16,
+        ],
+        [
+            83, 208, 193, 201, 178, 111, 198, 23, 126, 42, 70, 132, 206, 197, 226, 122, 89, 140,
+            131, 139, 135, 216, 52, 136, 76, 217, 147, 230, 129, 245, 176, 59,
+        ],
+        [
+            244, 45, 69, 232, 83, 171, 220, 246, 253, 139, 1, 48, 15, 253, 251, 59, 222, 181, 17,
+            129, 4, 237, 150, 59, 232, 244, 106, 254, 81, 244, 254, 18,
+        ],
+        [
+            188, 199, 14, 197, 255, 152, 21, 31, 227, 236, 205, 79, 82, 104, 52, 214, 2, 218, 180,
+            90, 116, 189, 195, 244, 167, 62, 194, 36, 107, 184, 11, 43,
+        ],
+        [
+            91, 136, 16, 71, 244, 127, 17, 108, 158, 203, 244, 225, 158, 108, 74, 143, 209, 88,
+            216, 76, 60, 162, 103, 218, 6, 86, 220, 238, 109, 6, 112, 28,
+        ],
+        [
+            210, 145, 15, 69, 76, 180, 168, 134, 197, 134, 121, 248, 13, 45, 162, 58, 191, 117,
+            233, 85, 161, 132, 243, 111, 26, 158, 207, 5, 173, 101, 203, 39,
+        ],
+    ],
+    [
+        [
+            91, 229, 184, 51, 211, 97, 48, 184, 113, 20, 161, 108, 173, 224, 151, 36, 98, 116, 190,
+            236, 239, 208, 45, 65, 41, 218, 22, 78, 21, 159, 68, 26,
+        ],
+        [
+            154, 217, 229, 180, 214, 167, 164, 163, 231, 131, 232, 179, 73, 218, 83, 161, 164, 155,
+            38, 217, 38, 83, 173, 123, 185, 195, 136, 28, 222, 105, 248, 44,
+        ],
+        [
+            239, 18, 84, 25, 24, 214, 58, 20, 152, 95, 143, 93, 97, 219, 36, 109, 132, 217, 17, 55,
+            49, 1, 18, 121, 131, 145, 4, 217, 250, 134, 88, 14,
+        ],
+        [
+            253, 67, 150, 157, 135, 33, 201, 53, 183, 45, 159, 132, 171, 98, 41, 58, 140, 134, 11,
+            145, 25, 241, 71, 213, 88, 135, 55, 47, 244, 112, 235, 43,
+        ],
+        [
+            203, 78, 141, 190, 49, 209, 195, 175, 45, 64, 143, 120, 102, 235, 159, 161, 245, 198,
+            29, 126, 9, 86, 92, 60, 63, 99, 217, 169, 217, 25, 97, 57,
+        ],
+        [
+            233, 223, 245, 147, 242, 164, 19, 19, 137, 245, 19, 241, 36, 159, 136, 111, 211, 191,
+            185, 125, 216, 176, 166, 33, 218, 175, 100, 57, 180, 168, 33, 21,
+        ],
+        [
+            191, 125, 108, 252, 109, 113, 20, 141, 133, 231, 150, 20, 101, 219, 222, 38, 99, 160,
+            59, 92, 97, 181, 71, 115, 51, 165, 119, 92, 118, 44, 127, 60,
+        ],
+        [
+            113, 88, 23, 85, 9, 181, 218, 205, 196, 189, 218, 69, 235, 215, 199, 177, 88, 46, 80,
+            177, 124, 126, 188, 209, 80, 154, 254, 177, 249, 6, 34, 45,
+        ],
+    ],
+    [
+        [
+            49, 171, 43, 141, 243, 56, 203, 14, 8, 164, 117, 204, 211, 2, 98, 215, 247, 219, 40,
+            10, 65, 77, 198, 28, 168, 165, 187, 204, 93, 58, 182, 38,
+        ],
+        [
+            76, 41, 75, 64, 104, 7, 90, 39, 75, 212, 84, 97, 109, 16, 221, 105, 175, 57, 203, 170,
+            160, 193, 20, 250, 41, 48, 135, 95, 210, 60, 239, 18,
+        ],
+        [
+            11, 48, 231, 185, 24, 69, 14, 2, 119, 209, 228, 104, 103, 135, 156, 250, 144, 116, 172,
+            233, 164, 53, 176, 174, 97, 86, 41, 34, 69, 64, 80, 45,
+        ],
+        [
+            206, 62, 81, 203, 222, 175, 138, 11, 37, 103, 16, 242, 2, 233, 61, 206, 100, 119, 153,
+            92, 27, 168, 76, 186, 61, 115, 161, 236, 188, 105, 53, 39,
+        ],
+        [
+            184, 121, 255, 112, 144, 174, 21, 210, 228, 37, 104, 55, 37, 190, 74, 219, 138, 97,
+            143, 89, 102, 179, 145, 166, 45, 48, 254, 158, 171, 154, 179, 29,
+        ],
+        [
+            6, 225, 64, 102, 192, 218, 125, 198, 151, 71, 85, 123, 214, 160, 161, 13, 126, 187,
+            146, 117, 142, 61, 67, 33, 247, 101, 92, 227, 237, 171, 178, 46,
+        ],
+        [
+            214, 175, 191, 1, 36, 44, 95, 190, 226, 11, 238, 183, 89, 58, 32, 159, 7, 43, 143, 126,
+            30, 154, 77, 11, 225, 220, 100, 206, 57, 69, 147, 59,
+        ],
+        [
+            132, 71, 64, 13, 36, 95, 197, 166, 181, 130, 188, 161, 21, 134, 156, 60, 229, 202, 115,
+            252, 142, 193, 144, 9, 148, 49, 152, 217, 94, 10, 200, 16,
+        ],
+    ],
+    [
+        [
+            169, 185, 107, 159, 236, 0, 234, 249, 163, 24, 243, 22, 89, 24, 72, 31, 99, 20, 210,
+            52, 203, 224, 58, 131, 135, 126, 139, 241, 11, 223, 180, 41,
+        ],
+        [
+            100, 111, 163, 64, 52, 18, 196, 37, 86, 14, 150, 151, 192, 192, 213, 66, 5, 175, 208,
+            15, 99, 225, 99, 23, 255, 115, 41, 53, 244, 241, 232, 62,
+        ],
+        [
+            203, 172, 162, 221, 207, 144, 7, 120, 39, 125, 39, 231, 4, 167, 167, 147, 197, 4, 221,
+            168, 11, 32, 252, 185, 253, 56, 198, 125, 180, 217, 48, 14,
+        ],
+        [
+            151, 198, 41, 131, 85, 85, 153, 167, 214, 190, 207, 57, 232, 116, 153, 110, 242, 143,
+            87, 149, 148, 79, 202, 50, 254, 93, 181, 118, 241, 36, 47, 30,
+        ],
+        [
+            169, 132, 214, 252, 163, 226, 40, 236, 102, 76, 39, 197, 196, 64, 76, 131, 131, 239,
+            125, 186, 226, 201, 133, 168, 63, 255, 217, 34, 32, 14, 87, 27,
+        ],
+        [
+            152, 171, 139, 173, 78, 7, 26, 26, 41, 52, 127, 102, 29, 98, 192, 1, 192, 245, 215,
+            144, 80, 63, 44, 223, 64, 223, 246, 42, 138, 196, 82, 56,
+        ],
+        [
+            181, 29, 217, 137, 178, 103, 44, 244, 146, 108, 167, 194, 209, 98, 153, 191, 200, 209,
+            197, 121, 30, 99, 180, 251, 16, 70, 185, 48, 28, 225, 29, 4,
+        ],
+        [
+            6, 12, 109, 251, 112, 60, 35, 12, 42, 207, 70, 3, 142, 241, 196, 126, 220, 203, 68,
+            249, 158, 166, 46, 67, 32, 23, 192, 239, 36, 44, 206, 25,
+        ],
+    ],
+    [
+        [
+            94, 19, 121, 58, 184, 157, 237, 59, 227, 107, 130, 65, 168, 219, 76, 58, 226, 235, 146,
+            109, 35, 2, 8, 52, 110, 145, 135, 173, 45, 18, 40, 18,
+        ],
+        [
+            73, 20, 152, 96, 153, 114, 82, 42, 234, 214, 83, 47, 117, 62, 120, 141, 43, 72, 95, 94,
+            222, 242, 227, 94, 53, 78, 58, 66, 227, 164, 108, 36,
+        ],
+        [
+            15, 203, 0, 206, 129, 153, 3, 46, 221, 28, 232, 197, 225, 202, 69, 64, 15, 85, 203, 4,
+            165, 83, 252, 98, 130, 126, 118, 166, 132, 113, 254, 3,
+        ],
+        [
+            27, 247, 153, 83, 213, 195, 61, 103, 248, 197, 36, 170, 167, 29, 42, 61, 58, 108, 9,
+            162, 63, 63, 78, 234, 102, 112, 223, 115, 109, 89, 205, 11,
+        ],
+        [
+            230, 87, 100, 238, 166, 118, 76, 72, 206, 16, 128, 19, 196, 235, 19, 85, 25, 180, 143,
+            88, 79, 67, 74, 18, 42, 0, 182, 167, 5, 82, 141, 58,
+        ],
+        [
+            242, 225, 221, 181, 10, 42, 4, 246, 169, 149, 20, 171, 248, 249, 181, 206, 171, 85,
+            200, 89, 186, 144, 18, 113, 211, 76, 54, 13, 175, 5, 23, 57,
+        ],
+        [
+            124, 90, 7, 105, 198, 10, 101, 152, 215, 14, 162, 242, 28, 138, 77, 181, 216, 134, 209,
+            125, 207, 40, 23, 247, 132, 101, 202, 184, 108, 234, 30, 23,
+        ],
+        [
+            113, 101, 162, 46, 79, 205, 213, 191, 24, 206, 128, 228, 42, 66, 147, 106, 8, 211, 6,
+            57, 131, 108, 24, 46, 80, 206, 180, 58, 149, 204, 118, 61,
+        ],
+    ],
+    [
+        [
+            251, 19, 185, 65, 96, 235, 128, 183, 255, 41, 247, 142, 148, 237, 175, 76, 168, 5, 48,
+            90, 246, 162, 79, 83, 10, 170, 36, 227, 89, 13, 167, 62,
+        ],
+        [
+            56, 166, 248, 151, 90, 187, 224, 187, 156, 41, 254, 99, 77, 25, 30, 149, 121, 164, 64,
+            17, 55, 129, 219, 217, 125, 235, 138, 13, 220, 168, 152, 1,
+        ],
+        [
+            165, 106, 214, 186, 223, 37, 21, 54, 151, 110, 55, 189, 197, 11, 61, 209, 156, 123,
+            169, 180, 84, 10, 149, 134, 72, 186, 24, 177, 182, 246, 164, 19,
+        ],
+        [
+            73, 95, 93, 223, 114, 216, 130, 77, 25, 212, 228, 134, 143, 89, 68, 90, 11, 213, 48,
+            205, 242, 51, 247, 151, 216, 45, 159, 152, 184, 225, 221, 41,
+        ],
+        [
+            40, 171, 76, 37, 66, 223, 82, 113, 211, 247, 233, 118, 209, 240, 160, 244, 13, 51, 194,
+            152, 58, 168, 231, 12, 185, 25, 186, 175, 64, 12, 231, 6,
+        ],
+        [
+            179, 90, 55, 174, 72, 152, 204, 148, 24, 250, 29, 50, 143, 98, 133, 199, 241, 225, 133,
+            171, 33, 49, 178, 167, 35, 162, 79, 159, 26, 232, 0, 8,
+        ],
+        [
+            125, 6, 204, 17, 50, 201, 101, 165, 28, 107, 109, 206, 143, 215, 105, 123, 175, 164,
+            63, 159, 21, 11, 234, 96, 159, 43, 88, 18, 159, 33, 88, 38,
+        ],
+        [
+            221, 140, 167, 49, 28, 116, 206, 121, 79, 136, 80, 60, 181, 7, 95, 177, 32, 126, 87,
+            128, 168, 124, 129, 166, 189, 214, 255, 44, 221, 83, 103, 48,
+        ],
+    ],
+    [
+        [
+            100, 19, 245, 99, 127, 23, 39, 14, 128, 145, 57, 217, 20, 253, 209, 74, 223, 24, 220,
+            142, 19, 167, 130, 239, 220, 226, 211, 66, 177, 44, 34, 25,
+        ],
+        [
+            253, 114, 38, 89, 223, 86, 164, 50, 35, 154, 30, 159, 194, 152, 119, 36, 118, 25, 244,
+            85, 63, 29, 152, 56, 150, 14, 250, 231, 157, 94, 53, 1,
+        ],
+        [
+            122, 133, 104, 47, 162, 156, 2, 203, 65, 211, 188, 21, 95, 196, 233, 189, 85, 11, 82,
+            62, 121, 185, 128, 178, 117, 221, 41, 246, 177, 224, 168, 53,
+        ],
+        [
+            15, 47, 113, 92, 78, 129, 107, 39, 106, 27, 10, 4, 193, 207, 48, 209, 184, 128, 128,
+            54, 167, 37, 99, 169, 88, 131, 209, 43, 191, 232, 246, 43,
+        ],
+        [
+            151, 100, 55, 80, 35, 25, 142, 78, 150, 69, 94, 12, 237, 225, 126, 108, 106, 133, 11,
+            118, 58, 8, 195, 87, 124, 129, 2, 8, 228, 8, 235, 41,
+        ],
+        [
+            154, 75, 9, 198, 211, 209, 244, 131, 49, 126, 187, 157, 54, 92, 229, 166, 249, 72, 229,
+            168, 92, 24, 17, 154, 4, 213, 211, 179, 26, 60, 115, 57,
+        ],
+        [
+            148, 168, 89, 36, 108, 105, 22, 194, 209, 232, 199, 64, 79, 100, 96, 148, 205, 137, 20,
+            98, 107, 79, 12, 200, 56, 4, 93, 151, 129, 18, 90, 2,
+        ],
+        [
+            173, 118, 232, 220, 163, 182, 149, 237, 184, 151, 108, 87, 139, 99, 14, 144, 174, 120,
+            101, 207, 198, 189, 108, 99, 145, 73, 114, 141, 90, 97, 136, 36,
+        ],
+    ],
+];
+
+pub fn generator() -> pallas::Affine {
+    pallas::Affine::from_xy(
+        pallas::Base::from_bytes(&GENERATOR.0).unwrap(),
+        pallas::Base::from_bytes(&GENERATOR.1).unwrap(),
+    )
+    .unwrap()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::{
+        test_lagrange_coeffs, test_zs_and_us, NUM_WINDOWS, ORCHARD_PERSONALIZATION,
+    };
+    use super::*;
+    use group::Curve;
+    use pasta_curves::{
+        arithmetic::{CurveAffine, CurveExt, FieldExt},
+        pallas,
+    };
+
+    #[test]
+    fn generator() {
+        let hasher = pallas::Point::hash_to_curve(ORCHARD_PERSONALIZATION);
+        let point = hasher(b"G");
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(*coords.x(), pallas::Base::from_bytes(&GENERATOR.0).unwrap());
+        assert_eq!(*coords.y(), pallas::Base::from_bytes(&GENERATOR.1).unwrap());
+    }
+
+    #[test]
+    fn lagrange_coeffs() {
+        let base = super::generator();
+        test_lagrange_coeffs(base, NUM_WINDOWS);
+    }
+
+    #[test]
+    fn z() {
+        let base = super::generator();
+        test_zs_and_us(base, &Z, &U, NUM_WINDOWS);
+    }
+}

+ 101 - 0
examples/halo2/src/constants/util.rs

@@ -0,0 +1,101 @@
+use ff::{Field, PrimeFieldBits};
+use halo2::arithmetic::{CurveAffine, FieldExt};
+
+/// Decompose a word `alpha` into `window_num_bits` bits (little-endian)
+/// For a window size of `w`, this returns [k_0, ..., k_n] where each `k_i`
+/// is a `w`-bit value, and `scalar = k_0 + k_1 * w + k_n * w^n`.
+///
+/// # Panics
+///
+/// We are returning a `Vec<u8>` which means the window size is limited to
+/// <= 8 bits.
+pub fn decompose_word<F: PrimeFieldBits>(
+    word: F,
+    word_num_bits: usize,
+    window_num_bits: usize,
+) -> Vec<u8> {
+    assert!(window_num_bits <= 8);
+
+    // Pad bits to multiple of window_num_bits
+    let padding = (window_num_bits - (word_num_bits % window_num_bits)) % window_num_bits;
+    let bits: Vec<bool> = word
+        .to_le_bits()
+        .into_iter()
+        .take(word_num_bits)
+        .chain(std::iter::repeat(false).take(padding))
+        .collect();
+    assert_eq!(bits.len(), word_num_bits + padding);
+
+    bits.chunks_exact(window_num_bits)
+        .map(|chunk| chunk.iter().rev().fold(0, |acc, b| (acc << 1) + (*b as u8)))
+        .collect()
+}
+
+/// Evaluate y = f(x) given the coefficients of f(x)
+pub fn evaluate<C: CurveAffine>(x: u8, coeffs: &[C::Base]) -> C::Base {
+    let x = C::Base::from_u64(x as u64);
+    coeffs
+        .iter()
+        .rev()
+        .cloned()
+        .reduce(|acc, coeff| acc * x + coeff)
+        .unwrap_or_else(C::Base::zero)
+}
+
+/// Takes in an FnMut closure and returns a constant-length array with elements of
+/// type `Output`.
+pub fn gen_const_array<Output: Copy + Default, const LEN: usize>(
+    mut closure: impl FnMut(usize) -> Output,
+) -> [Output; LEN] {
+    let mut ret: [Output; LEN] = [Default::default(); LEN];
+    for (bit, val) in ret.iter_mut().zip((0..LEN).map(|idx| closure(idx))) {
+        *bit = val;
+    }
+    ret
+}
+
+#[cfg(test)]
+mod tests {
+    use super::decompose_word;
+    use ff::PrimeField;
+    use pasta_curves::{arithmetic::FieldExt, pallas};
+    use proptest::prelude::*;
+    use std::convert::TryInto;
+    use std::iter;
+
+    prop_compose! {
+        fn arb_scalar()(bytes in prop::array::uniform32(0u8..)) -> pallas::Scalar {
+            // Instead of rejecting out-of-range bytes, let's reduce them.
+            let mut buf = [0; 64];
+            buf[..32].copy_from_slice(&bytes);
+            pallas::Scalar::from_bytes_wide(&buf)
+        }
+    }
+
+    proptest! {
+        #[test]
+        fn test_decompose_word(
+            scalar in arb_scalar(),
+            window_num_bits in 1u8..9
+        ) {
+            // Get decomposition into `window_num_bits` bits
+            let decomposed = decompose_word(scalar, pallas::Scalar::NUM_BITS as usize, window_num_bits as usize);
+
+            // Flatten bits
+            let bits = decomposed
+                .iter()
+                .flat_map(|window| (0..window_num_bits).map(move |mask| (window & (1 << mask)) != 0));
+
+            // Ensure this decomposition contains 256 or fewer set bits.
+            assert!(!bits.clone().skip(32*8).any(|b| b));
+
+            // Pad or truncate bits to 32 bytes
+            let bits: Vec<bool> = bits.chain(iter::repeat(false)).take(32*8).collect();
+
+            let bytes: Vec<u8> = bits.chunks_exact(8).map(|chunk| chunk.iter().rev().fold(0, |acc, b| (acc << 1) + (*b as u8))).collect();
+
+            // Check that original scalar is recovered from decomposition
+            assert_eq!(scalar, pallas::Scalar::from_bytes(&bytes.try_into().unwrap()).unwrap());
+        }
+    }
+}

+ 2965 - 0
examples/halo2/src/constants/value_commit_r.rs

@@ -0,0 +1,2965 @@
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+/// The value commitment is used to check balance between inputs and outputs. The value is
+/// placed over this generator.
+pub const GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        145, 90, 60, 136, 104, 198, 195, 14, 47, 128, 144, 238, 69, 215, 110, 64, 72, 32, 141, 234,
+        91, 35, 102, 79, 187, 9, 164, 15, 85, 68, 244, 7,
+    ],
+    [
+        202, 217, 114, 167, 200, 70, 47, 14, 70, 129, 146, 243, 241, 41, 146, 39, 194, 183, 111,
+        228, 201, 44, 86, 33, 140, 98, 38, 175, 119, 103, 19, 36,
+    ],
+);
+
+/// Full-width z-values for GENERATOR
+pub const Z: [u64; super::NUM_WINDOWS] = [
+    181916, 22148, 340526, 80718, 104958, 86894, 43381, 1060, 82130, 4741, 55897, 4304, 114469,
+    20503, 25001, 62408, 52978, 35893, 72071, 154369, 67304, 7299, 27960, 42929, 51869, 89967,
+    62210, 59433, 47868, 32536, 105000, 1546, 2116, 18717, 50694, 22864, 254428, 54966, 108762,
+    46706, 65730, 45555, 7376, 50051, 24773, 74636, 44806, 23223, 78561, 50668, 7380, 13697,
+    171970, 269484, 25534, 5098, 79584, 6889, 21432, 73095, 36745, 37350, 6274, 5179, 50216, 12007,
+    44029, 88199, 70401, 14120, 19017, 2423, 26494, 34954, 126293, 167379, 136922, 45619, 30331,
+    22632, 163228, 12997, 4461, 32320, 13430,
+];
+
+/// Full-width u-values for GENERATOR
+pub const U: [[[u8; 32]; super::H]; super::NUM_WINDOWS] = [
+    [
+        [
+            139, 239, 3, 113, 200, 111, 72, 118, 105, 23, 186, 243, 234, 10, 173, 186, 53, 143,
+            244, 250, 24, 189, 161, 158, 43, 13, 143, 252, 82, 104, 150, 55,
+        ],
+        [
+            102, 10, 45, 173, 93, 142, 120, 21, 105, 140, 183, 3, 198, 201, 198, 184, 15, 206, 177,
+            131, 9, 25, 103, 232, 162, 26, 45, 202, 9, 125, 93, 49,
+        ],
+        [
+            7, 184, 84, 133, 195, 104, 173, 245, 198, 202, 50, 197, 58, 26, 187, 116, 72, 224, 153,
+            67, 200, 174, 32, 60, 195, 80, 152, 192, 131, 168, 208, 13,
+        ],
+        [
+            62, 23, 97, 17, 76, 95, 147, 158, 244, 165, 111, 203, 162, 25, 80, 235, 63, 80, 45, 12,
+            254, 236, 154, 135, 211, 75, 44, 122, 125, 197, 9, 41,
+        ],
+        [
+            99, 80, 223, 192, 185, 128, 95, 248, 127, 225, 142, 107, 179, 40, 8, 112, 59, 60, 81,
+            89, 87, 153, 126, 140, 190, 187, 139, 9, 24, 21, 104, 5,
+        ],
+        [
+            39, 201, 225, 147, 38, 14, 83, 216, 168, 53, 60, 41, 194, 52, 37, 141, 20, 20, 10, 242,
+            173, 169, 194, 72, 182, 95, 173, 186, 229, 115, 178, 37,
+        ],
+        [
+            234, 29, 76, 124, 112, 42, 82, 57, 181, 205, 61, 90, 58, 224, 227, 21, 83, 58, 30, 216,
+            161, 10, 104, 83, 34, 113, 192, 146, 141, 215, 219, 44,
+        ],
+        [
+            218, 183, 114, 168, 64, 166, 144, 113, 219, 75, 64, 32, 252, 13, 10, 111, 244, 194, 79,
+            70, 7, 209, 129, 66, 232, 180, 217, 248, 61, 191, 59, 51,
+        ],
+    ],
+    [
+        [
+            96, 67, 69, 38, 122, 193, 223, 87, 223, 138, 202, 119, 235, 141, 70, 229, 166, 135,
+            208, 39, 220, 143, 203, 102, 106, 99, 115, 39, 8, 60, 31, 30,
+        ],
+        [
+            207, 136, 59, 50, 178, 209, 184, 137, 238, 170, 63, 147, 102, 56, 194, 30, 152, 87,
+            165, 250, 203, 71, 154, 64, 41, 216, 239, 143, 9, 94, 33, 52,
+        ],
+        [
+            158, 74, 177, 224, 26, 70, 115, 103, 211, 95, 237, 92, 72, 210, 216, 225, 165, 20, 251,
+            241, 200, 140, 178, 182, 154, 65, 105, 144, 85, 65, 240, 46,
+        ],
+        [
+            11, 99, 19, 189, 201, 13, 110, 245, 240, 219, 4, 55, 24, 81, 54, 2, 82, 54, 171, 29,
+            203, 99, 234, 64, 175, 154, 87, 112, 249, 29, 20, 30,
+        ],
+        [
+            213, 177, 148, 202, 251, 114, 75, 8, 198, 148, 44, 102, 185, 120, 226, 222, 251, 65,
+            206, 38, 99, 180, 62, 13, 221, 122, 206, 148, 10, 212, 234, 4,
+        ],
+        [
+            191, 60, 118, 185, 153, 148, 200, 78, 50, 10, 66, 97, 26, 79, 240, 136, 20, 115, 39,
+            240, 166, 237, 87, 98, 223, 84, 197, 151, 230, 139, 235, 7,
+        ],
+        [
+            170, 86, 142, 224, 231, 59, 184, 35, 237, 52, 13, 72, 108, 156, 227, 229, 214, 103,
+            175, 139, 231, 148, 146, 51, 195, 157, 221, 189, 122, 27, 227, 37,
+        ],
+        [
+            88, 29, 201, 124, 227, 97, 36, 193, 215, 180, 137, 50, 249, 137, 10, 118, 67, 200, 35,
+            42, 181, 217, 213, 146, 210, 159, 47, 194, 165, 101, 241, 20,
+        ],
+    ],
+    [
+        [
+            147, 4, 192, 237, 120, 223, 231, 71, 128, 237, 0, 110, 243, 11, 132, 152, 102, 150,
+            212, 251, 145, 56, 21, 247, 78, 232, 88, 204, 26, 139, 75, 1,
+        ],
+        [
+            242, 104, 68, 11, 78, 77, 207, 142, 185, 45, 95, 183, 81, 22, 8, 125, 247, 66, 152, 59,
+            191, 118, 51, 215, 85, 0, 51, 170, 147, 239, 110, 17,
+        ],
+        [
+            148, 204, 16, 59, 17, 174, 121, 72, 218, 232, 205, 215, 128, 255, 187, 112, 141, 188,
+            30, 2, 176, 122, 78, 158, 147, 150, 228, 25, 253, 68, 254, 43,
+        ],
+        [
+            30, 207, 11, 138, 80, 55, 51, 156, 139, 83, 138, 33, 115, 159, 197, 188, 79, 31, 104,
+            111, 62, 80, 183, 143, 105, 189, 238, 79, 147, 212, 156, 11,
+        ],
+        [
+            162, 59, 128, 0, 14, 229, 58, 101, 219, 135, 2, 93, 2, 254, 14, 43, 143, 219, 76, 121,
+            233, 148, 54, 51, 227, 115, 38, 253, 95, 103, 191, 21,
+        ],
+        [
+            117, 191, 41, 120, 209, 97, 234, 18, 169, 17, 7, 120, 210, 68, 139, 185, 133, 131, 43,
+            106, 10, 107, 18, 21, 57, 8, 190, 228, 149, 37, 158, 51,
+        ],
+        [
+            31, 174, 69, 213, 168, 110, 159, 179, 18, 94, 76, 220, 112, 128, 252, 184, 236, 100,
+            185, 238, 191, 51, 204, 100, 107, 218, 101, 96, 106, 166, 70, 6,
+        ],
+        [
+            123, 139, 4, 10, 146, 168, 123, 135, 46, 115, 8, 11, 195, 106, 68, 214, 136, 168, 177,
+            1, 184, 13, 51, 185, 184, 187, 68, 26, 157, 183, 41, 62,
+        ],
+    ],
+    [
+        [
+            153, 31, 98, 227, 163, 137, 0, 129, 133, 57, 178, 132, 239, 46, 204, 124, 73, 65, 29,
+            216, 30, 37, 56, 132, 241, 220, 62, 78, 187, 62, 240, 45,
+        ],
+        [
+            125, 116, 131, 117, 46, 193, 254, 93, 79, 76, 177, 57, 31, 200, 120, 132, 186, 53, 66,
+            220, 163, 178, 5, 230, 188, 212, 210, 25, 188, 103, 93, 44,
+        ],
+        [
+            49, 162, 67, 249, 87, 145, 89, 247, 245, 104, 208, 165, 219, 100, 16, 187, 142, 200,
+            66, 47, 38, 77, 245, 3, 108, 74, 62, 106, 50, 208, 84, 52,
+        ],
+        [
+            201, 221, 108, 129, 170, 111, 64, 73, 140, 255, 129, 243, 252, 87, 129, 226, 170, 210,
+            141, 213, 121, 212, 34, 184, 139, 157, 198, 98, 40, 50, 160, 59,
+        ],
+        [
+            238, 218, 145, 5, 148, 79, 125, 6, 93, 100, 166, 138, 241, 213, 11, 178, 96, 251, 113,
+            138, 47, 97, 33, 222, 224, 129, 174, 130, 217, 164, 140, 29,
+        ],
+        [
+            212, 178, 199, 211, 213, 183, 6, 187, 140, 241, 90, 125, 180, 76, 46, 158, 109, 136,
+            103, 168, 66, 53, 177, 127, 32, 212, 197, 52, 144, 147, 136, 45,
+        ],
+        [
+            103, 249, 188, 165, 128, 120, 137, 119, 158, 154, 30, 17, 38, 169, 19, 33, 53, 148, 37,
+            218, 95, 85, 148, 115, 41, 250, 150, 226, 101, 212, 163, 30,
+        ],
+        [
+            230, 249, 111, 35, 125, 100, 99, 9, 198, 41, 46, 115, 83, 8, 31, 196, 164, 188, 94, 8,
+            109, 175, 164, 169, 64, 5, 78, 121, 162, 246, 59, 53,
+        ],
+    ],
+    [
+        [
+            64, 172, 254, 150, 194, 0, 229, 126, 227, 156, 144, 238, 66, 221, 251, 17, 212, 189,
+            75, 173, 183, 141, 105, 90, 211, 214, 215, 190, 220, 218, 32, 2,
+        ],
+        [
+            250, 142, 28, 190, 160, 225, 213, 205, 14, 211, 102, 52, 153, 255, 151, 209, 225, 2,
+            33, 25, 213, 238, 238, 198, 18, 154, 228, 241, 241, 54, 157, 60,
+        ],
+        [
+            75, 214, 166, 211, 115, 128, 32, 28, 77, 81, 147, 56, 39, 155, 109, 112, 10, 160, 98,
+            103, 72, 95, 27, 59, 207, 229, 174, 25, 4, 251, 92, 60,
+        ],
+        [
+            34, 113, 137, 237, 47, 68, 116, 169, 227, 218, 209, 74, 23, 162, 182, 147, 221, 151,
+            145, 79, 131, 95, 193, 132, 143, 130, 130, 227, 245, 198, 206, 27,
+        ],
+        [
+            127, 167, 50, 210, 223, 36, 251, 32, 21, 244, 240, 170, 220, 7, 86, 197, 230, 237, 222,
+            25, 156, 33, 93, 227, 95, 118, 148, 123, 226, 170, 189, 62,
+        ],
+        [
+            172, 190, 180, 238, 11, 198, 98, 110, 7, 7, 137, 152, 215, 206, 40, 220, 218, 85, 9,
+            52, 172, 74, 5, 214, 152, 191, 17, 48, 100, 173, 54, 26,
+        ],
+        [
+            247, 12, 146, 226, 110, 132, 132, 139, 243, 207, 204, 228, 47, 186, 231, 240, 231, 176,
+            133, 36, 206, 22, 119, 135, 22, 145, 197, 100, 20, 199, 15, 58,
+        ],
+        [
+            175, 19, 90, 7, 34, 58, 172, 219, 22, 67, 115, 16, 50, 51, 173, 31, 133, 161, 1, 229,
+            178, 133, 102, 152, 55, 78, 45, 110, 75, 239, 234, 38,
+        ],
+    ],
+    [
+        [
+            145, 188, 217, 28, 211, 109, 158, 69, 114, 242, 67, 177, 86, 231, 235, 110, 226, 248,
+            92, 192, 231, 217, 250, 30, 54, 110, 42, 17, 4, 123, 63, 41,
+        ],
+        [
+            239, 149, 56, 141, 40, 202, 6, 176, 150, 138, 225, 8, 95, 21, 41, 149, 135, 163, 132,
+            41, 2, 43, 139, 171, 27, 196, 102, 64, 33, 218, 153, 59,
+        ],
+        [
+            203, 34, 210, 53, 46, 172, 48, 78, 145, 63, 217, 49, 77, 236, 1, 154, 200, 72, 24, 2,
+            222, 189, 166, 166, 132, 245, 177, 199, 89, 54, 126, 25,
+        ],
+        [
+            86, 6, 180, 69, 62, 170, 243, 248, 240, 30, 241, 155, 22, 79, 11, 110, 178, 64, 195,
+            62, 30, 75, 182, 14, 113, 220, 96, 15, 168, 107, 37, 60,
+        ],
+        [
+            119, 113, 192, 238, 13, 95, 60, 229, 22, 93, 102, 163, 170, 144, 188, 6, 194, 160, 69,
+            116, 94, 199, 26, 192, 249, 116, 128, 72, 184, 45, 162, 35,
+        ],
+        [
+            94, 223, 14, 35, 38, 97, 179, 224, 57, 126, 170, 251, 91, 103, 84, 23, 224, 151, 106,
+            199, 236, 106, 163, 141, 58, 175, 81, 80, 40, 214, 201, 59,
+        ],
+        [
+            132, 112, 204, 9, 226, 55, 185, 75, 231, 21, 48, 249, 198, 110, 57, 82, 123, 164, 91,
+            16, 85, 246, 121, 57, 4, 132, 38, 133, 2, 196, 123, 63,
+        ],
+        [
+            10, 232, 165, 228, 159, 111, 77, 10, 124, 168, 59, 111, 134, 139, 175, 115, 181, 41,
+            195, 207, 122, 3, 181, 1, 233, 171, 144, 20, 209, 170, 250, 28,
+        ],
+    ],
+    [
+        [
+            31, 220, 178, 109, 251, 49, 176, 112, 11, 205, 236, 79, 93, 93, 209, 18, 54, 37, 19,
+            194, 83, 223, 91, 242, 233, 83, 141, 144, 135, 244, 105, 56,
+        ],
+        [
+            81, 231, 94, 170, 107, 127, 203, 163, 10, 183, 25, 198, 4, 61, 67, 154, 163, 90, 74, 9,
+            200, 29, 145, 141, 166, 123, 62, 13, 104, 194, 93, 50,
+        ],
+        [
+            172, 180, 2, 27, 47, 80, 235, 164, 224, 160, 254, 247, 147, 236, 137, 122, 237, 65, 98,
+            174, 224, 209, 61, 144, 152, 43, 50, 80, 206, 128, 29, 7,
+        ],
+        [
+            96, 37, 53, 71, 220, 216, 77, 204, 62, 14, 73, 192, 136, 118, 209, 107, 116, 89, 247,
+            117, 41, 254, 157, 253, 146, 83, 61, 134, 172, 217, 167, 61,
+        ],
+        [
+            104, 117, 19, 237, 94, 120, 199, 136, 125, 131, 228, 144, 28, 10, 148, 119, 106, 17,
+            250, 90, 94, 194, 167, 240, 113, 247, 183, 253, 160, 184, 27, 9,
+        ],
+        [
+            192, 24, 53, 127, 235, 143, 177, 125, 190, 143, 56, 228, 130, 68, 241, 104, 203, 233,
+            225, 7, 148, 95, 154, 210, 22, 127, 67, 100, 19, 0, 18, 49,
+        ],
+        [
+            236, 129, 24, 57, 236, 189, 67, 7, 7, 189, 46, 125, 107, 150, 52, 83, 225, 198, 101,
+            47, 123, 198, 8, 88, 198, 83, 121, 40, 186, 113, 242, 42,
+        ],
+        [
+            120, 71, 188, 215, 73, 12, 233, 32, 183, 162, 175, 38, 132, 27, 32, 249, 176, 102, 92,
+            123, 174, 249, 228, 134, 124, 231, 187, 191, 240, 9, 236, 25,
+        ],
+    ],
+    [
+        [
+            44, 238, 221, 171, 60, 205, 205, 235, 28, 12, 166, 250, 253, 81, 171, 208, 182, 24, 91,
+            210, 129, 225, 102, 183, 208, 189, 114, 152, 151, 157, 226, 51,
+        ],
+        [
+            103, 138, 231, 149, 85, 124, 78, 82, 40, 17, 231, 154, 156, 3, 30, 222, 245, 52, 94,
+            21, 104, 35, 253, 234, 63, 93, 118, 157, 170, 22, 250, 37,
+        ],
+        [
+            40, 91, 164, 160, 164, 242, 12, 226, 36, 210, 221, 128, 70, 87, 209, 36, 35, 189, 44,
+            85, 110, 100, 212, 166, 132, 244, 106, 243, 103, 75, 243, 20,
+        ],
+        [
+            159, 108, 152, 218, 145, 14, 59, 25, 174, 120, 118, 20, 221, 214, 134, 127, 8, 84, 14,
+            151, 206, 249, 43, 127, 219, 205, 103, 185, 160, 23, 8, 55,
+        ],
+        [
+            248, 129, 230, 218, 151, 177, 113, 167, 115, 89, 111, 199, 44, 100, 229, 186, 76, 136,
+            78, 174, 14, 239, 223, 152, 0, 35, 134, 159, 69, 198, 100, 37,
+        ],
+        [
+            86, 62, 241, 104, 218, 62, 10, 203, 109, 39, 47, 242, 110, 34, 17, 62, 188, 251, 109,
+            224, 224, 49, 232, 249, 158, 44, 131, 184, 232, 169, 151, 11,
+        ],
+        [
+            230, 160, 217, 171, 53, 116, 55, 143, 30, 111, 3, 92, 203, 224, 216, 180, 33, 218, 240,
+            25, 183, 233, 55, 238, 165, 146, 168, 141, 40, 92, 37, 22,
+        ],
+        [
+            209, 112, 179, 95, 105, 7, 163, 138, 141, 97, 118, 174, 120, 237, 72, 230, 79, 172, 90,
+            219, 26, 192, 38, 228, 122, 28, 72, 80, 235, 193, 127, 34,
+        ],
+    ],
+    [
+        [
+            254, 28, 193, 110, 41, 72, 172, 152, 87, 109, 233, 222, 140, 147, 159, 124, 148, 182,
+            94, 179, 206, 34, 33, 50, 172, 30, 12, 199, 87, 72, 165, 41,
+        ],
+        [
+            245, 173, 241, 93, 248, 176, 51, 64, 144, 104, 208, 216, 16, 206, 94, 152, 167, 89,
+            137, 196, 246, 240, 87, 167, 171, 104, 27, 116, 108, 217, 22, 9,
+        ],
+        [
+            132, 156, 222, 191, 17, 62, 197, 49, 34, 216, 214, 33, 47, 82, 224, 216, 170, 239, 241,
+            126, 234, 212, 199, 91, 138, 110, 27, 128, 117, 50, 242, 32,
+        ],
+        [
+            64, 5, 181, 26, 70, 28, 184, 194, 87, 116, 43, 93, 67, 92, 174, 29, 11, 79, 243, 240,
+            11, 121, 157, 62, 58, 33, 181, 90, 211, 131, 7, 8,
+        ],
+        [
+            230, 49, 144, 6, 195, 18, 172, 214, 238, 213, 186, 116, 144, 69, 231, 252, 84, 102, 91,
+            94, 200, 169, 229, 178, 99, 245, 15, 119, 190, 194, 95, 54,
+        ],
+        [
+            41, 252, 108, 140, 207, 174, 78, 195, 183, 186, 125, 24, 131, 106, 216, 108, 184, 153,
+            249, 79, 94, 210, 124, 195, 115, 224, 63, 192, 184, 83, 30, 26,
+        ],
+        [
+            208, 125, 51, 179, 127, 202, 37, 211, 44, 72, 27, 164, 254, 137, 58, 148, 0, 63, 41,
+            234, 1, 158, 72, 25, 169, 132, 1, 189, 215, 2, 64, 14,
+        ],
+        [
+            46, 111, 37, 127, 176, 137, 50, 89, 246, 138, 208, 203, 106, 195, 157, 231, 240, 144,
+            240, 225, 64, 198, 233, 167, 127, 40, 231, 104, 82, 155, 45, 18,
+        ],
+    ],
+    [
+        [
+            25, 54, 51, 222, 26, 219, 162, 250, 134, 244, 11, 167, 206, 151, 28, 254, 63, 143, 163,
+            169, 151, 94, 5, 207, 253, 137, 198, 25, 88, 102, 129, 24,
+        ],
+        [
+            173, 42, 240, 164, 55, 124, 163, 247, 2, 94, 188, 244, 114, 36, 131, 79, 243, 126, 25,
+            60, 70, 209, 150, 121, 9, 44, 80, 224, 183, 131, 133, 40,
+        ],
+        [
+            246, 58, 162, 49, 244, 161, 222, 142, 77, 187, 24, 76, 41, 16, 76, 147, 43, 143, 173,
+            142, 112, 194, 31, 105, 27, 195, 126, 227, 23, 231, 208, 8,
+        ],
+        [
+            35, 200, 84, 68, 62, 127, 102, 254, 54, 172, 151, 193, 222, 181, 190, 204, 95, 57, 33,
+            225, 15, 79, 237, 101, 28, 239, 186, 29, 41, 69, 98, 21,
+        ],
+        [
+            100, 64, 24, 112, 156, 153, 245, 233, 166, 182, 114, 120, 185, 207, 43, 155, 145, 73,
+            64, 215, 81, 169, 35, 240, 69, 116, 5, 34, 240, 79, 105, 1,
+        ],
+        [
+            226, 59, 11, 185, 102, 13, 42, 109, 44, 163, 130, 161, 218, 147, 189, 18, 60, 61, 123,
+            242, 172, 208, 131, 138, 118, 95, 21, 111, 46, 74, 82, 1,
+        ],
+        [
+            217, 244, 22, 128, 132, 230, 210, 181, 187, 251, 65, 195, 81, 129, 222, 206, 97, 14,
+            178, 243, 19, 113, 209, 11, 142, 86, 248, 246, 229, 152, 162, 17,
+        ],
+        [
+            59, 102, 139, 93, 161, 101, 23, 36, 218, 70, 246, 128, 98, 147, 174, 207, 84, 139, 39,
+            67, 227, 7, 130, 64, 37, 22, 194, 218, 191, 43, 34, 45,
+        ],
+    ],
+    [
+        [
+            243, 215, 252, 180, 108, 191, 218, 211, 153, 49, 144, 152, 90, 95, 76, 233, 106, 222,
+            156, 245, 61, 172, 45, 242, 58, 167, 202, 227, 245, 236, 247, 20,
+        ],
+        [
+            2, 213, 207, 34, 65, 186, 12, 228, 150, 46, 40, 66, 72, 196, 244, 151, 80, 62, 116,
+            141, 36, 52, 180, 11, 184, 13, 175, 50, 172, 66, 85, 29,
+        ],
+        [
+            185, 172, 242, 99, 188, 15, 56, 93, 53, 83, 208, 174, 10, 71, 76, 36, 98, 173, 159, 81,
+            53, 129, 157, 220, 61, 93, 12, 123, 21, 2, 123, 46,
+        ],
+        [
+            195, 200, 168, 165, 148, 30, 154, 31, 130, 39, 105, 199, 45, 122, 208, 75, 43, 40, 223,
+            149, 143, 209, 121, 207, 176, 192, 237, 254, 133, 131, 212, 14,
+        ],
+        [
+            243, 120, 106, 116, 193, 82, 61, 254, 19, 211, 26, 13, 30, 197, 160, 76, 142, 143, 228,
+            54, 49, 114, 253, 198, 190, 58, 118, 175, 105, 244, 57, 1,
+        ],
+        [
+            187, 65, 118, 89, 48, 103, 234, 64, 137, 212, 20, 130, 63, 41, 167, 40, 204, 105, 151,
+            188, 106, 116, 212, 8, 33, 220, 86, 126, 174, 117, 241, 11,
+        ],
+        [
+            23, 36, 152, 55, 25, 64, 51, 241, 153, 94, 53, 240, 244, 26, 191, 249, 76, 47, 167, 53,
+            103, 179, 87, 200, 85, 57, 187, 73, 87, 186, 71, 5,
+        ],
+        [
+            3, 245, 6, 142, 151, 192, 17, 62, 8, 136, 223, 178, 122, 228, 234, 192, 18, 12, 162,
+            186, 249, 173, 183, 20, 190, 238, 56, 35, 142, 237, 243, 2,
+        ],
+    ],
+    [
+        [
+            214, 249, 38, 19, 194, 4, 20, 205, 62, 197, 25, 3, 103, 4, 128, 12, 222, 100, 14, 15,
+            9, 188, 229, 54, 182, 46, 18, 0, 53, 137, 27, 32,
+        ],
+        [
+            1, 248, 42, 1, 186, 186, 208, 3, 200, 86, 156, 177, 16, 214, 197, 100, 46, 136, 45,
+            186, 221, 12, 30, 122, 141, 141, 242, 37, 9, 23, 50, 31,
+        ],
+        [
+            30, 193, 71, 240, 123, 34, 96, 160, 159, 81, 65, 89, 85, 224, 39, 182, 188, 43, 148, 4,
+            178, 136, 230, 179, 120, 157, 237, 153, 144, 203, 166, 18,
+        ],
+        [
+            23, 153, 154, 149, 96, 81, 58, 206, 78, 42, 131, 36, 180, 230, 152, 240, 188, 196, 75,
+            191, 187, 191, 201, 29, 248, 169, 1, 249, 194, 90, 146, 13,
+        ],
+        [
+            172, 165, 50, 18, 118, 97, 254, 130, 3, 56, 196, 176, 230, 203, 95, 140, 114, 140, 53,
+            45, 184, 55, 58, 243, 32, 82, 182, 61, 121, 144, 156, 59,
+        ],
+        [
+            117, 176, 227, 84, 115, 78, 150, 191, 31, 133, 143, 105, 89, 128, 249, 146, 113, 16,
+            24, 46, 121, 132, 4, 240, 59, 5, 228, 223, 10, 28, 17, 45,
+        ],
+        [
+            90, 222, 163, 229, 143, 243, 155, 195, 207, 44, 38, 111, 136, 71, 10, 65, 141, 20, 56,
+            224, 173, 128, 45, 220, 236, 250, 2, 212, 132, 245, 86, 20,
+        ],
+        [
+            132, 121, 145, 157, 175, 243, 206, 52, 195, 75, 219, 105, 139, 21, 43, 111, 235, 75,
+            244, 41, 179, 111, 142, 241, 56, 139, 199, 215, 155, 155, 24, 3,
+        ],
+    ],
+    [
+        [
+            170, 160, 77, 190, 31, 71, 130, 150, 13, 82, 166, 134, 114, 218, 143, 234, 103, 193,
+            31, 79, 160, 143, 224, 137, 153, 223, 83, 95, 86, 15, 224, 44,
+        ],
+        [
+            247, 66, 144, 180, 80, 213, 107, 248, 33, 247, 21, 40, 162, 43, 229, 130, 164, 122,
+            155, 92, 221, 188, 252, 170, 102, 151, 54, 204, 150, 59, 194, 56,
+        ],
+        [
+            99, 55, 144, 231, 101, 168, 114, 245, 137, 185, 40, 155, 159, 157, 78, 143, 41, 227,
+            125, 81, 209, 82, 71, 23, 225, 95, 242, 152, 61, 106, 114, 58,
+        ],
+        [
+            251, 171, 20, 73, 200, 63, 174, 145, 92, 225, 76, 78, 213, 212, 87, 243, 42, 186, 194,
+            98, 80, 131, 184, 206, 237, 248, 143, 235, 185, 66, 225, 15,
+        ],
+        [
+            41, 63, 235, 60, 242, 30, 193, 127, 243, 81, 133, 103, 18, 74, 224, 246, 14, 15, 81,
+            128, 139, 171, 164, 159, 217, 64, 66, 253, 203, 171, 90, 44,
+        ],
+        [
+            107, 47, 2, 101, 9, 174, 191, 51, 206, 178, 45, 59, 2, 48, 86, 193, 88, 190, 79, 94,
+            255, 5, 32, 137, 160, 237, 0, 50, 20, 131, 108, 8,
+        ],
+        [
+            149, 251, 115, 8, 57, 217, 50, 3, 163, 192, 38, 199, 174, 92, 109, 92, 246, 242, 44,
+            56, 193, 10, 51, 113, 130, 201, 253, 190, 30, 240, 63, 40,
+        ],
+        [
+            110, 22, 68, 198, 134, 118, 180, 38, 89, 200, 93, 253, 239, 27, 222, 170, 177, 213, 83,
+            119, 187, 33, 203, 82, 158, 22, 19, 215, 138, 247, 189, 51,
+        ],
+    ],
+    [
+        [
+            117, 125, 50, 157, 49, 226, 157, 252, 37, 2, 218, 196, 79, 208, 204, 122, 201, 107,
+            136, 149, 22, 194, 213, 162, 66, 123, 132, 115, 191, 180, 83, 48,
+        ],
+        [
+            210, 19, 161, 243, 101, 177, 187, 16, 121, 148, 102, 119, 222, 135, 3, 199, 122, 151,
+            166, 149, 140, 235, 66, 227, 102, 181, 160, 237, 201, 144, 179, 11,
+        ],
+        [
+            62, 110, 127, 32, 13, 245, 200, 232, 109, 85, 27, 78, 90, 105, 51, 16, 209, 176, 250,
+            162, 217, 67, 168, 73, 143, 84, 9, 68, 225, 83, 207, 18,
+        ],
+        [
+            178, 159, 32, 19, 97, 131, 45, 209, 170, 100, 118, 101, 225, 22, 117, 148, 47, 171,
+            123, 52, 52, 31, 197, 175, 63, 62, 53, 66, 159, 86, 101, 18,
+        ],
+        [
+            32, 79, 44, 69, 64, 154, 0, 68, 192, 225, 40, 51, 90, 68, 250, 187, 184, 212, 134, 241,
+            224, 157, 188, 102, 132, 155, 170, 242, 5, 149, 109, 41,
+        ],
+        [
+            37, 1, 13, 187, 23, 69, 249, 107, 244, 132, 14, 31, 32, 38, 13, 196, 203, 148, 105, 80,
+            38, 185, 27, 200, 4, 42, 54, 47, 69, 35, 139, 47,
+        ],
+        [
+            59, 145, 155, 161, 230, 222, 9, 75, 18, 137, 208, 130, 222, 156, 205, 35, 60, 164, 30,
+            87, 239, 251, 197, 42, 175, 198, 243, 52, 153, 33, 82, 6,
+        ],
+        [
+            114, 241, 55, 63, 242, 105, 93, 232, 30, 144, 103, 214, 145, 231, 247, 5, 39, 81, 213,
+            224, 233, 54, 143, 86, 24, 239, 152, 241, 22, 3, 88, 48,
+        ],
+    ],
+    [
+        [
+            183, 73, 223, 229, 216, 181, 22, 14, 160, 107, 224, 122, 232, 129, 32, 164, 185, 28,
+            237, 169, 30, 220, 109, 105, 222, 16, 150, 199, 169, 98, 178, 63,
+        ],
+        [
+            254, 59, 102, 135, 221, 217, 120, 25, 70, 142, 180, 143, 18, 32, 76, 155, 27, 126, 85,
+            209, 54, 41, 226, 146, 61, 60, 90, 93, 148, 65, 13, 54,
+        ],
+        [
+            45, 111, 189, 160, 179, 174, 50, 59, 44, 37, 174, 101, 210, 22, 94, 248, 230, 247, 218,
+            200, 245, 206, 106, 137, 52, 245, 230, 142, 169, 163, 134, 18,
+        ],
+        [
+            217, 173, 14, 202, 213, 119, 164, 85, 177, 132, 83, 40, 249, 158, 172, 93, 210, 45,
+            244, 253, 247, 227, 38, 252, 226, 240, 65, 163, 106, 29, 22, 19,
+        ],
+        [
+            249, 69, 144, 252, 245, 20, 125, 73, 213, 219, 120, 12, 11, 216, 108, 111, 107, 17, 24,
+            126, 242, 50, 77, 245, 180, 66, 194, 195, 136, 0, 179, 36,
+        ],
+        [
+            110, 175, 70, 254, 167, 151, 104, 91, 126, 243, 201, 150, 21, 231, 172, 247, 188, 206,
+            194, 88, 239, 32, 83, 81, 239, 114, 164, 154, 166, 82, 47, 46,
+        ],
+        [
+            1, 177, 232, 3, 140, 36, 220, 195, 191, 180, 103, 48, 18, 19, 97, 145, 66, 252, 19,
+            194, 79, 177, 227, 57, 214, 205, 227, 144, 105, 243, 49, 52,
+        ],
+        [
+            3, 30, 79, 200, 159, 73, 74, 224, 211, 118, 77, 119, 49, 6, 200, 123, 189, 29, 240, 75,
+            143, 113, 248, 126, 157, 34, 181, 40, 71, 104, 40, 29,
+        ],
+    ],
+    [
+        [
+            72, 187, 142, 33, 65, 74, 73, 237, 236, 55, 32, 61, 31, 150, 208, 1, 154, 10, 254, 203,
+            12, 136, 113, 130, 120, 149, 192, 62, 188, 20, 167, 15,
+        ],
+        [
+            34, 157, 37, 82, 105, 170, 4, 202, 92, 83, 161, 163, 61, 113, 24, 211, 35, 231, 97, 61,
+            163, 180, 214, 182, 24, 32, 57, 234, 100, 78, 115, 10,
+        ],
+        [
+            222, 232, 162, 244, 15, 70, 7, 177, 125, 48, 236, 76, 215, 103, 30, 192, 174, 174, 204,
+            26, 189, 219, 24, 120, 164, 196, 186, 112, 232, 17, 41, 50,
+        ],
+        [
+            55, 110, 18, 103, 80, 146, 54, 15, 36, 53, 114, 18, 77, 124, 197, 206, 106, 215, 86,
+            197, 102, 199, 200, 42, 27, 9, 93, 246, 79, 0, 67, 25,
+        ],
+        [
+            121, 169, 86, 133, 108, 129, 219, 189, 34, 211, 101, 130, 74, 34, 13, 81, 14, 110, 214,
+            84, 27, 61, 84, 26, 29, 50, 181, 52, 167, 142, 120, 34,
+        ],
+        [
+            124, 171, 39, 168, 104, 172, 63, 79, 108, 178, 191, 149, 140, 79, 124, 216, 131, 183,
+            186, 128, 242, 182, 167, 255, 103, 148, 242, 122, 64, 230, 71, 7,
+        ],
+        [
+            56, 174, 182, 231, 135, 215, 66, 103, 46, 120, 92, 118, 249, 203, 107, 149, 58, 138,
+            148, 91, 58, 39, 142, 88, 196, 91, 44, 213, 184, 39, 132, 40,
+        ],
+        [
+            185, 195, 19, 33, 60, 2, 123, 172, 104, 179, 183, 244, 19, 202, 190, 127, 167, 133,
+            136, 102, 193, 29, 212, 214, 123, 183, 156, 205, 192, 198, 35, 43,
+        ],
+    ],
+    [
+        [
+            205, 83, 71, 183, 1, 24, 115, 206, 228, 111, 5, 241, 177, 42, 216, 40, 155, 197, 81,
+            205, 133, 76, 236, 36, 117, 185, 253, 103, 120, 35, 65, 21,
+        ],
+        [
+            166, 215, 18, 12, 156, 184, 129, 59, 129, 189, 191, 109, 255, 117, 116, 255, 94, 69,
+            20, 76, 50, 5, 87, 157, 165, 64, 83, 3, 196, 27, 19, 22,
+        ],
+        [
+            140, 139, 130, 83, 133, 157, 114, 126, 234, 212, 116, 154, 64, 173, 80, 56, 16, 61,
+            108, 202, 102, 96, 21, 247, 144, 174, 45, 27, 201, 147, 225, 41,
+        ],
+        [
+            62, 87, 186, 240, 132, 207, 51, 133, 39, 103, 81, 145, 73, 139, 31, 131, 59, 209, 176,
+            139, 208, 186, 233, 247, 155, 252, 144, 3, 44, 85, 252, 49,
+        ],
+        [
+            138, 130, 218, 32, 216, 172, 47, 195, 15, 48, 92, 183, 94, 116, 144, 79, 223, 127, 155,
+            136, 39, 119, 64, 30, 182, 98, 54, 118, 54, 223, 150, 27,
+        ],
+        [
+            206, 25, 234, 10, 64, 70, 6, 217, 31, 179, 247, 5, 7, 239, 139, 168, 33, 169, 35, 190,
+            246, 31, 225, 27, 22, 85, 217, 211, 42, 112, 105, 39,
+        ],
+        [
+            216, 56, 84, 211, 144, 154, 176, 88, 174, 154, 110, 176, 208, 88, 132, 35, 157, 174,
+            230, 171, 136, 232, 84, 14, 237, 218, 16, 49, 179, 160, 234, 50,
+        ],
+        [
+            183, 99, 245, 70, 190, 152, 145, 87, 35, 163, 196, 71, 172, 58, 205, 155, 160, 103, 8,
+            85, 57, 175, 88, 31, 88, 49, 206, 162, 16, 155, 23, 25,
+        ],
+    ],
+    [
+        [
+            74, 149, 239, 189, 114, 65, 210, 77, 46, 82, 98, 194, 14, 133, 94, 49, 40, 152, 91, 50,
+            5, 164, 18, 226, 135, 94, 2, 125, 175, 41, 120, 51,
+        ],
+        [
+            181, 143, 178, 114, 48, 133, 23, 9, 63, 217, 111, 235, 184, 251, 15, 60, 148, 101, 59,
+            45, 88, 219, 28, 83, 26, 229, 124, 153, 156, 77, 168, 40,
+        ],
+        [
+            171, 22, 216, 53, 16, 224, 251, 108, 191, 93, 174, 150, 237, 239, 25, 5, 125, 60, 159,
+            39, 193, 135, 180, 109, 3, 224, 127, 206, 115, 24, 224, 45,
+        ],
+        [
+            200, 41, 189, 233, 227, 16, 222, 59, 153, 138, 79, 11, 196, 111, 162, 29, 146, 83, 220,
+            255, 1, 10, 130, 58, 243, 8, 93, 230, 33, 87, 48, 41,
+        ],
+        [
+            181, 159, 33, 60, 68, 174, 209, 207, 203, 92, 245, 243, 74, 170, 154, 1, 43, 160, 52,
+            194, 210, 27, 145, 30, 99, 172, 27, 249, 71, 223, 104, 50,
+        ],
+        [
+            175, 5, 60, 58, 189, 14, 246, 123, 78, 49, 84, 221, 109, 65, 185, 93, 36, 88, 96, 86,
+            61, 236, 119, 23, 27, 100, 94, 165, 136, 114, 128, 4,
+        ],
+        [
+            150, 74, 80, 139, 229, 38, 87, 70, 245, 190, 92, 10, 211, 22, 165, 73, 143, 143, 126,
+            177, 23, 53, 219, 247, 31, 38, 25, 182, 158, 244, 20, 50,
+        ],
+        [
+            18, 209, 127, 187, 128, 0, 119, 101, 205, 210, 31, 119, 197, 0, 221, 229, 203, 212, 62,
+            55, 237, 254, 101, 158, 122, 176, 42, 150, 232, 45, 7, 41,
+        ],
+    ],
+    [
+        [
+            36, 137, 204, 219, 0, 154, 63, 247, 215, 165, 137, 105, 28, 105, 38, 4, 193, 135, 137,
+            132, 73, 32, 75, 1, 172, 186, 105, 126, 155, 9, 234, 27,
+        ],
+        [
+            79, 123, 106, 34, 65, 148, 102, 212, 37, 226, 26, 177, 218, 65, 92, 191, 248, 14, 27,
+            239, 91, 204, 175, 13, 75, 172, 17, 69, 134, 139, 96, 52,
+        ],
+        [
+            78, 188, 220, 59, 5, 149, 96, 230, 10, 117, 245, 26, 174, 111, 27, 186, 139, 178, 228,
+            214, 35, 5, 223, 223, 57, 100, 118, 222, 159, 1, 163, 53,
+        ],
+        [
+            73, 71, 233, 100, 247, 29, 45, 142, 28, 138, 200, 24, 17, 39, 182, 140, 255, 159, 152,
+            94, 75, 170, 3, 92, 75, 65, 27, 18, 222, 2, 33, 3,
+        ],
+        [
+            13, 222, 43, 60, 116, 40, 239, 164, 101, 201, 242, 163, 153, 35, 237, 50, 242, 156,
+            223, 180, 148, 126, 6, 177, 165, 110, 139, 226, 231, 8, 145, 59,
+        ],
+        [
+            246, 117, 29, 220, 85, 113, 129, 150, 184, 4, 247, 10, 172, 74, 103, 73, 108, 4, 201,
+            86, 25, 60, 29, 231, 244, 96, 57, 30, 146, 122, 223, 12,
+        ],
+        [
+            23, 172, 62, 0, 141, 188, 233, 62, 34, 177, 96, 95, 247, 236, 50, 170, 113, 178, 151,
+            44, 48, 184, 93, 237, 208, 5, 168, 49, 109, 16, 21, 4,
+        ],
+        [
+            143, 110, 28, 202, 250, 200, 195, 38, 9, 224, 117, 239, 53, 6, 222, 247, 231, 173, 228,
+            210, 251, 2, 14, 133, 86, 139, 194, 14, 184, 178, 31, 42,
+        ],
+    ],
+    [
+        [
+            105, 82, 47, 89, 25, 103, 11, 249, 66, 111, 188, 87, 78, 135, 150, 100, 113, 159, 209,
+            41, 242, 37, 25, 215, 250, 132, 205, 49, 100, 113, 42, 32,
+        ],
+        [
+            124, 198, 51, 229, 215, 184, 224, 251, 79, 26, 84, 35, 213, 164, 170, 39, 215, 255,
+            210, 173, 169, 81, 244, 105, 176, 249, 37, 191, 25, 6, 190, 16,
+        ],
+        [
+            253, 151, 83, 116, 230, 52, 110, 206, 147, 81, 170, 96, 182, 189, 181, 35, 18, 118,
+            175, 63, 93, 201, 248, 55, 129, 200, 104, 11, 160, 47, 4, 30,
+        ],
+        [
+            28, 3, 12, 229, 152, 219, 186, 100, 206, 36, 225, 30, 34, 30, 108, 68, 21, 196, 136,
+            120, 225, 83, 116, 203, 0, 85, 160, 6, 105, 42, 13, 61,
+        ],
+        [
+            191, 116, 153, 77, 233, 2, 241, 126, 83, 78, 152, 251, 93, 112, 49, 221, 130, 19, 135,
+            243, 251, 24, 111, 131, 88, 152, 29, 20, 167, 247, 113, 7,
+        ],
+        [
+            124, 91, 25, 231, 114, 60, 237, 33, 75, 74, 25, 161, 83, 19, 39, 229, 183, 41, 5, 224,
+            4, 248, 170, 42, 77, 249, 106, 245, 84, 62, 169, 48,
+        ],
+        [
+            91, 157, 52, 245, 165, 35, 240, 158, 137, 167, 246, 18, 171, 56, 55, 19, 42, 145, 226,
+            167, 56, 65, 165, 215, 46, 42, 69, 158, 208, 251, 37, 10,
+        ],
+        [
+            89, 198, 136, 103, 162, 233, 140, 72, 172, 240, 202, 112, 189, 124, 240, 96, 250, 141,
+            169, 63, 77, 47, 203, 146, 57, 89, 123, 126, 54, 233, 83, 45,
+        ],
+    ],
+    [
+        [
+            178, 16, 104, 36, 221, 99, 174, 215, 73, 246, 184, 112, 42, 211, 233, 124, 101, 17,
+            215, 164, 187, 122, 244, 216, 15, 188, 20, 190, 255, 89, 108, 13,
+        ],
+        [
+            211, 185, 13, 171, 251, 160, 220, 120, 214, 182, 153, 128, 218, 152, 221, 223, 133,
+            255, 100, 20, 188, 224, 61, 176, 23, 208, 137, 116, 1, 33, 3, 53,
+        ],
+        [
+            39, 18, 157, 171, 253, 120, 243, 71, 172, 2, 132, 76, 83, 210, 103, 104, 67, 120, 60,
+            58, 145, 252, 20, 90, 44, 3, 245, 247, 95, 6, 243, 2,
+        ],
+        [
+            228, 125, 115, 84, 131, 131, 169, 92, 51, 15, 82, 112, 8, 204, 91, 222, 203, 208, 109,
+            111, 14, 59, 28, 244, 46, 35, 144, 69, 212, 66, 200, 44,
+        ],
+        [
+            124, 115, 67, 210, 197, 53, 11, 153, 55, 71, 208, 74, 42, 181, 140, 0, 21, 155, 176,
+            20, 255, 136, 77, 238, 59, 70, 25, 25, 41, 180, 112, 22,
+        ],
+        [
+            124, 61, 201, 115, 14, 189, 176, 115, 124, 24, 53, 163, 232, 123, 121, 50, 30, 56, 161,
+            52, 120, 136, 33, 134, 184, 16, 182, 31, 222, 26, 199, 41,
+        ],
+        [
+            151, 34, 213, 29, 165, 116, 149, 163, 134, 111, 30, 119, 195, 252, 137, 89, 146, 206,
+            18, 82, 141, 247, 3, 130, 205, 69, 224, 189, 21, 55, 114, 62,
+        ],
+        [
+            241, 243, 198, 132, 63, 204, 196, 163, 230, 17, 248, 158, 98, 188, 208, 23, 173, 12,
+            187, 227, 73, 242, 34, 237, 83, 236, 73, 86, 135, 201, 77, 14,
+        ],
+    ],
+    [
+        [
+            80, 161, 16, 201, 18, 107, 180, 237, 109, 13, 229, 253, 142, 231, 128, 185, 249, 180,
+            210, 192, 126, 126, 137, 247, 97, 233, 118, 230, 208, 44, 147, 42,
+        ],
+        [
+            65, 106, 220, 93, 202, 7, 140, 37, 78, 54, 13, 227, 12, 189, 35, 252, 207, 100, 130,
+            146, 10, 104, 219, 121, 127, 229, 170, 22, 88, 108, 181, 14,
+        ],
+        [
+            2, 157, 209, 112, 135, 200, 85, 220, 218, 10, 173, 98, 35, 244, 80, 103, 141, 49, 254,
+            61, 207, 4, 33, 214, 195, 150, 60, 163, 222, 156, 239, 42,
+        ],
+        [
+            37, 211, 37, 147, 184, 166, 133, 18, 236, 217, 52, 134, 76, 157, 193, 88, 141, 231, 1,
+            140, 111, 174, 181, 143, 125, 159, 79, 19, 199, 246, 202, 46,
+        ],
+        [
+            110, 207, 189, 175, 189, 39, 143, 75, 162, 13, 195, 173, 70, 132, 116, 211, 227, 67,
+            222, 87, 179, 3, 179, 208, 95, 26, 97, 57, 79, 162, 109, 4,
+        ],
+        [
+            190, 104, 106, 225, 88, 186, 197, 168, 57, 237, 224, 17, 25, 24, 12, 68, 144, 195, 156,
+            140, 139, 148, 115, 239, 237, 123, 99, 173, 243, 43, 36, 50,
+        ],
+        [
+            195, 129, 0, 72, 233, 178, 136, 47, 186, 117, 240, 197, 103, 82, 186, 53, 108, 10, 230,
+            147, 5, 91, 174, 204, 254, 223, 40, 243, 120, 135, 80, 5,
+        ],
+        [
+            114, 139, 243, 114, 81, 82, 185, 45, 160, 204, 55, 76, 56, 73, 96, 173, 89, 180, 187,
+            248, 217, 29, 209, 242, 49, 222, 223, 187, 79, 31, 171, 18,
+        ],
+    ],
+    [
+        [
+            145, 189, 93, 77, 84, 187, 100, 38, 15, 134, 76, 143, 117, 175, 58, 183, 67, 205, 108,
+            48, 80, 218, 140, 116, 209, 197, 219, 206, 218, 56, 117, 43,
+        ],
+        [
+            109, 207, 168, 80, 126, 16, 71, 172, 63, 120, 145, 32, 80, 61, 208, 2, 58, 77, 68, 17,
+            180, 162, 200, 232, 13, 185, 148, 170, 212, 169, 215, 35,
+        ],
+        [
+            116, 165, 185, 42, 50, 205, 109, 251, 128, 151, 207, 144, 214, 147, 123, 160, 138, 32,
+            10, 144, 97, 19, 182, 103, 58, 146, 207, 54, 85, 210, 161, 37,
+        ],
+        [
+            190, 55, 212, 35, 164, 202, 202, 234, 154, 4, 6, 112, 209, 150, 66, 114, 203, 36, 203,
+            24, 252, 175, 4, 184, 42, 158, 195, 232, 251, 59, 242, 4,
+        ],
+        [
+            204, 229, 51, 68, 126, 85, 72, 53, 106, 2, 172, 19, 37, 238, 62, 101, 89, 96, 245, 177,
+            177, 40, 170, 245, 147, 72, 141, 93, 233, 146, 36, 41,
+        ],
+        [
+            75, 158, 246, 21, 51, 72, 3, 237, 77, 75, 117, 247, 101, 125, 14, 129, 23, 180, 190,
+            49, 57, 32, 223, 224, 65, 205, 113, 48, 119, 203, 73, 13,
+        ],
+        [
+            208, 136, 26, 159, 242, 113, 111, 175, 113, 163, 69, 66, 131, 170, 224, 157, 61, 229,
+            222, 185, 61, 153, 133, 149, 167, 215, 195, 134, 97, 137, 168, 7,
+        ],
+        [
+            35, 33, 104, 95, 155, 119, 101, 133, 53, 48, 169, 224, 62, 138, 152, 3, 245, 213, 187,
+            253, 52, 0, 26, 40, 13, 50, 41, 224, 161, 121, 194, 25,
+        ],
+    ],
+    [
+        [
+            47, 30, 245, 11, 248, 255, 82, 126, 62, 107, 70, 78, 38, 130, 69, 145, 206, 99, 157,
+            171, 184, 143, 155, 226, 182, 81, 109, 192, 179, 104, 10, 5,
+        ],
+        [
+            146, 17, 30, 231, 169, 68, 47, 50, 8, 250, 194, 198, 195, 213, 98, 37, 31, 151, 214,
+            53, 11, 76, 106, 27, 111, 214, 28, 89, 231, 124, 141, 52,
+        ],
+        [
+            95, 57, 186, 20, 37, 9, 249, 188, 111, 199, 138, 164, 67, 210, 204, 91, 242, 253, 155,
+            129, 139, 172, 35, 247, 62, 243, 90, 81, 121, 132, 189, 6,
+        ],
+        [
+            105, 51, 164, 127, 16, 30, 56, 76, 170, 213, 193, 77, 27, 136, 146, 19, 173, 117, 146,
+            9, 37, 22, 57, 185, 117, 113, 162, 145, 197, 99, 233, 17,
+        ],
+        [
+            18, 116, 253, 121, 151, 86, 62, 152, 186, 6, 124, 197, 101, 205, 63, 23, 49, 25, 157,
+            126, 62, 113, 25, 189, 85, 126, 171, 171, 18, 221, 252, 14,
+        ],
+        [
+            220, 42, 220, 82, 18, 237, 116, 250, 56, 130, 90, 202, 56, 16, 179, 88, 145, 64, 230,
+            133, 33, 198, 236, 106, 36, 38, 14, 226, 74, 203, 58, 31,
+        ],
+        [
+            210, 176, 102, 53, 106, 223, 246, 149, 22, 171, 229, 252, 194, 239, 188, 94, 104, 4,
+            85, 107, 98, 2, 197, 254, 9, 22, 10, 5, 27, 190, 151, 23,
+        ],
+        [
+            0, 241, 127, 167, 92, 61, 119, 20, 244, 167, 64, 241, 70, 140, 148, 165, 70, 67, 44,
+            248, 244, 214, 61, 129, 117, 226, 122, 157, 119, 133, 48, 47,
+        ],
+    ],
+    [
+        [
+            4, 166, 155, 39, 140, 2, 252, 205, 171, 177, 125, 47, 117, 177, 191, 55, 138, 148, 78,
+            33, 229, 205, 154, 132, 232, 72, 20, 229, 53, 63, 67, 1,
+        ],
+        [
+            43, 67, 59, 76, 240, 46, 123, 207, 242, 176, 122, 211, 255, 12, 219, 60, 231, 75, 3,
+            190, 18, 41, 212, 251, 73, 151, 103, 120, 1, 191, 0, 61,
+        ],
+        [
+            164, 33, 177, 27, 105, 174, 60, 4, 88, 15, 206, 165, 57, 125, 25, 243, 39, 137, 109,
+            142, 161, 29, 42, 203, 207, 57, 81, 16, 220, 148, 100, 21,
+        ],
+        [
+            86, 4, 190, 246, 52, 129, 210, 172, 1, 30, 55, 220, 143, 98, 235, 140, 53, 209, 102,
+            196, 193, 10, 74, 160, 177, 42, 223, 127, 16, 244, 124, 43,
+        ],
+        [
+            225, 192, 141, 226, 121, 140, 180, 82, 60, 53, 207, 158, 159, 8, 14, 9, 102, 180, 3,
+            194, 72, 45, 23, 138, 183, 92, 239, 11, 125, 218, 124, 43,
+        ],
+        [
+            210, 37, 140, 143, 98, 19, 14, 69, 7, 66, 252, 22, 62, 1, 105, 251, 62, 64, 112, 99,
+            44, 135, 68, 122, 198, 118, 193, 181, 255, 3, 27, 44,
+        ],
+        [
+            109, 112, 251, 144, 181, 127, 116, 134, 187, 207, 207, 1, 197, 252, 45, 76, 205, 109,
+            209, 56, 246, 39, 46, 24, 168, 117, 187, 51, 19, 29, 254, 16,
+        ],
+        [
+            41, 4, 157, 245, 247, 94, 64, 172, 73, 69, 97, 224, 245, 58, 118, 249, 70, 15, 240,
+            218, 103, 192, 63, 244, 57, 65, 17, 184, 101, 73, 54, 23,
+        ],
+    ],
+    [
+        [
+            223, 121, 179, 93, 127, 216, 86, 9, 57, 189, 231, 203, 53, 145, 180, 21, 71, 194, 48,
+            133, 129, 176, 172, 166, 123, 28, 42, 37, 31, 173, 212, 39,
+        ],
+        [
+            97, 252, 223, 243, 58, 160, 128, 88, 43, 185, 8, 44, 130, 103, 177, 237, 69, 157, 111,
+            78, 63, 57, 32, 114, 219, 163, 133, 222, 61, 151, 15, 1,
+        ],
+        [
+            87, 137, 120, 152, 128, 145, 204, 40, 45, 237, 31, 59, 55, 93, 175, 210, 241, 170, 176,
+            158, 7, 255, 88, 212, 241, 219, 18, 54, 48, 199, 196, 44,
+        ],
+        [
+            81, 107, 25, 136, 211, 131, 229, 141, 146, 243, 163, 237, 205, 129, 199, 145, 87, 14,
+            174, 129, 183, 238, 77, 141, 121, 253, 106, 221, 225, 141, 103, 17,
+        ],
+        [
+            120, 243, 252, 105, 134, 235, 87, 145, 113, 190, 201, 93, 193, 90, 249, 234, 193, 81,
+            34, 140, 7, 203, 62, 86, 125, 80, 123, 82, 45, 120, 93, 36,
+        ],
+        [
+            176, 225, 11, 228, 191, 111, 178, 190, 132, 153, 247, 238, 219, 222, 128, 45, 71, 169,
+            21, 91, 143, 139, 185, 103, 36, 80, 67, 247, 92, 81, 114, 60,
+        ],
+        [
+            46, 51, 237, 55, 50, 4, 48, 16, 121, 192, 74, 147, 225, 127, 46, 7, 30, 33, 157, 42,
+            180, 248, 143, 133, 220, 169, 31, 97, 123, 19, 197, 59,
+        ],
+        [
+            53, 95, 71, 61, 252, 230, 199, 192, 101, 235, 194, 218, 126, 23, 13, 236, 119, 146,
+            143, 214, 170, 112, 252, 186, 39, 146, 13, 77, 80, 26, 43, 2,
+        ],
+    ],
+    [
+        [
+            195, 118, 63, 33, 37, 85, 102, 80, 239, 150, 164, 82, 197, 241, 150, 118, 81, 249, 223,
+            22, 176, 48, 64, 204, 129, 146, 89, 37, 67, 13, 74, 58,
+        ],
+        [
+            112, 91, 136, 133, 7, 92, 221, 205, 91, 29, 20, 95, 248, 102, 106, 68, 55, 33, 118,
+            193, 186, 96, 165, 163, 182, 85, 13, 172, 167, 209, 67, 42,
+        ],
+        [
+            185, 151, 20, 57, 185, 10, 140, 226, 229, 3, 62, 149, 145, 79, 245, 205, 231, 76, 63,
+            185, 204, 149, 10, 177, 137, 198, 113, 73, 27, 48, 163, 7,
+        ],
+        [
+            230, 103, 185, 235, 217, 108, 170, 98, 162, 251, 153, 175, 197, 188, 220, 123, 235,
+            208, 223, 14, 130, 63, 50, 43, 131, 150, 88, 170, 22, 35, 87, 0,
+        ],
+        [
+            81, 131, 168, 216, 91, 18, 186, 77, 201, 236, 192, 208, 33, 151, 172, 185, 157, 9, 217,
+            168, 236, 212, 186, 230, 81, 30, 93, 12, 24, 4, 131, 26,
+        ],
+        [
+            64, 149, 92, 20, 249, 203, 232, 169, 227, 78, 195, 114, 204, 188, 117, 59, 24, 140,
+            204, 4, 219, 168, 195, 253, 1, 160, 217, 236, 163, 20, 243, 25,
+        ],
+        [
+            82, 173, 48, 198, 187, 239, 155, 12, 9, 47, 144, 166, 182, 114, 36, 252, 94, 193, 225,
+            248, 141, 255, 176, 14, 91, 174, 31, 140, 18, 42, 62, 3,
+        ],
+        [
+            238, 79, 14, 238, 178, 202, 236, 102, 201, 183, 56, 152, 187, 34, 28, 114, 182, 183,
+            87, 218, 33, 167, 213, 196, 48, 234, 241, 70, 89, 76, 111, 7,
+        ],
+    ],
+    [
+        [
+            37, 232, 202, 95, 118, 254, 243, 205, 180, 127, 216, 17, 97, 148, 112, 42, 250, 84,
+            232, 146, 58, 213, 87, 229, 9, 88, 246, 40, 136, 125, 78, 10,
+        ],
+        [
+            188, 137, 225, 229, 196, 113, 43, 196, 9, 6, 41, 56, 117, 157, 202, 248, 247, 199, 69,
+            162, 105, 147, 9, 112, 133, 64, 224, 1, 2, 62, 174, 51,
+        ],
+        [
+            101, 201, 205, 179, 172, 35, 58, 167, 99, 12, 7, 229, 249, 222, 20, 75, 31, 85, 8, 65,
+            156, 35, 22, 144, 248, 121, 38, 221, 230, 17, 107, 22,
+        ],
+        [
+            210, 64, 16, 86, 168, 14, 161, 143, 205, 219, 249, 21, 227, 148, 168, 102, 248, 119,
+            181, 212, 225, 211, 79, 88, 203, 13, 216, 120, 51, 200, 192, 7,
+        ],
+        [
+            166, 155, 235, 41, 141, 202, 9, 206, 75, 25, 104, 97, 28, 239, 71, 34, 217, 225, 35,
+            10, 104, 30, 83, 184, 227, 67, 76, 14, 117, 11, 49, 4,
+        ],
+        [
+            80, 29, 16, 98, 226, 236, 172, 96, 143, 116, 127, 164, 211, 167, 195, 144, 90, 35, 30,
+            37, 175, 148, 5, 193, 47, 74, 7, 127, 248, 111, 208, 46,
+        ],
+        [
+            222, 13, 22, 172, 64, 195, 247, 45, 137, 255, 220, 206, 106, 138, 183, 118, 8, 57, 185,
+            88, 175, 128, 155, 135, 117, 242, 66, 145, 188, 95, 9, 0,
+        ],
+        [
+            52, 0, 238, 239, 30, 191, 93, 152, 16, 76, 27, 30, 98, 136, 166, 19, 138, 0, 139, 247,
+            149, 8, 220, 50, 201, 182, 229, 239, 136, 191, 87, 4,
+        ],
+    ],
+    [
+        [
+            105, 215, 131, 127, 67, 108, 143, 18, 162, 181, 248, 61, 218, 82, 232, 43, 171, 70,
+            102, 12, 197, 231, 57, 224, 87, 132, 189, 40, 174, 67, 205, 23,
+        ],
+        [
+            193, 35, 208, 49, 156, 76, 127, 125, 37, 174, 206, 28, 23, 74, 214, 223, 88, 221, 47,
+            248, 110, 251, 2, 41, 38, 65, 45, 19, 179, 187, 63, 24,
+        ],
+        [
+            178, 98, 110, 6, 17, 23, 79, 37, 105, 148, 237, 89, 194, 184, 226, 85, 19, 158, 126,
+            112, 157, 16, 240, 153, 60, 195, 46, 172, 150, 229, 162, 31,
+        ],
+        [
+            167, 160, 123, 55, 171, 70, 72, 120, 175, 85, 129, 30, 118, 187, 31, 35, 13, 168, 186,
+            193, 81, 56, 60, 32, 132, 242, 55, 150, 126, 46, 209, 22,
+        ],
+        [
+            216, 130, 207, 144, 87, 74, 175, 79, 231, 2, 123, 17, 64, 227, 169, 21, 190, 76, 35,
+            230, 219, 83, 211, 189, 109, 218, 239, 234, 76, 117, 33, 56,
+        ],
+        [
+            118, 63, 187, 184, 88, 54, 195, 72, 172, 236, 147, 107, 35, 109, 68, 57, 16, 172, 137,
+            76, 60, 158, 232, 92, 36, 25, 85, 135, 175, 81, 53, 26,
+        ],
+        [
+            187, 33, 86, 227, 140, 59, 212, 98, 155, 221, 32, 11, 9, 134, 134, 226, 5, 117, 206,
+            129, 177, 250, 255, 43, 238, 111, 101, 79, 223, 221, 163, 29,
+        ],
+        [
+            77, 49, 10, 237, 205, 191, 201, 163, 163, 225, 93, 46, 239, 70, 220, 239, 203, 63, 156,
+            198, 130, 51, 176, 113, 190, 109, 84, 182, 74, 59, 114, 39,
+        ],
+    ],
+    [
+        [
+            74, 223, 30, 129, 173, 226, 128, 237, 41, 212, 70, 197, 194, 114, 220, 197, 31, 248,
+            240, 233, 234, 74, 76, 155, 238, 120, 92, 217, 121, 41, 54, 37,
+        ],
+        [
+            51, 18, 252, 47, 138, 218, 156, 211, 146, 28, 232, 59, 4, 122, 229, 8, 158, 30, 122,
+            176, 61, 43, 138, 102, 233, 3, 30, 53, 210, 16, 238, 55,
+        ],
+        [
+            13, 204, 107, 141, 43, 181, 190, 161, 141, 7, 221, 249, 6, 181, 19, 141, 27, 119, 205,
+            25, 130, 213, 121, 24, 22, 224, 51, 59, 144, 90, 149, 49,
+        ],
+        [
+            133, 62, 165, 170, 251, 128, 218, 36, 124, 28, 187, 255, 156, 154, 117, 121, 8, 219,
+            124, 166, 67, 248, 133, 158, 87, 87, 170, 11, 207, 38, 240, 58,
+        ],
+        [
+            199, 143, 63, 27, 146, 11, 253, 73, 185, 122, 150, 33, 197, 181, 179, 42, 189, 194,
+            184, 127, 35, 251, 33, 206, 226, 117, 218, 153, 62, 40, 165, 27,
+        ],
+        [
+            221, 43, 193, 158, 219, 220, 86, 127, 115, 33, 220, 90, 187, 231, 111, 152, 51, 78,
+            106, 32, 181, 71, 184, 57, 181, 23, 124, 156, 31, 201, 147, 36,
+        ],
+        [
+            64, 246, 138, 146, 102, 47, 250, 226, 46, 41, 105, 241, 112, 20, 248, 250, 148, 165, 0,
+            187, 7, 146, 141, 190, 104, 164, 180, 143, 101, 173, 100, 1,
+        ],
+        [
+            201, 115, 121, 111, 136, 21, 12, 57, 218, 66, 99, 202, 42, 227, 3, 27, 78, 20, 74, 12,
+            214, 4, 15, 4, 124, 34, 162, 49, 225, 225, 84, 35,
+        ],
+    ],
+    [
+        [
+            159, 111, 158, 169, 189, 141, 8, 1, 137, 192, 3, 165, 87, 99, 174, 203, 182, 162, 63,
+            5, 133, 2, 254, 170, 26, 95, 119, 225, 150, 113, 216, 42,
+        ],
+        [
+            191, 94, 75, 194, 137, 49, 195, 153, 50, 60, 153, 207, 98, 138, 2, 142, 34, 80, 150,
+            253, 239, 160, 29, 220, 153, 59, 121, 254, 188, 74, 125, 24,
+        ],
+        [
+            65, 69, 79, 44, 99, 131, 67, 225, 79, 150, 152, 86, 182, 50, 214, 170, 248, 1, 143,
+            244, 5, 44, 114, 55, 193, 251, 160, 170, 252, 233, 58, 6,
+        ],
+        [
+            125, 12, 108, 193, 44, 207, 226, 157, 243, 134, 14, 10, 152, 189, 13, 84, 231, 189,
+            248, 124, 69, 182, 227, 163, 51, 137, 150, 100, 10, 149, 241, 47,
+        ],
+        [
+            119, 43, 37, 67, 59, 238, 239, 138, 18, 145, 98, 57, 167, 86, 44, 100, 66, 200, 25, 99,
+            156, 250, 80, 209, 18, 132, 112, 85, 118, 64, 126, 52,
+        ],
+        [
+            148, 161, 79, 36, 118, 111, 65, 248, 70, 153, 76, 152, 1, 51, 200, 80, 24, 160, 250,
+            83, 1, 173, 246, 44, 246, 212, 29, 165, 76, 238, 138, 29,
+        ],
+        [
+            224, 67, 53, 101, 225, 107, 169, 247, 117, 223, 10, 22, 162, 0, 68, 71, 8, 158, 253,
+            123, 54, 205, 198, 242, 213, 57, 146, 153, 136, 212, 158, 38,
+        ],
+        [
+            79, 7, 45, 28, 3, 130, 10, 184, 57, 175, 24, 207, 238, 145, 124, 114, 193, 80, 179,
+            205, 12, 85, 182, 192, 23, 119, 23, 39, 77, 105, 242, 1,
+        ],
+    ],
+    [
+        [
+            28, 128, 149, 54, 197, 184, 228, 248, 116, 22, 130, 218, 24, 0, 138, 240, 183, 99, 240,
+            12, 76, 193, 95, 150, 233, 40, 47, 24, 242, 12, 142, 47,
+        ],
+        [
+            123, 40, 155, 92, 163, 34, 144, 128, 132, 10, 205, 21, 139, 110, 152, 94, 154, 247,
+            184, 195, 162, 72, 42, 127, 9, 174, 92, 158, 164, 26, 100, 12,
+        ],
+        [
+            14, 7, 174, 73, 235, 206, 1, 187, 94, 147, 150, 246, 59, 146, 80, 158, 157, 229, 197,
+            155, 62, 159, 22, 78, 40, 29, 26, 202, 230, 40, 230, 13,
+        ],
+        [
+            195, 197, 87, 192, 158, 100, 3, 125, 177, 187, 3, 10, 2, 65, 28, 26, 39, 28, 197, 134,
+            229, 2, 112, 21, 37, 217, 82, 158, 116, 16, 94, 49,
+        ],
+        [
+            172, 162, 178, 197, 3, 150, 82, 223, 22, 71, 179, 84, 232, 56, 180, 151, 162, 65, 162,
+            143, 184, 35, 8, 61, 198, 127, 43, 26, 133, 4, 118, 13,
+        ],
+        [
+            147, 99, 145, 67, 186, 57, 231, 205, 201, 14, 157, 179, 190, 189, 149, 228, 28, 139,
+            204, 174, 82, 37, 211, 157, 181, 226, 62, 7, 23, 186, 132, 9,
+        ],
+        [
+            63, 13, 19, 112, 241, 89, 54, 26, 108, 209, 48, 226, 212, 239, 141, 183, 182, 53, 89,
+            85, 39, 159, 182, 132, 216, 155, 31, 24, 24, 227, 110, 24,
+        ],
+        [
+            132, 212, 75, 16, 39, 54, 191, 5, 93, 187, 110, 211, 100, 141, 231, 28, 174, 152, 111,
+            97, 79, 208, 247, 137, 227, 192, 138, 12, 245, 160, 126, 58,
+        ],
+    ],
+    [
+        [
+            57, 61, 34, 232, 122, 223, 251, 191, 227, 31, 48, 207, 80, 199, 85, 61, 111, 163, 170,
+            122, 178, 118, 171, 213, 158, 236, 149, 204, 21, 247, 230, 45,
+        ],
+        [
+            201, 11, 237, 229, 154, 110, 13, 228, 79, 89, 39, 129, 202, 197, 20, 88, 156, 67, 37,
+            139, 244, 101, 143, 48, 191, 179, 87, 56, 51, 163, 254, 35,
+        ],
+        [
+            189, 59, 221, 156, 135, 170, 47, 88, 37, 153, 124, 23, 240, 241, 143, 128, 239, 84,
+            129, 74, 49, 122, 130, 42, 224, 225, 49, 79, 155, 231, 138, 56,
+        ],
+        [
+            102, 84, 213, 34, 181, 199, 13, 179, 15, 120, 75, 185, 191, 243, 159, 9, 133, 227, 154,
+            101, 229, 174, 195, 60, 255, 132, 107, 167, 95, 69, 33, 4,
+        ],
+        [
+            25, 164, 67, 51, 123, 35, 90, 91, 146, 113, 171, 160, 223, 19, 224, 92, 86, 80, 199,
+            245, 3, 142, 211, 254, 49, 213, 47, 192, 189, 203, 38, 25,
+        ],
+        [
+            182, 20, 78, 172, 95, 91, 88, 232, 255, 5, 234, 10, 37, 83, 71, 199, 185, 253, 140, 85,
+            3, 212, 11, 220, 17, 49, 139, 176, 192, 166, 204, 20,
+        ],
+        [
+            45, 29, 246, 97, 225, 42, 223, 183, 126, 52, 58, 176, 37, 70, 206, 18, 3, 164, 120,
+            116, 79, 221, 183, 150, 196, 254, 148, 43, 137, 252, 28, 38,
+        ],
+        [
+            227, 92, 88, 54, 209, 207, 103, 86, 224, 243, 183, 129, 108, 83, 157, 39, 226, 85, 248,
+            33, 168, 76, 25, 24, 108, 14, 210, 193, 108, 94, 200, 37,
+        ],
+    ],
+    [
+        [
+            38, 187, 218, 84, 238, 63, 122, 136, 4, 166, 244, 7, 44, 171, 39, 199, 254, 104, 13,
+            76, 206, 106, 51, 146, 31, 98, 45, 93, 157, 232, 88, 24,
+        ],
+        [
+            50, 151, 220, 232, 125, 38, 99, 189, 183, 233, 229, 180, 209, 248, 94, 202, 124, 98,
+            68, 113, 182, 128, 225, 187, 104, 97, 240, 97, 23, 2, 78, 40,
+        ],
+        [
+            185, 234, 164, 16, 117, 218, 213, 138, 219, 251, 188, 24, 130, 13, 8, 132, 114, 179,
+            127, 8, 199, 15, 108, 123, 248, 125, 98, 114, 199, 49, 151, 29,
+        ],
+        [
+            197, 33, 58, 236, 135, 100, 72, 143, 82, 48, 152, 244, 244, 128, 244, 135, 11, 49, 99,
+            223, 13, 28, 192, 60, 14, 249, 122, 63, 10, 229, 13, 48,
+        ],
+        [
+            34, 105, 164, 85, 31, 66, 87, 61, 158, 209, 230, 70, 247, 84, 104, 45, 105, 105, 183,
+            10, 12, 208, 229, 125, 81, 87, 184, 49, 231, 76, 2, 0,
+        ],
+        [
+            203, 119, 128, 246, 182, 199, 111, 67, 47, 244, 4, 182, 195, 130, 47, 70, 1, 125, 199,
+            21, 58, 32, 136, 148, 237, 67, 244, 121, 78, 17, 162, 62,
+        ],
+        [
+            168, 51, 187, 80, 154, 99, 32, 100, 2, 198, 3, 45, 40, 246, 36, 220, 72, 108, 194, 78,
+            218, 158, 38, 131, 247, 253, 100, 240, 49, 249, 198, 23,
+        ],
+        [
+            229, 127, 250, 99, 148, 180, 224, 70, 25, 12, 182, 194, 5, 32, 145, 6, 168, 60, 183,
+            43, 56, 235, 99, 57, 251, 84, 71, 154, 221, 208, 35, 17,
+        ],
+    ],
+    [
+        [
+            135, 144, 34, 253, 72, 230, 20, 130, 152, 143, 241, 69, 97, 189, 237, 136, 2, 47, 52,
+            84, 89, 203, 68, 175, 237, 219, 177, 177, 133, 204, 76, 38,
+        ],
+        [
+            77, 97, 144, 253, 187, 106, 149, 179, 219, 51, 135, 69, 243, 163, 159, 228, 37, 201,
+            106, 187, 166, 131, 150, 20, 114, 178, 182, 177, 70, 99, 99, 53,
+        ],
+        [
+            147, 219, 248, 110, 243, 241, 185, 70, 69, 79, 14, 33, 101, 231, 193, 76, 65, 21, 253,
+            231, 70, 24, 233, 13, 131, 80, 209, 106, 209, 167, 92, 9,
+        ],
+        [
+            53, 151, 111, 202, 18, 147, 183, 105, 4, 44, 90, 43, 95, 62, 49, 201, 64, 71, 81, 226,
+            235, 224, 82, 105, 110, 95, 41, 230, 242, 67, 234, 60,
+        ],
+        [
+            175, 101, 205, 91, 4, 241, 57, 85, 193, 202, 5, 102, 39, 134, 177, 26, 219, 161, 126,
+            10, 101, 104, 156, 171, 95, 235, 65, 35, 42, 178, 106, 14,
+        ],
+        [
+            111, 115, 75, 121, 96, 212, 237, 44, 87, 85, 98, 147, 98, 58, 146, 199, 151, 7, 148,
+            211, 251, 253, 34, 26, 119, 43, 225, 118, 17, 152, 137, 4,
+        ],
+        [
+            94, 127, 124, 42, 65, 235, 150, 132, 214, 217, 183, 223, 216, 49, 160, 129, 91, 51,
+            108, 194, 1, 248, 216, 206, 78, 155, 58, 141, 66, 191, 240, 52,
+        ],
+        [
+            243, 42, 140, 79, 233, 110, 28, 104, 82, 74, 76, 228, 123, 35, 55, 147, 149, 179, 155,
+            6, 149, 83, 50, 91, 175, 204, 211, 53, 217, 190, 246, 54,
+        ],
+    ],
+    [
+        [
+            102, 58, 156, 115, 172, 173, 89, 128, 136, 214, 38, 179, 183, 156, 21, 250, 113, 241,
+            164, 127, 126, 160, 49, 210, 173, 235, 100, 32, 139, 122, 165, 35,
+        ],
+        [
+            214, 61, 123, 53, 199, 34, 204, 112, 236, 150, 157, 131, 97, 109, 159, 184, 204, 152,
+            112, 42, 171, 10, 229, 65, 150, 74, 199, 231, 228, 205, 18, 17,
+        ],
+        [
+            143, 44, 3, 188, 135, 28, 111, 222, 202, 125, 214, 208, 209, 38, 114, 207, 38, 62, 183,
+            254, 238, 120, 166, 219, 143, 85, 84, 37, 103, 96, 97, 21,
+        ],
+        [
+            148, 177, 168, 127, 63, 64, 150, 26, 15, 73, 199, 97, 136, 44, 223, 51, 113, 222, 76,
+            61, 194, 129, 250, 38, 142, 42, 116, 132, 186, 150, 171, 36,
+        ],
+        [
+            174, 26, 21, 203, 190, 33, 43, 56, 157, 185, 148, 218, 225, 226, 57, 196, 252, 222, 33,
+            9, 77, 119, 244, 185, 160, 238, 70, 231, 143, 213, 138, 23,
+        ],
+        [
+            101, 125, 198, 161, 7, 227, 60, 17, 249, 182, 87, 179, 32, 124, 66, 138, 40, 159, 28,
+            75, 177, 137, 158, 141, 246, 1, 191, 232, 164, 198, 247, 21,
+        ],
+        [
+            71, 82, 237, 89, 81, 217, 75, 98, 104, 141, 129, 130, 83, 240, 123, 156, 241, 48, 199,
+            246, 16, 136, 10, 104, 198, 185, 106, 103, 17, 47, 82, 26,
+        ],
+        [
+            129, 197, 126, 12, 63, 25, 235, 35, 94, 93, 239, 89, 127, 214, 155, 151, 103, 54, 34,
+            189, 143, 198, 178, 1, 201, 250, 74, 210, 69, 22, 148, 39,
+        ],
+    ],
+    [
+        [
+            53, 13, 65, 249, 224, 244, 4, 181, 148, 177, 238, 124, 28, 105, 189, 23, 127, 239, 162,
+            120, 47, 162, 0, 111, 49, 187, 200, 30, 158, 169, 27, 4,
+        ],
+        [
+            248, 118, 85, 63, 106, 89, 195, 84, 176, 202, 161, 63, 252, 62, 59, 40, 88, 158, 170,
+            94, 6, 72, 41, 21, 123, 85, 249, 32, 173, 229, 161, 2,
+        ],
+        [
+            103, 42, 197, 89, 189, 15, 89, 67, 61, 197, 214, 87, 86, 184, 14, 73, 217, 129, 96,
+            108, 150, 253, 197, 204, 243, 238, 213, 142, 181, 53, 122, 49,
+        ],
+        [
+            53, 243, 169, 200, 115, 180, 90, 42, 194, 45, 81, 249, 67, 229, 85, 242, 10, 164, 168,
+            32, 190, 172, 71, 122, 128, 240, 32, 64, 163, 92, 204, 18,
+        ],
+        [
+            96, 253, 241, 14, 76, 21, 60, 76, 38, 190, 1, 3, 132, 19, 108, 102, 203, 218, 19, 35,
+            233, 105, 192, 81, 249, 230, 216, 144, 18, 105, 20, 4,
+        ],
+        [
+            238, 144, 36, 34, 174, 202, 176, 61, 148, 100, 1, 105, 59, 86, 166, 59, 95, 28, 8, 172,
+            145, 46, 63, 159, 175, 159, 77, 231, 12, 155, 103, 3,
+        ],
+        [
+            201, 112, 31, 187, 183, 207, 186, 133, 24, 209, 163, 240, 219, 228, 133, 40, 55, 195,
+            146, 4, 32, 38, 192, 110, 182, 143, 71, 136, 27, 200, 108, 34,
+        ],
+        [
+            254, 24, 24, 47, 115, 110, 172, 93, 17, 177, 4, 93, 201, 121, 119, 183, 19, 248, 52,
+            86, 115, 74, 223, 106, 119, 22, 187, 194, 36, 41, 19, 57,
+        ],
+    ],
+    [
+        [
+            173, 129, 213, 38, 131, 94, 122, 115, 246, 58, 95, 40, 216, 85, 100, 239, 194, 10, 35,
+            101, 93, 146, 185, 130, 211, 233, 3, 128, 56, 90, 21, 49,
+        ],
+        [
+            86, 52, 235, 254, 233, 233, 159, 162, 150, 66, 178, 36, 195, 157, 26, 251, 29, 233,
+            171, 56, 147, 154, 194, 16, 174, 161, 56, 198, 46, 150, 78, 10,
+        ],
+        [
+            155, 220, 126, 74, 39, 181, 166, 17, 12, 176, 143, 186, 34, 74, 38, 241, 35, 77, 7, 66,
+            90, 91, 119, 241, 235, 16, 35, 188, 240, 12, 225, 44,
+        ],
+        [
+            26, 128, 31, 93, 94, 250, 172, 66, 207, 87, 203, 139, 18, 19, 180, 251, 45, 132, 118,
+            214, 142, 184, 170, 6, 129, 111, 154, 229, 206, 93, 43, 62,
+        ],
+        [
+            74, 234, 78, 87, 247, 140, 239, 158, 208, 124, 182, 64, 135, 123, 226, 208, 143, 9, 28,
+            47, 76, 49, 147, 165, 163, 173, 186, 221, 64, 18, 242, 4,
+        ],
+        [
+            102, 15, 228, 6, 109, 75, 103, 53, 235, 105, 148, 112, 14, 209, 118, 15, 206, 38, 211,
+            191, 45, 59, 17, 164, 5, 97, 207, 172, 113, 174, 151, 12,
+        ],
+        [
+            182, 198, 44, 72, 215, 80, 214, 74, 36, 187, 96, 36, 75, 122, 251, 79, 111, 141, 104,
+            211, 96, 27, 154, 137, 81, 155, 237, 118, 198, 220, 240, 36,
+        ],
+        [
+            210, 226, 153, 190, 119, 238, 200, 137, 186, 126, 198, 229, 234, 35, 61, 181, 214, 235,
+            147, 87, 205, 50, 66, 220, 36, 197, 22, 203, 224, 11, 10, 60,
+        ],
+    ],
+    [
+        [
+            9, 195, 159, 120, 189, 176, 219, 20, 99, 101, 117, 114, 93, 166, 142, 90, 52, 200, 98,
+            114, 97, 126, 34, 96, 118, 185, 215, 251, 148, 77, 87, 19,
+        ],
+        [
+            50, 130, 54, 156, 8, 243, 245, 21, 115, 243, 141, 50, 57, 163, 190, 162, 186, 254, 96,
+            21, 221, 183, 159, 19, 150, 49, 249, 178, 169, 131, 75, 56,
+        ],
+        [
+            109, 254, 22, 3, 199, 134, 177, 80, 204, 161, 10, 173, 237, 126, 178, 229, 70, 30, 3,
+            246, 202, 161, 90, 229, 160, 16, 169, 202, 104, 39, 197, 1,
+        ],
+        [
+            95, 179, 233, 6, 144, 172, 174, 142, 67, 4, 33, 137, 72, 48, 108, 152, 88, 201, 234,
+            221, 234, 154, 179, 39, 209, 113, 0, 188, 222, 32, 97, 9,
+        ],
+        [
+            175, 222, 53, 19, 156, 69, 205, 48, 91, 68, 159, 242, 127, 200, 159, 55, 242, 116, 13,
+            2, 159, 225, 193, 234, 222, 33, 114, 12, 105, 215, 17, 51,
+        ],
+        [
+            123, 223, 171, 72, 167, 121, 200, 176, 52, 160, 97, 178, 109, 5, 35, 224, 48, 106, 237,
+            8, 72, 160, 22, 211, 106, 246, 196, 217, 48, 220, 133, 7,
+        ],
+        [
+            179, 44, 209, 79, 15, 63, 82, 9, 228, 138, 76, 79, 216, 127, 147, 79, 251, 107, 235,
+            27, 89, 218, 138, 32, 150, 255, 58, 171, 187, 54, 11, 59,
+        ],
+        [
+            135, 219, 120, 88, 47, 222, 125, 235, 159, 179, 137, 207, 239, 76, 254, 182, 26, 255,
+            137, 9, 114, 170, 242, 59, 147, 178, 82, 105, 120, 163, 165, 56,
+        ],
+    ],
+    [
+        [
+            49, 245, 74, 15, 79, 151, 114, 223, 88, 204, 54, 17, 223, 211, 56, 243, 140, 147, 231,
+            194, 145, 209, 115, 122, 133, 53, 65, 38, 227, 232, 194, 1,
+        ],
+        [
+            139, 234, 196, 211, 16, 253, 195, 182, 204, 43, 70, 215, 131, 12, 156, 176, 1, 181,
+            206, 180, 185, 145, 168, 245, 102, 147, 163, 131, 54, 15, 80, 23,
+        ],
+        [
+            165, 107, 0, 13, 216, 120, 63, 220, 127, 136, 126, 22, 114, 49, 104, 34, 144, 83, 117,
+            103, 73, 69, 67, 4, 94, 122, 92, 49, 45, 19, 203, 1,
+        ],
+        [
+            57, 67, 199, 232, 154, 171, 244, 107, 180, 16, 176, 181, 58, 191, 139, 1, 236, 109,
+            133, 154, 204, 81, 197, 250, 102, 135, 191, 107, 255, 138, 122, 2,
+        ],
+        [
+            131, 246, 101, 113, 122, 177, 203, 36, 187, 253, 75, 137, 138, 91, 125, 116, 201, 131,
+            188, 164, 176, 158, 228, 168, 44, 79, 52, 106, 14, 190, 26, 15,
+        ],
+        [
+            151, 24, 233, 35, 43, 183, 63, 142, 143, 124, 217, 64, 36, 225, 65, 100, 127, 232, 86,
+            46, 96, 33, 120, 128, 99, 189, 77, 103, 75, 50, 238, 6,
+        ],
+        [
+            34, 188, 40, 2, 222, 186, 165, 32, 19, 108, 101, 182, 124, 106, 225, 221, 244, 29, 251,
+            184, 252, 107, 39, 20, 41, 194, 2, 225, 147, 17, 254, 11,
+        ],
+        [
+            163, 210, 154, 39, 136, 44, 144, 169, 139, 196, 107, 36, 58, 100, 18, 249, 234, 224,
+            179, 133, 22, 54, 204, 86, 254, 146, 34, 170, 164, 208, 141, 21,
+        ],
+    ],
+    [
+        [
+            212, 57, 196, 255, 116, 10, 198, 162, 235, 70, 204, 155, 155, 252, 182, 251, 108, 89,
+            15, 66, 200, 235, 157, 30, 193, 55, 170, 25, 48, 150, 174, 46,
+        ],
+        [
+            73, 15, 246, 147, 31, 114, 184, 23, 189, 135, 237, 223, 46, 217, 219, 63, 199, 115,
+            114, 227, 255, 93, 219, 162, 47, 89, 95, 196, 97, 180, 109, 13,
+        ],
+        [
+            45, 49, 142, 52, 248, 150, 56, 109, 99, 149, 25, 160, 166, 240, 96, 241, 94, 77, 44,
+            217, 50, 231, 124, 213, 185, 3, 125, 168, 173, 6, 149, 32,
+        ],
+        [
+            244, 199, 196, 141, 35, 8, 94, 117, 100, 81, 106, 254, 233, 180, 12, 237, 206, 142,
+            228, 141, 79, 50, 119, 16, 94, 134, 158, 85, 242, 31, 30, 28,
+        ],
+        [
+            250, 118, 28, 156, 124, 151, 194, 243, 252, 135, 49, 133, 184, 151, 1, 52, 72, 62, 209,
+            219, 159, 239, 199, 118, 233, 81, 13, 246, 154, 95, 91, 43,
+        ],
+        [
+            148, 41, 120, 124, 79, 58, 248, 13, 19, 168, 125, 163, 96, 7, 180, 190, 86, 81, 43,
+            249, 183, 109, 169, 50, 192, 65, 153, 58, 251, 95, 239, 21,
+        ],
+        [
+            5, 221, 39, 209, 61, 5, 170, 169, 239, 185, 230, 104, 97, 144, 169, 124, 53, 203, 90,
+            37, 53, 149, 7, 245, 142, 65, 195, 158, 58, 92, 201, 37,
+        ],
+        [
+            109, 213, 234, 137, 252, 160, 129, 210, 249, 154, 254, 3, 240, 28, 166, 22, 170, 196,
+            203, 240, 186, 131, 234, 216, 184, 66, 6, 144, 171, 241, 92, 1,
+        ],
+    ],
+    [
+        [
+            146, 223, 54, 195, 85, 234, 248, 34, 125, 125, 215, 25, 174, 180, 216, 60, 247, 5, 128,
+            182, 151, 217, 164, 205, 118, 170, 184, 236, 149, 62, 161, 31,
+        ],
+        [
+            158, 58, 122, 20, 197, 199, 64, 124, 63, 206, 24, 117, 236, 141, 106, 97, 204, 4, 166,
+            196, 2, 159, 166, 146, 177, 180, 47, 37, 223, 86, 168, 50,
+        ],
+        [
+            191, 163, 218, 160, 251, 127, 243, 25, 144, 88, 178, 19, 43, 249, 66, 139, 164, 15,
+            131, 116, 254, 213, 218, 126, 7, 46, 54, 49, 182, 86, 54, 49,
+        ],
+        [
+            176, 149, 25, 128, 24, 242, 7, 223, 3, 207, 221, 176, 138, 82, 192, 185, 45, 4, 156,
+            186, 96, 62, 244, 74, 238, 175, 172, 183, 208, 96, 65, 23,
+        ],
+        [
+            134, 58, 211, 81, 238, 63, 222, 132, 104, 11, 49, 26, 146, 71, 92, 37, 4, 252, 51, 65,
+            9, 121, 189, 239, 11, 47, 203, 247, 143, 50, 132, 54,
+        ],
+        [
+            7, 85, 156, 94, 147, 75, 20, 40, 58, 92, 141, 16, 69, 205, 224, 177, 209, 40, 15, 100,
+            7, 13, 58, 29, 145, 223, 215, 21, 191, 226, 26, 26,
+        ],
+        [
+            105, 133, 138, 132, 202, 221, 113, 164, 179, 179, 245, 43, 54, 164, 13, 169, 7, 52,
+            252, 75, 143, 31, 125, 18, 194, 160, 85, 116, 60, 199, 14, 15,
+        ],
+        [
+            222, 114, 216, 202, 53, 243, 194, 143, 86, 50, 1, 196, 113, 133, 21, 229, 241, 197,
+            143, 128, 57, 76, 134, 162, 241, 28, 204, 249, 86, 196, 47, 10,
+        ],
+    ],
+    [
+        [
+            140, 34, 41, 75, 234, 68, 6, 132, 20, 133, 22, 50, 10, 116, 214, 160, 101, 67, 255,
+            164, 173, 182, 183, 76, 45, 64, 169, 10, 74, 111, 151, 52,
+        ],
+        [
+            71, 77, 105, 249, 106, 189, 164, 179, 236, 36, 83, 6, 53, 110, 222, 110, 253, 41, 11,
+            117, 83, 57, 16, 185, 170, 25, 13, 28, 45, 60, 212, 15,
+        ],
+        [
+            0, 204, 125, 241, 248, 116, 213, 191, 28, 250, 46, 137, 128, 107, 187, 108, 190, 128,
+            27, 164, 49, 254, 86, 174, 177, 238, 60, 155, 114, 217, 225, 5,
+        ],
+        [
+            5, 158, 38, 49, 215, 186, 131, 56, 21, 200, 199, 31, 227, 172, 45, 39, 28, 45, 55, 159,
+            55, 126, 34, 40, 255, 233, 126, 173, 178, 210, 125, 17,
+        ],
+        [
+            113, 248, 161, 198, 225, 135, 51, 248, 203, 94, 37, 238, 150, 41, 243, 222, 105, 48,
+            92, 81, 134, 6, 41, 57, 203, 211, 57, 112, 143, 221, 240, 31,
+        ],
+        [
+            82, 243, 29, 216, 118, 139, 147, 98, 208, 80, 146, 98, 142, 127, 201, 193, 94, 5, 240,
+            169, 154, 187, 169, 187, 181, 108, 16, 176, 52, 153, 185, 40,
+        ],
+        [
+            180, 4, 216, 113, 228, 196, 165, 187, 181, 24, 182, 129, 143, 90, 54, 102, 39, 216,
+            246, 28, 202, 130, 130, 164, 164, 23, 204, 3, 93, 252, 160, 19,
+        ],
+        [
+            236, 183, 190, 138, 148, 47, 164, 106, 37, 140, 60, 83, 100, 87, 25, 94, 3, 155, 36,
+            217, 2, 9, 122, 48, 59, 74, 238, 62, 235, 254, 76, 63,
+        ],
+    ],
+    [
+        [
+            145, 2, 88, 168, 72, 120, 32, 138, 82, 71, 120, 197, 202, 217, 99, 230, 103, 161, 20,
+            69, 139, 231, 10, 20, 223, 19, 104, 101, 97, 42, 121, 13,
+        ],
+        [
+            249, 255, 74, 127, 202, 45, 113, 91, 135, 69, 14, 75, 180, 46, 26, 41, 213, 68, 168,
+            203, 107, 4, 15, 223, 81, 162, 37, 185, 230, 130, 218, 24,
+        ],
+        [
+            229, 23, 249, 95, 149, 172, 105, 186, 130, 22, 109, 90, 114, 118, 91, 227, 63, 199,
+            106, 119, 238, 16, 55, 220, 45, 208, 52, 63, 237, 194, 126, 22,
+        ],
+        [
+            236, 224, 208, 190, 253, 62, 123, 39, 67, 207, 40, 133, 104, 99, 14, 59, 29, 45, 212,
+            230, 238, 156, 59, 211, 201, 28, 6, 135, 6, 170, 41, 2,
+        ],
+        [
+            117, 186, 35, 47, 195, 87, 43, 185, 50, 136, 121, 104, 52, 109, 241, 221, 160, 100, 34,
+            72, 217, 36, 69, 240, 185, 82, 33, 24, 82, 146, 129, 22,
+        ],
+        [
+            40, 216, 70, 160, 218, 185, 168, 230, 67, 74, 241, 72, 30, 56, 73, 212, 29, 131, 210,
+            56, 61, 138, 16, 72, 74, 208, 175, 95, 233, 23, 68, 50,
+        ],
+        [
+            250, 249, 247, 170, 88, 230, 224, 198, 25, 123, 18, 15, 231, 56, 213, 167, 70, 89, 25,
+            233, 30, 104, 240, 125, 246, 136, 189, 24, 2, 217, 184, 57,
+        ],
+        [
+            80, 221, 4, 106, 97, 0, 93, 65, 187, 49, 74, 27, 59, 42, 216, 255, 178, 111, 209, 168,
+            148, 213, 149, 222, 244, 237, 45, 14, 247, 140, 147, 24,
+        ],
+    ],
+    [
+        [
+            103, 89, 59, 35, 57, 15, 73, 153, 88, 110, 137, 148, 85, 109, 160, 59, 21, 153, 234,
+            11, 211, 42, 66, 211, 68, 38, 15, 82, 233, 242, 246, 56,
+        ],
+        [
+            96, 192, 241, 71, 162, 188, 189, 54, 176, 170, 74, 155, 210, 182, 205, 213, 187, 53,
+            60, 231, 143, 251, 199, 78, 247, 216, 140, 90, 128, 175, 11, 44,
+        ],
+        [
+            10, 136, 130, 80, 243, 131, 6, 45, 149, 177, 198, 249, 148, 33, 121, 208, 241, 179,
+            254, 129, 63, 128, 87, 98, 82, 74, 178, 206, 136, 237, 177, 54,
+        ],
+        [
+            140, 174, 124, 27, 24, 16, 89, 115, 91, 12, 227, 201, 107, 37, 48, 219, 159, 96, 137,
+            160, 17, 96, 226, 109, 216, 54, 158, 68, 1, 57, 62, 21,
+        ],
+        [
+            184, 104, 44, 147, 115, 104, 146, 195, 48, 83, 156, 79, 62, 14, 137, 213, 20, 2, 64,
+            71, 19, 82, 188, 223, 162, 170, 239, 238, 32, 92, 100, 27,
+        ],
+        [
+            207, 172, 15, 212, 186, 64, 30, 3, 26, 41, 32, 48, 108, 230, 73, 168, 130, 44, 140,
+            210, 212, 140, 38, 79, 89, 154, 72, 38, 234, 29, 111, 46,
+        ],
+        [
+            169, 251, 74, 195, 182, 161, 15, 245, 9, 175, 45, 68, 112, 77, 254, 175, 101, 57, 117,
+            229, 114, 240, 162, 49, 79, 195, 76, 222, 24, 29, 205, 49,
+        ],
+        [
+            66, 42, 240, 58, 215, 243, 13, 29, 121, 8, 251, 212, 227, 43, 108, 116, 167, 146, 112,
+            29, 157, 28, 232, 63, 40, 136, 60, 181, 113, 116, 136, 9,
+        ],
+    ],
+    [
+        [
+            222, 250, 15, 159, 22, 192, 63, 242, 244, 9, 170, 199, 36, 12, 22, 135, 36, 103, 27,
+            30, 210, 19, 220, 227, 198, 202, 170, 11, 171, 226, 120, 36,
+        ],
+        [
+            13, 233, 60, 66, 94, 62, 80, 17, 51, 96, 92, 52, 194, 151, 201, 43, 145, 244, 136, 54,
+            62, 228, 178, 17, 237, 50, 43, 86, 226, 186, 205, 39,
+        ],
+        [
+            17, 178, 141, 143, 150, 198, 188, 109, 202, 15, 246, 81, 81, 23, 194, 33, 100, 215, 33,
+            38, 128, 94, 173, 211, 250, 255, 185, 53, 26, 15, 100, 1,
+        ],
+        [
+            29, 13, 207, 26, 98, 99, 13, 249, 166, 223, 134, 57, 202, 243, 56, 134, 47, 86, 77,
+            174, 126, 82, 11, 136, 206, 200, 80, 142, 133, 59, 226, 45,
+        ],
+        [
+            30, 246, 189, 45, 47, 225, 241, 181, 46, 77, 149, 202, 125, 19, 150, 189, 61, 110, 166,
+            235, 18, 47, 82, 23, 31, 253, 45, 168, 199, 197, 100, 13,
+        ],
+        [
+            163, 144, 73, 57, 237, 138, 87, 249, 81, 92, 134, 158, 7, 198, 181, 121, 235, 165, 27,
+            22, 195, 193, 81, 182, 82, 147, 125, 185, 230, 127, 212, 41,
+        ],
+        [
+            99, 53, 81, 32, 186, 67, 123, 181, 118, 216, 51, 213, 48, 132, 99, 168, 17, 212, 8,
+            180, 183, 132, 100, 75, 201, 55, 13, 103, 31, 134, 12, 29,
+        ],
+        [
+            204, 31, 149, 83, 95, 245, 53, 231, 200, 193, 124, 32, 42, 222, 91, 84, 37, 117, 53,
+            116, 166, 28, 165, 6, 7, 88, 156, 0, 217, 37, 205, 21,
+        ],
+    ],
+    [
+        [
+            133, 125, 183, 101, 61, 147, 72, 149, 191, 124, 2, 158, 189, 180, 148, 247, 242, 130,
+            157, 154, 138, 32, 39, 113, 18, 103, 212, 2, 52, 42, 150, 9,
+        ],
+        [
+            155, 153, 34, 249, 57, 253, 43, 212, 131, 227, 138, 238, 250, 38, 95, 115, 158, 179,
+            220, 114, 87, 215, 143, 24, 139, 211, 161, 25, 165, 127, 26, 46,
+        ],
+        [
+            248, 24, 188, 125, 43, 117, 180, 162, 154, 30, 111, 77, 63, 80, 222, 213, 39, 94, 105,
+            244, 205, 160, 240, 125, 127, 22, 68, 60, 4, 159, 101, 12,
+        ],
+        [
+            202, 182, 101, 247, 202, 184, 249, 165, 48, 157, 78, 244, 161, 129, 213, 241, 85, 55,
+            1, 148, 152, 20, 217, 134, 226, 216, 98, 32, 63, 115, 205, 2,
+        ],
+        [
+            12, 227, 112, 199, 148, 87, 71, 67, 63, 109, 117, 99, 32, 35, 55, 108, 13, 99, 205,
+            173, 201, 27, 223, 79, 14, 136, 251, 75, 29, 113, 7, 9,
+        ],
+        [
+            53, 122, 33, 1, 148, 172, 48, 164, 95, 139, 231, 211, 62, 152, 233, 208, 6, 67, 40,
+            162, 85, 247, 207, 27, 71, 148, 238, 1, 166, 101, 154, 35,
+        ],
+        [
+            161, 30, 55, 238, 200, 130, 23, 62, 183, 234, 222, 236, 186, 80, 177, 71, 226, 12, 18,
+            136, 149, 181, 12, 186, 197, 176, 30, 124, 178, 222, 31, 26,
+        ],
+        [
+            220, 42, 168, 151, 75, 170, 70, 232, 113, 157, 111, 72, 209, 182, 214, 18, 203, 62,
+            193, 190, 220, 44, 144, 225, 236, 250, 122, 80, 83, 193, 125, 22,
+        ],
+    ],
+    [
+        [
+            170, 49, 110, 163, 118, 15, 74, 16, 140, 62, 228, 247, 212, 253, 62, 59, 14, 30, 160,
+            139, 165, 77, 221, 157, 50, 217, 113, 202, 56, 132, 252, 23,
+        ],
+        [
+            204, 248, 203, 88, 186, 179, 102, 131, 176, 162, 204, 93, 132, 134, 140, 44, 190, 111,
+            170, 182, 182, 154, 34, 182, 72, 145, 249, 218, 227, 222, 127, 57,
+        ],
+        [
+            243, 181, 217, 123, 251, 210, 151, 17, 234, 18, 151, 41, 199, 190, 68, 25, 143, 119,
+            47, 117, 196, 126, 170, 4, 2, 92, 76, 45, 165, 7, 67, 32,
+        ],
+        [
+            78, 151, 250, 251, 145, 247, 127, 21, 8, 78, 75, 203, 87, 88, 88, 192, 254, 127, 173,
+            160, 123, 221, 115, 242, 177, 65, 250, 109, 60, 243, 66, 50,
+        ],
+        [
+            163, 204, 67, 168, 29, 250, 242, 18, 179, 78, 156, 63, 83, 213, 155, 169, 201, 141,
+            147, 39, 67, 201, 27, 185, 12, 136, 169, 136, 90, 250, 59, 61,
+        ],
+        [
+            217, 130, 254, 58, 106, 222, 13, 57, 188, 196, 184, 159, 16, 125, 101, 76, 237, 202,
+            20, 154, 36, 171, 17, 203, 30, 174, 71, 28, 49, 14, 11, 40,
+        ],
+        [
+            103, 104, 113, 172, 174, 8, 232, 248, 176, 114, 142, 202, 124, 57, 147, 248, 183, 13,
+            100, 169, 5, 175, 203, 142, 150, 76, 116, 217, 74, 87, 193, 61,
+        ],
+        [
+            106, 70, 255, 164, 171, 32, 41, 157, 50, 76, 235, 158, 79, 146, 163, 103, 55, 210, 247,
+            65, 12, 143, 226, 228, 134, 223, 111, 57, 117, 0, 158, 19,
+        ],
+    ],
+    [
+        [
+            209, 91, 126, 65, 66, 75, 243, 162, 155, 127, 161, 141, 1, 207, 59, 241, 167, 100, 208,
+            242, 202, 136, 148, 80, 250, 199, 246, 122, 195, 21, 17, 50,
+        ],
+        [
+            160, 23, 252, 146, 181, 244, 35, 83, 49, 80, 175, 137, 187, 14, 153, 154, 210, 170,
+            253, 239, 189, 159, 66, 83, 46, 47, 203, 221, 74, 96, 231, 31,
+        ],
+        [
+            255, 28, 169, 35, 131, 9, 128, 83, 53, 153, 78, 112, 201, 215, 113, 204, 14, 161, 70,
+            21, 43, 234, 162, 8, 50, 202, 178, 229, 163, 231, 75, 0,
+        ],
+        [
+            151, 7, 75, 95, 206, 3, 186, 193, 10, 216, 191, 56, 5, 241, 211, 41, 176, 163, 112,
+            226, 119, 198, 67, 29, 86, 77, 125, 189, 42, 244, 37, 63,
+        ],
+        [
+            22, 69, 53, 55, 24, 217, 190, 106, 17, 30, 46, 219, 19, 13, 91, 88, 52, 239, 230, 65,
+            172, 249, 117, 14, 212, 76, 50, 219, 63, 85, 85, 44,
+        ],
+        [
+            95, 67, 36, 155, 161, 152, 90, 49, 98, 250, 31, 40, 227, 83, 13, 63, 152, 78, 52, 55,
+            179, 174, 109, 115, 237, 188, 143, 119, 39, 205, 240, 52,
+        ],
+        [
+            191, 218, 230, 242, 222, 153, 9, 6, 184, 144, 39, 153, 17, 47, 235, 11, 156, 237, 106,
+            25, 226, 22, 204, 91, 174, 13, 118, 159, 67, 192, 180, 11,
+        ],
+        [
+            64, 139, 49, 104, 152, 44, 115, 188, 115, 244, 108, 247, 152, 36, 76, 87, 197, 145,
+            122, 252, 164, 179, 33, 139, 178, 33, 91, 180, 55, 198, 116, 28,
+        ],
+    ],
+    [
+        [
+            121, 138, 217, 165, 137, 32, 102, 122, 2, 132, 235, 209, 189, 143, 126, 154, 255, 192,
+            11, 18, 192, 180, 141, 158, 58, 213, 167, 150, 144, 12, 137, 32,
+        ],
+        [
+            37, 68, 105, 192, 246, 223, 110, 73, 212, 170, 113, 192, 94, 48, 75, 145, 180, 144, 57,
+            168, 175, 175, 116, 14, 144, 230, 2, 71, 231, 227, 93, 22,
+        ],
+        [
+            55, 239, 250, 161, 54, 154, 33, 206, 228, 249, 45, 126, 12, 187, 171, 233, 179, 141,
+            113, 128, 26, 208, 66, 163, 119, 5, 134, 70, 212, 91, 126, 25,
+        ],
+        [
+            211, 218, 167, 184, 136, 234, 50, 153, 235, 240, 121, 105, 75, 92, 134, 203, 54, 9,
+            240, 37, 132, 51, 94, 62, 227, 206, 227, 26, 232, 80, 50, 58,
+        ],
+        [
+            247, 153, 165, 91, 186, 187, 160, 101, 181, 94, 109, 64, 195, 54, 10, 53, 122, 95, 94,
+            223, 224, 187, 3, 166, 202, 12, 226, 250, 194, 230, 14, 14,
+        ],
+        [
+            84, 40, 61, 75, 7, 180, 84, 252, 149, 110, 235, 145, 230, 102, 43, 59, 84, 177, 15, 72,
+            245, 45, 100, 181, 159, 135, 73, 70, 45, 130, 23, 15,
+        ],
+        [
+            176, 95, 212, 132, 225, 23, 127, 234, 119, 13, 97, 153, 63, 184, 203, 20, 158, 129, 71,
+            212, 187, 114, 5, 66, 8, 255, 197, 184, 58, 87, 53, 46,
+        ],
+        [
+            16, 127, 94, 241, 202, 213, 70, 104, 66, 253, 252, 251, 32, 90, 82, 235, 212, 171, 176,
+            158, 111, 171, 170, 223, 21, 135, 124, 8, 2, 163, 132, 60,
+        ],
+    ],
+    [
+        [
+            227, 106, 232, 144, 99, 103, 224, 175, 110, 11, 138, 168, 36, 37, 51, 178, 223, 20,
+            214, 254, 112, 70, 96, 185, 211, 87, 83, 197, 104, 243, 216, 52,
+        ],
+        [
+            130, 229, 53, 255, 238, 87, 247, 194, 175, 43, 49, 133, 15, 9, 230, 116, 200, 212, 229,
+            179, 231, 4, 15, 203, 110, 47, 4, 130, 136, 86, 48, 49,
+        ],
+        [
+            47, 243, 195, 44, 235, 13, 162, 169, 83, 152, 125, 54, 110, 131, 234, 38, 185, 159,
+            162, 155, 244, 43, 221, 221, 205, 171, 95, 242, 148, 151, 11, 35,
+        ],
+        [
+            167, 90, 16, 27, 245, 22, 86, 47, 185, 27, 129, 85, 243, 61, 176, 192, 183, 132, 79,
+            230, 218, 19, 237, 23, 105, 124, 208, 38, 178, 255, 128, 42,
+        ],
+        [
+            254, 42, 152, 192, 222, 80, 229, 159, 80, 221, 180, 50, 154, 115, 132, 186, 232, 133,
+            81, 52, 49, 138, 192, 67, 159, 157, 6, 159, 63, 244, 18, 39,
+        ],
+        [
+            82, 238, 44, 142, 105, 250, 102, 225, 160, 86, 185, 241, 244, 228, 45, 98, 14, 6, 186,
+            3, 103, 72, 115, 129, 220, 107, 87, 25, 18, 239, 41, 61,
+        ],
+        [
+            38, 96, 137, 193, 31, 196, 122, 212, 249, 106, 137, 240, 9, 1, 244, 43, 246, 195, 28,
+            79, 40, 193, 249, 111, 177, 171, 178, 146, 5, 130, 199, 38,
+        ],
+        [
+            49, 138, 50, 43, 88, 47, 129, 40, 253, 221, 234, 179, 108, 110, 16, 164, 236, 146, 134,
+            226, 92, 142, 158, 18, 75, 148, 196, 99, 142, 193, 32, 32,
+        ],
+    ],
+    [
+        [
+            136, 222, 31, 32, 158, 114, 150, 51, 255, 249, 195, 251, 49, 203, 33, 38, 143, 117,
+            158, 139, 35, 54, 168, 163, 36, 5, 4, 24, 21, 107, 32, 8,
+        ],
+        [
+            139, 142, 184, 112, 128, 119, 77, 133, 53, 144, 84, 23, 177, 2, 187, 179, 30, 93, 90,
+            138, 73, 70, 129, 214, 185, 249, 38, 44, 114, 66, 31, 60,
+        ],
+        [
+            70, 234, 44, 237, 63, 86, 138, 80, 38, 77, 0, 237, 105, 160, 161, 106, 73, 199, 70,
+            235, 14, 227, 136, 202, 144, 196, 163, 81, 111, 106, 82, 47,
+        ],
+        [
+            40, 88, 203, 143, 239, 58, 0, 59, 249, 62, 40, 239, 19, 92, 207, 51, 252, 63, 205, 29,
+            238, 11, 59, 181, 106, 136, 22, 181, 36, 21, 177, 16,
+        ],
+        [
+            75, 228, 4, 173, 170, 140, 175, 235, 102, 195, 159, 243, 64, 41, 21, 2, 246, 29, 242,
+            42, 219, 89, 14, 181, 195, 64, 36, 206, 219, 19, 201, 43,
+        ],
+        [
+            99, 70, 84, 229, 213, 64, 250, 175, 183, 122, 91, 174, 129, 41, 175, 77, 133, 253, 111,
+            83, 20, 196, 125, 248, 230, 8, 189, 219, 198, 132, 117, 49,
+        ],
+        [
+            146, 31, 155, 47, 167, 160, 234, 249, 196, 38, 83, 35, 96, 191, 69, 232, 164, 232, 241,
+            225, 121, 189, 98, 1, 45, 228, 7, 52, 137, 87, 156, 55,
+        ],
+        [
+            160, 123, 219, 27, 246, 32, 134, 120, 16, 76, 98, 152, 240, 140, 17, 236, 43, 181, 91,
+            154, 12, 80, 78, 141, 209, 68, 179, 131, 134, 238, 214, 29,
+        ],
+    ],
+    [
+        [
+            79, 127, 50, 0, 17, 192, 72, 76, 17, 57, 216, 82, 157, 95, 86, 152, 6, 69, 246, 36,
+            130, 33, 231, 72, 62, 180, 179, 180, 172, 195, 145, 54,
+        ],
+        [
+            218, 244, 56, 14, 177, 227, 196, 223, 249, 8, 61, 252, 143, 208, 236, 117, 16, 219, 26,
+            78, 111, 76, 253, 21, 89, 97, 133, 31, 219, 214, 130, 53,
+        ],
+        [
+            224, 191, 66, 62, 230, 117, 56, 49, 22, 179, 57, 155, 161, 72, 246, 216, 122, 170, 226,
+            178, 168, 99, 213, 40, 172, 104, 214, 235, 100, 7, 215, 26,
+        ],
+        [
+            97, 165, 191, 166, 199, 215, 159, 154, 9, 200, 98, 51, 193, 16, 119, 135, 8, 248, 235,
+            220, 91, 233, 56, 169, 209, 80, 67, 28, 187, 214, 7, 1,
+        ],
+        [
+            164, 25, 209, 61, 23, 143, 33, 36, 199, 146, 9, 119, 86, 130, 161, 162, 230, 143, 172,
+            107, 133, 19, 27, 111, 25, 73, 186, 44, 49, 170, 143, 4,
+        ],
+        [
+            127, 165, 126, 108, 249, 181, 86, 104, 103, 188, 164, 130, 127, 57, 191, 189, 34, 108,
+            230, 187, 61, 35, 37, 253, 242, 59, 58, 175, 13, 120, 254, 56,
+        ],
+        [
+            29, 179, 113, 204, 88, 62, 212, 46, 48, 15, 107, 28, 234, 136, 13, 178, 148, 96, 68,
+            217, 137, 66, 14, 78, 65, 58, 220, 221, 241, 155, 202, 12,
+        ],
+        [
+            104, 142, 48, 244, 1, 124, 44, 185, 200, 192, 86, 131, 156, 158, 4, 187, 199, 14, 236,
+            54, 44, 245, 21, 182, 113, 231, 13, 142, 135, 88, 169, 36,
+        ],
+    ],
+    [
+        [
+            179, 250, 191, 143, 76, 85, 98, 204, 132, 233, 251, 175, 209, 74, 137, 39, 203, 149,
+            63, 252, 246, 49, 40, 30, 148, 93, 65, 201, 161, 49, 187, 27,
+        ],
+        [
+            203, 211, 179, 86, 16, 67, 209, 167, 214, 211, 109, 229, 33, 25, 211, 188, 130, 46,
+            186, 119, 41, 173, 245, 62, 7, 55, 108, 180, 101, 115, 125, 40,
+        ],
+        [
+            107, 22, 94, 96, 173, 204, 250, 22, 118, 142, 197, 250, 65, 193, 108, 142, 129, 40, 6,
+            13, 218, 17, 207, 193, 75, 1, 195, 27, 7, 231, 199, 17,
+        ],
+        [
+            167, 104, 62, 170, 140, 224, 10, 224, 33, 72, 34, 192, 184, 14, 139, 230, 42, 70, 2,
+            10, 88, 218, 169, 123, 65, 198, 119, 16, 205, 62, 64, 8,
+        ],
+        [
+            222, 193, 21, 182, 77, 38, 168, 6, 156, 213, 49, 108, 180, 47, 54, 151, 129, 51, 137,
+            226, 103, 85, 108, 252, 94, 11, 25, 7, 56, 87, 205, 46,
+        ],
+        [
+            55, 109, 243, 206, 205, 71, 42, 29, 223, 73, 27, 225, 255, 37, 205, 42, 134, 63, 249,
+            2, 91, 152, 44, 111, 202, 23, 173, 135, 200, 207, 39, 48,
+        ],
+        [
+            80, 30, 91, 2, 97, 101, 54, 60, 211, 197, 233, 83, 35, 26, 41, 184, 198, 11, 20, 81,
+            130, 203, 153, 178, 149, 187, 189, 223, 113, 175, 177, 27,
+        ],
+        [
+            215, 49, 5, 95, 100, 130, 208, 94, 159, 34, 242, 80, 221, 34, 75, 165, 167, 184, 118,
+            14, 8, 33, 83, 229, 192, 200, 102, 128, 209, 220, 60, 27,
+        ],
+    ],
+    [
+        [
+            19, 126, 36, 206, 173, 162, 196, 15, 59, 89, 70, 64, 231, 230, 176, 226, 171, 99, 59,
+            85, 145, 57, 65, 100, 8, 220, 66, 151, 211, 189, 26, 60,
+        ],
+        [
+            115, 58, 171, 209, 149, 12, 201, 125, 168, 145, 30, 99, 185, 185, 212, 83, 153, 170,
+            149, 248, 139, 170, 213, 67, 185, 31, 106, 163, 137, 210, 53, 40,
+        ],
+        [
+            34, 169, 41, 154, 168, 16, 208, 29, 254, 75, 80, 21, 20, 65, 127, 18, 19, 245, 106,
+            199, 144, 115, 206, 170, 49, 72, 36, 89, 242, 157, 222, 24,
+        ],
+        [
+            10, 164, 200, 254, 5, 101, 144, 74, 139, 202, 71, 210, 151, 43, 63, 228, 174, 239, 5,
+            186, 214, 250, 6, 184, 96, 120, 9, 180, 157, 21, 232, 36,
+        ],
+        [
+            75, 221, 109, 210, 3, 45, 141, 250, 189, 180, 105, 1, 74, 134, 4, 161, 180, 240, 1, 39,
+            29, 186, 183, 100, 136, 177, 251, 3, 22, 195, 45, 33,
+        ],
+        [
+            38, 154, 140, 7, 121, 70, 69, 229, 20, 92, 70, 49, 117, 230, 240, 101, 67, 40, 78, 8,
+            39, 107, 90, 224, 243, 224, 223, 88, 164, 130, 120, 59,
+        ],
+        [
+            160, 144, 216, 94, 228, 217, 167, 0, 168, 204, 30, 88, 222, 158, 9, 43, 233, 216, 234,
+            64, 127, 232, 242, 72, 60, 34, 181, 252, 16, 95, 161, 14,
+        ],
+        [
+            195, 165, 176, 79, 109, 182, 190, 127, 55, 224, 143, 82, 207, 108, 164, 169, 220, 92,
+            27, 213, 76, 95, 22, 114, 127, 200, 126, 188, 126, 178, 102, 63,
+        ],
+    ],
+    [
+        [
+            20, 117, 67, 54, 142, 82, 77, 181, 169, 181, 133, 0, 187, 243, 217, 179, 224, 159, 213,
+            10, 96, 54, 130, 18, 6, 84, 239, 195, 151, 65, 242, 59,
+        ],
+        [
+            66, 142, 85, 142, 44, 64, 147, 62, 104, 65, 106, 202, 192, 153, 90, 55, 96, 24, 20, 38,
+            217, 213, 123, 31, 237, 188, 139, 9, 182, 167, 141, 41,
+        ],
+        [
+            207, 161, 20, 7, 36, 203, 12, 135, 141, 208, 187, 91, 21, 156, 252, 230, 93, 132, 146,
+            151, 159, 100, 206, 7, 135, 147, 64, 130, 252, 100, 23, 60,
+        ],
+        [
+            228, 233, 251, 200, 117, 97, 78, 30, 62, 137, 82, 213, 118, 245, 200, 117, 106, 9, 38,
+            253, 58, 144, 26, 79, 166, 109, 144, 198, 249, 23, 101, 28,
+        ],
+        [
+            21, 198, 96, 23, 63, 237, 51, 143, 1, 191, 95, 232, 147, 215, 221, 203, 87, 163, 194,
+            245, 250, 167, 167, 1, 180, 181, 225, 154, 151, 182, 130, 37,
+        ],
+        [
+            162, 42, 88, 75, 53, 39, 117, 224, 28, 248, 100, 248, 181, 211, 65, 195, 192, 24, 84,
+            43, 12, 6, 16, 188, 98, 89, 177, 228, 205, 219, 60, 15,
+        ],
+        [
+            197, 110, 140, 5, 162, 128, 77, 192, 185, 62, 133, 220, 126, 39, 219, 148, 75, 228, 59,
+            187, 14, 230, 2, 226, 221, 103, 44, 215, 203, 191, 70, 37,
+        ],
+        [
+            212, 74, 149, 23, 162, 38, 156, 114, 238, 30, 148, 201, 74, 99, 236, 44, 254, 224, 30,
+            239, 35, 57, 37, 65, 27, 132, 100, 122, 31, 58, 109, 27,
+        ],
+    ],
+    [
+        [
+            103, 60, 139, 126, 17, 213, 197, 175, 109, 73, 72, 103, 183, 2, 168, 147, 229, 146,
+            163, 240, 237, 251, 74, 204, 173, 237, 2, 81, 217, 38, 198, 26,
+        ],
+        [
+            148, 142, 217, 114, 107, 45, 140, 245, 45, 85, 63, 184, 18, 254, 33, 98, 248, 215, 31,
+            13, 147, 228, 90, 147, 57, 118, 190, 54, 109, 166, 232, 40,
+        ],
+        [
+            111, 126, 218, 163, 215, 86, 243, 206, 178, 189, 67, 107, 168, 148, 148, 150, 207, 229,
+            162, 190, 99, 21, 204, 46, 137, 115, 14, 38, 124, 45, 7, 31,
+        ],
+        [
+            120, 94, 71, 150, 58, 223, 76, 228, 24, 222, 106, 138, 131, 141, 201, 114, 133, 81,
+            208, 146, 222, 53, 190, 188, 243, 101, 130, 69, 176, 0, 144, 19,
+        ],
+        [
+            75, 62, 208, 13, 106, 100, 175, 135, 189, 103, 31, 136, 188, 184, 155, 122, 111, 105,
+            240, 140, 7, 105, 177, 110, 64, 11, 23, 49, 104, 166, 225, 29,
+        ],
+        [
+            221, 18, 92, 158, 90, 112, 188, 28, 106, 101, 91, 243, 93, 143, 20, 223, 203, 242, 47,
+            39, 63, 111, 126, 205, 146, 55, 207, 185, 179, 128, 14, 17,
+        ],
+        [
+            120, 22, 161, 120, 221, 121, 204, 161, 46, 187, 5, 183, 89, 114, 196, 224, 8, 38, 101,
+            86, 52, 196, 8, 105, 71, 97, 245, 117, 232, 101, 1, 35,
+        ],
+        [
+            97, 176, 100, 220, 11, 5, 167, 93, 125, 197, 189, 160, 99, 38, 156, 187, 219, 103, 121,
+            132, 60, 6, 17, 51, 131, 182, 75, 89, 53, 115, 247, 33,
+        ],
+    ],
+    [
+        [
+            207, 159, 115, 155, 49, 140, 88, 106, 204, 148, 127, 110, 102, 239, 71, 50, 116, 241,
+            161, 21, 115, 188, 195, 172, 48, 25, 135, 77, 103, 11, 250, 8,
+        ],
+        [
+            53, 226, 49, 81, 131, 154, 93, 210, 99, 6, 241, 86, 41, 242, 116, 183, 23, 71, 226,
+            225, 139, 35, 254, 155, 10, 61, 253, 220, 96, 27, 229, 44,
+        ],
+        [
+            86, 73, 95, 110, 144, 237, 118, 227, 89, 133, 209, 162, 107, 24, 108, 6, 152, 8, 73,
+            47, 239, 83, 251, 156, 36, 137, 65, 184, 20, 7, 184, 25,
+        ],
+        [
+            73, 67, 2, 194, 3, 175, 147, 62, 215, 31, 179, 37, 248, 247, 228, 219, 86, 172, 138,
+            78, 149, 151, 231, 210, 135, 83, 48, 88, 17, 243, 157, 19,
+        ],
+        [
+            119, 233, 103, 230, 0, 17, 17, 12, 79, 202, 7, 142, 66, 32, 12, 216, 107, 223, 194, 82,
+            131, 194, 68, 181, 60, 242, 17, 198, 45, 147, 255, 22,
+        ],
+        [
+            13, 69, 173, 185, 175, 48, 175, 137, 106, 63, 5, 27, 54, 95, 201, 207, 229, 228, 54,
+            164, 143, 58, 78, 64, 12, 51, 195, 210, 204, 146, 64, 18,
+        ],
+        [
+            234, 84, 133, 114, 188, 84, 22, 238, 15, 80, 147, 93, 113, 197, 232, 9, 61, 181, 84, 9,
+            100, 102, 8, 232, 54, 143, 11, 7, 152, 206, 5, 40,
+        ],
+        [
+            57, 77, 249, 157, 194, 147, 228, 76, 88, 15, 59, 18, 116, 226, 216, 213, 113, 122, 13,
+            119, 238, 232, 215, 176, 140, 152, 158, 170, 241, 251, 236, 22,
+        ],
+    ],
+    [
+        [
+            254, 181, 68, 223, 236, 39, 90, 99, 37, 74, 79, 37, 4, 69, 15, 85, 227, 255, 6, 143,
+            164, 197, 83, 0, 74, 59, 37, 114, 82, 160, 183, 3,
+        ],
+        [
+            205, 219, 115, 69, 73, 42, 198, 241, 206, 18, 124, 136, 252, 166, 211, 154, 58, 167,
+            23, 6, 57, 205, 200, 210, 73, 181, 175, 33, 118, 232, 152, 61,
+        ],
+        [
+            131, 71, 36, 249, 192, 54, 50, 65, 9, 141, 95, 165, 255, 154, 54, 217, 250, 127, 68,
+            177, 131, 207, 66, 187, 46, 48, 135, 44, 198, 173, 172, 20,
+        ],
+        [
+            22, 128, 64, 66, 38, 59, 150, 29, 112, 190, 217, 120, 239, 211, 204, 253, 122, 62, 11,
+            237, 33, 29, 119, 205, 235, 253, 180, 87, 199, 230, 183, 60,
+        ],
+        [
+            122, 104, 29, 128, 154, 86, 116, 112, 241, 40, 109, 16, 144, 82, 222, 122, 172, 201,
+            75, 214, 205, 168, 32, 91, 203, 28, 46, 114, 218, 82, 18, 48,
+        ],
+        [
+            221, 10, 12, 130, 141, 9, 26, 13, 195, 232, 15, 60, 197, 192, 117, 229, 184, 110, 170,
+            92, 191, 138, 41, 66, 27, 60, 210, 156, 199, 115, 164, 56,
+        ],
+        [
+            121, 35, 54, 98, 55, 143, 52, 179, 2, 61, 161, 109, 169, 148, 239, 238, 9, 164, 231,
+            216, 160, 162, 173, 134, 231, 226, 130, 102, 239, 169, 44, 16,
+        ],
+        [
+            198, 57, 213, 12, 44, 150, 213, 163, 167, 39, 246, 18, 39, 137, 192, 35, 136, 231, 107,
+            189, 61, 27, 163, 87, 214, 83, 119, 127, 246, 239, 39, 52,
+        ],
+    ],
+    [
+        [
+            185, 73, 33, 65, 211, 14, 33, 86, 138, 6, 164, 187, 255, 69, 78, 253, 83, 184, 44, 255,
+            21, 48, 149, 155, 121, 24, 91, 115, 54, 24, 84, 62,
+        ],
+        [
+            105, 91, 120, 139, 39, 32, 121, 140, 89, 109, 59, 171, 95, 234, 21, 41, 12, 240, 246,
+            153, 66, 6, 226, 31, 80, 147, 53, 111, 250, 209, 72, 46,
+        ],
+        [
+            218, 148, 82, 157, 209, 222, 86, 248, 254, 4, 160, 225, 150, 222, 127, 75, 233, 239,
+            136, 156, 200, 19, 170, 55, 117, 74, 48, 67, 43, 33, 174, 19,
+        ],
+        [
+            182, 8, 141, 160, 94, 156, 111, 237, 26, 83, 42, 26, 164, 150, 120, 210, 90, 32, 233,
+            151, 101, 230, 235, 243, 79, 180, 152, 117, 104, 105, 2, 2,
+        ],
+        [
+            226, 88, 147, 59, 28, 120, 10, 106, 17, 3, 181, 165, 169, 42, 157, 103, 86, 16, 57, 32,
+            242, 38, 118, 199, 209, 132, 108, 29, 13, 36, 66, 45,
+        ],
+        [
+            59, 134, 13, 128, 49, 120, 104, 220, 205, 203, 247, 211, 109, 54, 2, 104, 55, 55, 174,
+            137, 145, 197, 13, 223, 14, 212, 158, 87, 174, 226, 202, 2,
+        ],
+        [
+            80, 17, 130, 225, 209, 179, 88, 96, 37, 152, 203, 70, 100, 161, 154, 37, 135, 123, 176,
+            148, 25, 121, 9, 199, 73, 179, 219, 18, 85, 186, 178, 39,
+        ],
+        [
+            20, 29, 148, 97, 111, 108, 49, 113, 63, 110, 194, 53, 35, 251, 5, 121, 46, 86, 171,
+            199, 5, 203, 87, 40, 199, 71, 83, 96, 64, 218, 212, 60,
+        ],
+    ],
+    [
+        [
+            6, 109, 206, 92, 9, 160, 131, 155, 216, 126, 46, 253, 160, 152, 216, 161, 49, 172, 17,
+            0, 184, 177, 139, 130, 101, 15, 177, 181, 10, 38, 241, 31,
+        ],
+        [
+            126, 33, 243, 169, 172, 127, 107, 116, 0, 75, 122, 15, 4, 153, 153, 58, 56, 252, 29,
+            237, 214, 219, 218, 7, 246, 151, 151, 130, 54, 99, 251, 49,
+        ],
+        [
+            111, 55, 110, 109, 255, 254, 236, 86, 100, 82, 150, 127, 142, 198, 80, 148, 106, 154,
+            232, 11, 60, 246, 170, 188, 81, 74, 56, 104, 71, 90, 205, 20,
+        ],
+        [
+            173, 19, 142, 233, 210, 176, 247, 226, 195, 87, 177, 70, 135, 96, 23, 240, 206, 171,
+            84, 205, 110, 227, 148, 138, 6, 249, 91, 77, 147, 33, 177, 45,
+        ],
+        [
+            128, 134, 78, 206, 171, 42, 66, 88, 247, 175, 4, 234, 240, 38, 148, 150, 88, 191, 245,
+            50, 103, 223, 60, 37, 82, 65, 44, 217, 181, 245, 124, 5,
+        ],
+        [
+            115, 230, 148, 128, 84, 122, 60, 46, 27, 232, 127, 51, 8, 133, 215, 66, 89, 222, 154,
+            252, 9, 233, 194, 58, 174, 236, 197, 21, 44, 241, 241, 38,
+        ],
+        [
+            67, 214, 36, 107, 4, 73, 244, 168, 44, 72, 167, 224, 3, 55, 62, 70, 237, 129, 75, 17,
+            125, 236, 204, 239, 239, 10, 117, 243, 61, 71, 202, 56,
+        ],
+        [
+            202, 195, 57, 169, 77, 192, 73, 210, 151, 66, 40, 168, 248, 195, 215, 133, 244, 89,
+            224, 48, 36, 108, 160, 23, 179, 91, 99, 229, 93, 44, 20, 45,
+        ],
+    ],
+    [
+        [
+            163, 121, 71, 96, 36, 196, 194, 47, 226, 26, 109, 145, 34, 27, 140, 139, 12, 15, 202,
+            197, 210, 27, 46, 82, 159, 203, 189, 65, 158, 83, 130, 46,
+        ],
+        [
+            253, 14, 139, 66, 95, 63, 237, 107, 113, 207, 46, 231, 223, 172, 187, 60, 60, 219, 175,
+            123, 1, 152, 96, 201, 148, 199, 2, 178, 151, 212, 109, 35,
+        ],
+        [
+            88, 58, 174, 25, 43, 75, 80, 228, 87, 94, 26, 207, 255, 176, 227, 78, 203, 97, 202,
+            141, 70, 72, 158, 251, 237, 140, 156, 1, 12, 219, 235, 44,
+        ],
+        [
+            159, 231, 8, 161, 182, 250, 9, 245, 215, 155, 99, 201, 83, 210, 129, 2, 164, 67, 100,
+            189, 238, 22, 210, 69, 176, 190, 243, 205, 207, 56, 14, 41,
+        ],
+        [
+            55, 189, 29, 92, 22, 22, 208, 205, 64, 236, 5, 66, 118, 71, 45, 43, 21, 173, 195, 90,
+            197, 129, 14, 33, 18, 29, 222, 45, 46, 196, 207, 7,
+        ],
+        [
+            82, 104, 247, 77, 232, 36, 116, 179, 196, 226, 64, 108, 3, 127, 74, 9, 64, 70, 35, 252,
+            216, 18, 8, 100, 90, 47, 119, 210, 178, 45, 195, 42,
+        ],
+        [
+            186, 14, 254, 60, 145, 38, 37, 216, 115, 22, 239, 124, 112, 128, 82, 62, 32, 124, 198,
+            228, 53, 1, 153, 169, 177, 68, 208, 228, 211, 95, 7, 9,
+        ],
+        [
+            43, 127, 253, 68, 34, 27, 115, 203, 227, 127, 190, 105, 183, 240, 215, 39, 180, 235,
+            52, 211, 22, 217, 143, 62, 206, 95, 95, 21, 179, 173, 187, 40,
+        ],
+    ],
+    [
+        [
+            131, 114, 135, 36, 105, 222, 23, 214, 185, 164, 251, 205, 92, 193, 72, 141, 238, 95,
+            30, 7, 205, 137, 109, 67, 6, 211, 254, 238, 205, 93, 248, 8,
+        ],
+        [
+            84, 246, 47, 201, 191, 63, 93, 82, 192, 92, 116, 175, 63, 184, 93, 178, 218, 82, 132,
+            246, 186, 116, 87, 8, 183, 49, 227, 163, 38, 253, 108, 26,
+        ],
+        [
+            6, 251, 41, 69, 223, 49, 29, 206, 58, 21, 142, 51, 233, 183, 17, 7, 217, 0, 81, 233,
+            202, 48, 47, 101, 165, 192, 221, 106, 85, 1, 119, 47,
+        ],
+        [
+            155, 201, 217, 190, 29, 250, 17, 180, 157, 67, 107, 96, 78, 170, 220, 10, 105, 107, 45,
+            150, 231, 202, 86, 245, 215, 155, 214, 166, 248, 64, 145, 30,
+        ],
+        [
+            83, 7, 177, 230, 141, 158, 93, 202, 158, 43, 163, 0, 254, 82, 139, 239, 126, 115, 210,
+            50, 149, 165, 220, 201, 209, 48, 24, 226, 159, 173, 118, 48,
+        ],
+        [
+            82, 210, 142, 117, 9, 95, 90, 109, 253, 87, 151, 157, 67, 189, 66, 204, 182, 59, 48,
+            38, 145, 140, 176, 206, 55, 97, 116, 204, 28, 205, 89, 24,
+        ],
+        [
+            220, 202, 253, 28, 242, 130, 86, 193, 187, 216, 73, 198, 231, 44, 233, 93, 247, 37,
+            224, 33, 48, 43, 155, 204, 152, 21, 118, 161, 73, 135, 91, 39,
+        ],
+        [
+            187, 254, 171, 174, 249, 248, 213, 106, 175, 179, 210, 131, 184, 126, 37, 35, 202, 9,
+            240, 29, 24, 239, 213, 132, 138, 116, 32, 156, 7, 113, 226, 25,
+        ],
+    ],
+    [
+        [
+            156, 164, 8, 226, 97, 207, 91, 167, 225, 181, 182, 160, 132, 78, 236, 30, 215, 20, 95,
+            9, 227, 77, 117, 68, 12, 178, 75, 43, 119, 151, 125, 3,
+        ],
+        [
+            88, 89, 242, 116, 112, 190, 26, 203, 76, 128, 41, 80, 241, 253, 69, 188, 11, 123, 28,
+            138, 47, 217, 131, 246, 104, 174, 71, 39, 91, 137, 238, 27,
+        ],
+        [
+            6, 243, 135, 48, 85, 60, 99, 53, 2, 117, 68, 224, 154, 116, 145, 216, 177, 236, 240,
+            177, 21, 13, 251, 225, 143, 176, 93, 143, 112, 171, 130, 11,
+        ],
+        [
+            165, 207, 217, 234, 178, 110, 151, 80, 150, 134, 43, 61, 131, 99, 184, 162, 158, 113,
+            155, 239, 130, 171, 157, 168, 231, 45, 113, 248, 80, 213, 51, 2,
+        ],
+        [
+            128, 168, 127, 174, 75, 22, 175, 44, 133, 227, 50, 26, 252, 142, 227, 90, 32, 56, 94,
+            252, 53, 254, 0, 174, 65, 18, 199, 215, 241, 120, 110, 55,
+        ],
+        [
+            211, 242, 54, 2, 188, 143, 153, 96, 178, 248, 47, 63, 90, 109, 94, 60, 8, 61, 25, 205,
+            123, 32, 217, 91, 125, 237, 195, 199, 225, 228, 97, 59,
+        ],
+        [
+            208, 167, 59, 171, 42, 184, 236, 23, 17, 52, 52, 174, 35, 212, 29, 143, 18, 174, 99,
+            48, 179, 44, 237, 46, 119, 4, 170, 48, 30, 79, 182, 10,
+        ],
+        [
+            106, 121, 190, 22, 158, 183, 33, 248, 175, 196, 212, 4, 160, 136, 121, 1, 110, 225,
+            143, 145, 248, 216, 225, 198, 45, 119, 247, 143, 160, 247, 172, 61,
+        ],
+    ],
+    [
+        [
+            170, 197, 210, 231, 188, 33, 170, 201, 233, 126, 60, 21, 94, 154, 254, 1, 196, 112, 19,
+            33, 164, 39, 47, 136, 105, 87, 42, 209, 126, 179, 4, 53,
+        ],
+        [
+            188, 4, 106, 142, 39, 183, 58, 78, 91, 77, 33, 182, 34, 195, 233, 151, 102, 209, 51,
+            195, 23, 95, 51, 237, 30, 112, 16, 207, 245, 125, 187, 59,
+        ],
+        [
+            15, 242, 145, 233, 209, 153, 20, 138, 166, 217, 11, 161, 243, 43, 241, 80, 125, 65, 1,
+            235, 179, 76, 8, 72, 23, 184, 85, 248, 167, 133, 69, 2,
+        ],
+        [
+            225, 27, 224, 155, 142, 0, 95, 230, 169, 31, 72, 118, 204, 184, 84, 219, 150, 161, 137,
+            193, 136, 180, 112, 183, 197, 184, 226, 97, 174, 180, 24, 11,
+        ],
+        [
+            199, 134, 139, 145, 225, 180, 173, 107, 79, 68, 52, 186, 212, 235, 203, 133, 237, 28,
+            129, 57, 178, 111, 10, 128, 182, 15, 240, 22, 78, 20, 144, 37,
+        ],
+        [
+            124, 87, 4, 136, 241, 14, 185, 35, 104, 27, 231, 201, 32, 180, 69, 222, 208, 122, 144,
+            183, 68, 218, 190, 211, 97, 52, 193, 1, 239, 155, 129, 35,
+        ],
+        [
+            196, 160, 5, 223, 59, 150, 79, 242, 92, 80, 44, 206, 218, 37, 78, 177, 242, 104, 141,
+            77, 227, 103, 140, 229, 134, 180, 34, 11, 45, 120, 81, 53,
+        ],
+        [
+            99, 157, 16, 77, 119, 202, 154, 196, 15, 121, 133, 20, 68, 176, 29, 23, 176, 41, 217,
+            190, 25, 99, 134, 214, 160, 62, 79, 119, 238, 131, 33, 36,
+        ],
+    ],
+    [
+        [
+            82, 63, 89, 161, 22, 25, 171, 246, 76, 224, 209, 2, 192, 99, 241, 215, 61, 51, 46, 111,
+            168, 154, 99, 217, 0, 4, 43, 53, 18, 209, 229, 54,
+        ],
+        [
+            167, 96, 77, 229, 175, 88, 227, 207, 122, 115, 183, 68, 181, 58, 37, 192, 5, 113, 227,
+            193, 160, 30, 159, 155, 194, 116, 35, 238, 138, 4, 110, 1,
+        ],
+        [
+            208, 142, 104, 151, 195, 118, 201, 104, 233, 25, 4, 134, 154, 101, 184, 186, 176, 240,
+            88, 47, 60, 63, 85, 49, 28, 180, 85, 205, 229, 172, 224, 23,
+        ],
+        [
+            225, 179, 202, 188, 22, 119, 248, 74, 28, 29, 26, 29, 213, 85, 201, 119, 250, 208, 90,
+            186, 188, 163, 67, 225, 7, 105, 115, 238, 100, 73, 15, 43,
+        ],
+        [
+            94, 130, 151, 41, 5, 147, 117, 3, 249, 79, 58, 213, 193, 248, 185, 183, 10, 21, 35, 63,
+            25, 84, 177, 253, 165, 102, 91, 81, 138, 219, 39, 54,
+        ],
+        [
+            176, 233, 181, 59, 196, 247, 219, 24, 149, 28, 113, 113, 133, 66, 180, 213, 204, 65,
+            88, 21, 171, 131, 99, 218, 15, 224, 29, 102, 207, 240, 157, 40,
+        ],
+        [
+            148, 66, 102, 220, 47, 53, 236, 254, 85, 226, 162, 110, 94, 77, 10, 149, 173, 16, 70,
+            31, 31, 87, 110, 6, 57, 165, 232, 79, 119, 39, 176, 12,
+        ],
+        [
+            23, 109, 174, 136, 38, 90, 212, 253, 239, 204, 23, 11, 76, 147, 151, 42, 129, 24, 229,
+            90, 202, 179, 169, 199, 57, 95, 105, 207, 109, 231, 64, 23,
+        ],
+    ],
+    [
+        [
+            210, 218, 63, 9, 74, 89, 145, 23, 196, 76, 249, 167, 105, 125, 253, 20, 49, 203, 12,
+            184, 203, 120, 138, 93, 91, 46, 186, 251, 218, 25, 70, 4,
+        ],
+        [
+            139, 120, 71, 74, 206, 5, 119, 147, 208, 109, 12, 36, 182, 63, 104, 121, 35, 248, 122,
+            36, 26, 179, 98, 242, 96, 103, 157, 145, 215, 160, 238, 37,
+        ],
+        [
+            119, 7, 93, 55, 33, 255, 127, 106, 216, 22, 144, 55, 139, 80, 136, 132, 240, 202, 42,
+            225, 208, 127, 220, 53, 244, 237, 71, 189, 88, 189, 163, 5,
+        ],
+        [
+            170, 190, 180, 72, 134, 101, 250, 194, 105, 240, 171, 146, 156, 166, 210, 64, 172, 238,
+            90, 149, 94, 59, 190, 252, 76, 134, 126, 243, 154, 205, 102, 13,
+        ],
+        [
+            61, 238, 119, 250, 17, 114, 41, 23, 62, 28, 235, 146, 48, 100, 181, 149, 254, 237, 241,
+            138, 188, 225, 84, 16, 184, 30, 56, 107, 147, 250, 66, 2,
+        ],
+        [
+            28, 109, 249, 181, 203, 172, 134, 246, 128, 130, 89, 122, 40, 47, 34, 151, 64, 90, 103,
+            136, 81, 219, 41, 175, 233, 47, 111, 72, 168, 30, 5, 56,
+        ],
+        [
+            104, 186, 155, 55, 148, 38, 106, 255, 151, 132, 138, 199, 113, 77, 212, 162, 185, 6,
+            79, 180, 229, 49, 60, 105, 198, 127, 91, 244, 214, 186, 62, 61,
+        ],
+        [
+            29, 254, 87, 7, 165, 114, 18, 76, 54, 39, 67, 130, 22, 232, 156, 152, 108, 111, 76,
+            242, 206, 188, 3, 128, 125, 61, 185, 187, 198, 48, 252, 44,
+        ],
+    ],
+    [
+        [
+            187, 50, 8, 176, 60, 67, 135, 89, 94, 138, 218, 198, 22, 101, 177, 175, 102, 240, 126,
+            241, 82, 144, 251, 102, 72, 83, 107, 48, 146, 17, 213, 28,
+        ],
+        [
+            66, 28, 29, 99, 204, 226, 10, 124, 168, 193, 84, 224, 148, 6, 106, 116, 159, 95, 220,
+            57, 114, 182, 252, 121, 106, 183, 91, 112, 135, 212, 111, 32,
+        ],
+        [
+            74, 224, 165, 3, 122, 142, 237, 166, 242, 106, 187, 40, 75, 60, 48, 81, 110, 173, 246,
+            152, 66, 206, 150, 22, 173, 227, 82, 47, 214, 31, 65, 25,
+        ],
+        [
+            241, 175, 29, 66, 85, 85, 198, 49, 73, 114, 59, 93, 17, 168, 52, 23, 229, 172, 95, 205,
+            71, 36, 103, 168, 242, 113, 13, 36, 233, 30, 70, 12,
+        ],
+        [
+            237, 63, 61, 13, 103, 181, 237, 70, 72, 231, 126, 24, 8, 136, 64, 33, 107, 250, 198,
+            207, 196, 179, 175, 29, 224, 86, 78, 2, 162, 171, 147, 0,
+        ],
+        [
+            11, 93, 3, 235, 245, 18, 55, 148, 155, 241, 206, 53, 156, 60, 107, 8, 149, 42, 57, 117,
+            150, 13, 151, 213, 8, 223, 186, 100, 167, 163, 208, 4,
+        ],
+        [
+            101, 234, 84, 111, 45, 42, 194, 165, 16, 135, 160, 248, 114, 253, 44, 141, 91, 202, 39,
+            81, 92, 168, 4, 92, 33, 196, 29, 132, 94, 49, 171, 36,
+        ],
+        [
+            170, 78, 106, 212, 212, 78, 86, 18, 151, 82, 184, 101, 228, 37, 105, 224, 43, 102, 141,
+            27, 19, 208, 35, 122, 31, 89, 86, 64, 192, 221, 17, 17,
+        ],
+    ],
+    [
+        [
+            151, 50, 9, 177, 173, 66, 105, 137, 98, 60, 243, 94, 35, 26, 166, 35, 163, 143, 255,
+            135, 238, 117, 197, 96, 41, 128, 136, 136, 152, 185, 32, 22,
+        ],
+        [
+            106, 14, 42, 81, 127, 116, 49, 48, 154, 161, 77, 30, 178, 74, 202, 5, 124, 177, 27,
+            169, 164, 70, 166, 152, 138, 194, 203, 198, 134, 203, 255, 40,
+        ],
+        [
+            47, 96, 56, 43, 93, 62, 87, 53, 208, 6, 248, 168, 93, 211, 251, 240, 46, 138, 239, 76,
+            20, 142, 20, 116, 0, 124, 15, 225, 30, 217, 116, 37,
+        ],
+        [
+            231, 205, 171, 128, 77, 59, 170, 67, 8, 186, 39, 75, 19, 129, 239, 181, 145, 141, 177,
+            29, 7, 232, 153, 69, 218, 26, 205, 164, 206, 207, 0, 54,
+        ],
+        [
+            229, 107, 81, 81, 205, 122, 120, 80, 1, 96, 13, 166, 168, 148, 0, 240, 16, 207, 156,
+            84, 125, 0, 207, 196, 242, 124, 208, 133, 52, 32, 182, 9,
+        ],
+        [
+            179, 184, 212, 223, 250, 116, 72, 192, 9, 113, 91, 215, 203, 32, 185, 213, 167, 149,
+            210, 44, 74, 255, 114, 55, 2, 218, 189, 211, 188, 57, 154, 59,
+        ],
+        [
+            162, 165, 77, 233, 58, 220, 93, 70, 103, 253, 243, 4, 206, 70, 34, 10, 214, 54, 189,
+            252, 222, 176, 215, 185, 142, 65, 240, 131, 61, 234, 236, 13,
+        ],
+        [
+            48, 73, 161, 183, 218, 189, 224, 124, 241, 181, 230, 36, 73, 203, 90, 15, 116, 0, 69,
+            237, 156, 181, 231, 180, 84, 197, 234, 181, 190, 199, 255, 52,
+        ],
+    ],
+    [
+        [
+            220, 111, 247, 64, 46, 37, 189, 99, 253, 91, 162, 238, 241, 140, 108, 174, 90, 146,
+            190, 18, 224, 248, 2, 146, 96, 236, 243, 212, 16, 103, 66, 30,
+        ],
+        [
+            31, 37, 121, 78, 67, 203, 24, 7, 252, 180, 126, 16, 235, 113, 134, 22, 212, 79, 77,
+            205, 114, 166, 90, 126, 71, 121, 244, 35, 135, 130, 158, 2,
+        ],
+        [
+            122, 50, 153, 247, 80, 50, 170, 82, 111, 229, 167, 139, 213, 253, 253, 149, 1, 132,
+            230, 42, 168, 20, 94, 119, 109, 143, 55, 222, 234, 138, 53, 52,
+        ],
+        [
+            22, 219, 32, 98, 222, 149, 154, 11, 103, 155, 91, 234, 214, 98, 113, 121, 194, 38, 112,
+            245, 228, 153, 212, 138, 113, 239, 46, 112, 14, 169, 217, 57,
+        ],
+        [
+            218, 47, 129, 55, 195, 205, 29, 175, 252, 108, 76, 237, 220, 134, 47, 151, 189, 218,
+            53, 45, 238, 145, 156, 13, 203, 143, 8, 75, 11, 81, 68, 27,
+        ],
+        [
+            165, 15, 17, 124, 219, 84, 3, 50, 247, 108, 34, 94, 139, 246, 71, 153, 118, 224, 119,
+            186, 40, 94, 45, 102, 25, 209, 86, 62, 6, 174, 151, 53,
+        ],
+        [
+            128, 13, 54, 223, 254, 21, 137, 124, 31, 192, 179, 70, 118, 72, 142, 187, 167, 0, 178,
+            120, 165, 60, 204, 21, 18, 202, 138, 190, 17, 246, 100, 51,
+        ],
+        [
+            148, 186, 124, 117, 46, 54, 68, 248, 71, 170, 136, 117, 249, 134, 99, 43, 192, 98, 121,
+            63, 207, 156, 75, 54, 185, 158, 212, 22, 18, 211, 51, 52,
+        ],
+    ],
+    [
+        [
+            24, 52, 228, 114, 155, 108, 214, 40, 54, 236, 37, 7, 134, 141, 237, 159, 77, 185, 13,
+            39, 195, 44, 58, 34, 229, 109, 3, 4, 68, 221, 190, 1,
+        ],
+        [
+            246, 210, 179, 250, 192, 219, 151, 191, 86, 214, 163, 157, 76, 7, 169, 170, 142, 35,
+            76, 33, 26, 34, 184, 11, 1, 201, 80, 190, 175, 176, 222, 22,
+        ],
+        [
+            45, 230, 47, 218, 24, 154, 184, 70, 125, 235, 25, 236, 196, 31, 216, 134, 216, 186,
+            232, 169, 254, 217, 128, 228, 248, 58, 65, 17, 151, 230, 252, 39,
+        ],
+        [
+            49, 249, 191, 147, 138, 148, 49, 217, 180, 143, 197, 86, 126, 226, 166, 187, 86, 230,
+            21, 120, 10, 5, 224, 33, 168, 69, 24, 177, 196, 212, 19, 56,
+        ],
+        [
+            78, 3, 109, 136, 87, 121, 66, 254, 234, 100, 221, 179, 88, 91, 164, 100, 110, 130, 124,
+            91, 196, 38, 192, 144, 172, 166, 18, 172, 247, 58, 40, 14,
+        ],
+        [
+            214, 225, 119, 224, 102, 139, 164, 249, 12, 11, 182, 68, 37, 36, 143, 165, 110, 236,
+            160, 96, 231, 183, 237, 46, 33, 87, 251, 228, 234, 141, 224, 8,
+        ],
+        [
+            41, 23, 61, 155, 61, 57, 2, 172, 82, 226, 110, 224, 155, 186, 1, 116, 244, 90, 184,
+            218, 91, 241, 142, 128, 196, 137, 32, 56, 165, 182, 15, 35,
+        ],
+        [
+            134, 195, 91, 252, 76, 154, 223, 242, 155, 67, 75, 113, 30, 185, 151, 122, 108, 161,
+            234, 74, 245, 112, 142, 141, 211, 94, 34, 237, 227, 172, 133, 1,
+        ],
+    ],
+    [
+        [
+            167, 255, 57, 210, 245, 166, 106, 113, 15, 165, 122, 64, 80, 166, 212, 184, 73, 180,
+            113, 173, 253, 39, 112, 70, 8, 20, 6, 65, 24, 62, 64, 5,
+        ],
+        [
+            203, 107, 134, 205, 3, 48, 37, 121, 106, 5, 121, 146, 237, 41, 10, 95, 169, 198, 158,
+            124, 91, 231, 131, 169, 13, 208, 34, 9, 160, 185, 35, 62,
+        ],
+        [
+            159, 157, 209, 73, 242, 210, 214, 163, 71, 138, 37, 146, 109, 231, 120, 218, 9, 240,
+            166, 57, 3, 33, 3, 133, 32, 211, 190, 239, 180, 72, 251, 14,
+        ],
+        [
+            235, 185, 248, 188, 219, 240, 28, 178, 142, 217, 194, 95, 153, 114, 200, 233, 230, 77,
+            203, 129, 201, 87, 115, 29, 42, 80, 160, 207, 197, 103, 161, 18,
+        ],
+        [
+            64, 41, 171, 141, 241, 81, 18, 17, 80, 24, 42, 140, 182, 191, 240, 165, 69, 60, 26, 10,
+            218, 36, 147, 62, 195, 1, 37, 201, 79, 111, 117, 48,
+        ],
+        [
+            99, 149, 18, 72, 7, 45, 206, 70, 179, 31, 195, 173, 136, 27, 178, 204, 81, 105, 144,
+            191, 206, 91, 40, 189, 8, 32, 92, 108, 138, 209, 85, 23,
+        ],
+        [
+            122, 133, 113, 198, 75, 111, 114, 28, 82, 109, 46, 198, 163, 186, 185, 113, 163, 16,
+            25, 119, 248, 50, 124, 124, 202, 61, 194, 124, 64, 125, 8, 3,
+        ],
+        [
+            231, 74, 52, 247, 27, 78, 86, 39, 140, 9, 146, 193, 50, 231, 242, 134, 74, 134, 57,
+            174, 105, 148, 90, 9, 117, 29, 5, 224, 77, 120, 94, 43,
+        ],
+    ],
+    [
+        [
+            66, 125, 134, 52, 113, 121, 1, 157, 97, 185, 99, 106, 44, 43, 60, 127, 106, 209, 19,
+            201, 122, 218, 244, 45, 241, 86, 143, 244, 245, 208, 162, 7,
+        ],
+        [
+            18, 80, 241, 94, 225, 206, 164, 202, 189, 9, 154, 17, 214, 79, 229, 176, 191, 112, 95,
+            5, 52, 43, 102, 83, 249, 151, 222, 109, 132, 233, 251, 3,
+        ],
+        [
+            253, 91, 9, 76, 243, 26, 104, 70, 78, 24, 99, 82, 248, 129, 141, 73, 122, 142, 83, 21,
+            218, 240, 118, 200, 240, 184, 227, 38, 137, 46, 190, 3,
+        ],
+        [
+            155, 143, 123, 196, 198, 125, 209, 238, 161, 6, 7, 95, 47, 74, 163, 223, 247, 184, 193,
+            90, 102, 129, 37, 25, 201, 201, 101, 71, 81, 31, 49, 54,
+        ],
+        [
+            229, 127, 64, 113, 252, 102, 170, 69, 29, 131, 215, 235, 16, 35, 215, 100, 234, 250,
+            171, 224, 254, 50, 218, 177, 59, 199, 79, 8, 85, 162, 106, 42,
+        ],
+        [
+            48, 238, 75, 148, 191, 96, 178, 107, 185, 175, 86, 29, 33, 61, 66, 179, 234, 82, 134,
+            19, 254, 213, 129, 75, 188, 155, 24, 164, 137, 200, 190, 41,
+        ],
+        [
+            220, 31, 55, 254, 233, 65, 55, 210, 170, 104, 85, 6, 115, 71, 143, 106, 177, 34, 156,
+            96, 46, 5, 122, 164, 33, 122, 36, 249, 146, 49, 169, 44,
+        ],
+        [
+            222, 65, 234, 61, 23, 51, 29, 154, 52, 159, 192, 26, 238, 127, 189, 106, 219, 161, 17,
+            81, 68, 54, 147, 136, 210, 156, 120, 36, 171, 255, 57, 58,
+        ],
+    ],
+    [
+        [
+            71, 251, 242, 20, 210, 72, 251, 220, 14, 8, 19, 169, 220, 25, 39, 174, 75, 44, 133, 22,
+            105, 236, 21, 103, 212, 100, 5, 34, 121, 79, 162, 0,
+        ],
+        [
+            194, 41, 180, 100, 238, 236, 100, 134, 89, 82, 152, 106, 230, 80, 7, 146, 66, 87, 9,
+            42, 24, 87, 242, 96, 92, 63, 56, 169, 156, 190, 229, 34,
+        ],
+        [
+            141, 254, 94, 59, 138, 160, 119, 154, 211, 60, 56, 145, 249, 153, 182, 182, 220, 6,
+            168, 138, 212, 237, 122, 17, 116, 242, 63, 233, 22, 145, 242, 30,
+        ],
+        [
+            153, 109, 113, 106, 252, 209, 225, 86, 244, 176, 84, 140, 44, 71, 175, 77, 108, 18, 39,
+            175, 183, 234, 142, 163, 210, 63, 38, 103, 232, 88, 223, 17,
+        ],
+        [
+            109, 169, 28, 78, 240, 241, 115, 94, 37, 155, 187, 62, 78, 248, 41, 16, 199, 207, 47,
+            59, 100, 234, 147, 113, 185, 30, 204, 174, 216, 101, 217, 26,
+        ],
+        [
+            199, 76, 237, 233, 188, 41, 236, 124, 20, 78, 61, 129, 251, 10, 106, 218, 166, 189, 16,
+            189, 63, 30, 242, 111, 51, 164, 134, 147, 135, 167, 20, 32,
+        ],
+        [
+            246, 126, 31, 131, 87, 207, 67, 228, 92, 46, 120, 73, 48, 7, 53, 2, 228, 91, 167, 249,
+            224, 145, 38, 140, 49, 110, 9, 198, 28, 166, 199, 23,
+        ],
+        [
+            231, 83, 169, 70, 52, 62, 177, 207, 175, 89, 75, 217, 161, 59, 56, 2, 169, 1, 9, 205,
+            52, 49, 201, 25, 166, 146, 234, 172, 244, 231, 106, 47,
+        ],
+    ],
+    [
+        [
+            194, 228, 232, 201, 33, 16, 85, 164, 105, 160, 141, 18, 249, 59, 102, 48, 193, 116,
+            209, 147, 10, 211, 226, 31, 157, 35, 94, 220, 99, 198, 20, 42,
+        ],
+        [
+            173, 35, 189, 24, 85, 198, 154, 168, 25, 220, 226, 85, 221, 15, 58, 3, 224, 4, 58, 168,
+            58, 29, 56, 245, 186, 223, 226, 181, 18, 185, 172, 40,
+        ],
+        [
+            27, 18, 59, 17, 10, 72, 50, 106, 165, 134, 74, 100, 153, 117, 121, 253, 16, 86, 246,
+            110, 187, 230, 25, 216, 83, 224, 186, 141, 45, 119, 33, 49,
+        ],
+        [
+            244, 45, 103, 199, 97, 180, 35, 18, 240, 147, 30, 233, 41, 208, 61, 151, 65, 157, 96,
+            171, 100, 18, 176, 152, 225, 175, 193, 244, 215, 35, 160, 5,
+        ],
+        [
+            28, 222, 44, 27, 46, 254, 161, 252, 108, 206, 27, 127, 81, 6, 137, 238, 194, 214, 249,
+            85, 148, 234, 179, 183, 90, 25, 164, 214, 151, 128, 32, 50,
+        ],
+        [
+            125, 65, 228, 176, 203, 94, 50, 79, 49, 124, 4, 14, 170, 253, 17, 191, 75, 224, 55, 44,
+            99, 162, 131, 127, 176, 147, 248, 78, 201, 196, 241, 48,
+        ],
+        [
+            117, 21, 105, 66, 55, 43, 28, 99, 109, 184, 3, 147, 39, 208, 145, 27, 14, 225, 196,
+            196, 154, 197, 190, 14, 72, 118, 238, 54, 18, 187, 54, 26,
+        ],
+        [
+            70, 174, 45, 224, 63, 252, 216, 207, 239, 185, 167, 156, 199, 168, 127, 109, 175, 46,
+            99, 100, 169, 75, 223, 35, 161, 102, 242, 103, 16, 8, 209, 55,
+        ],
+    ],
+    [
+        [
+            13, 194, 138, 145, 78, 219, 22, 182, 229, 0, 1, 81, 185, 166, 160, 114, 3, 35, 63, 253,
+            99, 163, 28, 47, 140, 78, 62, 65, 234, 25, 70, 37,
+        ],
+        [
+            61, 96, 17, 118, 88, 237, 59, 158, 157, 55, 155, 76, 10, 185, 215, 169, 151, 212, 195,
+            26, 97, 8, 212, 102, 242, 134, 252, 227, 178, 5, 199, 22,
+        ],
+        [
+            34, 135, 203, 237, 55, 68, 123, 190, 69, 155, 72, 68, 155, 82, 131, 168, 8, 208, 132,
+            197, 218, 130, 132, 104, 97, 217, 13, 156, 76, 112, 181, 16,
+        ],
+        [
+            95, 192, 150, 61, 45, 125, 142, 207, 41, 12, 219, 19, 191, 159, 133, 179, 135, 190,
+            152, 115, 226, 94, 245, 57, 244, 14, 94, 122, 221, 36, 84, 14,
+        ],
+        [
+            60, 90, 132, 102, 233, 42, 52, 168, 255, 226, 18, 254, 36, 107, 88, 73, 146, 120, 103,
+            244, 75, 107, 77, 25, 143, 238, 53, 95, 194, 155, 31, 40,
+        ],
+        [
+            138, 52, 172, 249, 115, 57, 8, 171, 31, 81, 27, 131, 252, 161, 40, 171, 234, 110, 66,
+            119, 79, 189, 7, 252, 119, 55, 152, 241, 39, 80, 8, 4,
+        ],
+        [
+            14, 102, 234, 194, 179, 112, 30, 38, 179, 183, 161, 70, 57, 1, 209, 189, 106, 139, 242,
+            192, 200, 245, 190, 143, 182, 219, 93, 128, 9, 37, 227, 63,
+        ],
+        [
+            122, 219, 120, 166, 254, 238, 26, 106, 128, 225, 64, 176, 209, 13, 159, 175, 107, 206,
+            89, 142, 159, 70, 79, 142, 28, 220, 139, 218, 34, 215, 125, 63,
+        ],
+    ],
+    [
+        [
+            172, 21, 136, 167, 111, 36, 168, 90, 36, 244, 208, 208, 34, 42, 91, 158, 121, 11, 214,
+            17, 150, 220, 169, 137, 174, 234, 191, 231, 228, 166, 244, 39,
+        ],
+        [
+            247, 84, 154, 37, 49, 122, 163, 113, 225, 52, 106, 231, 138, 127, 51, 135, 176, 76,
+            175, 217, 247, 243, 84, 86, 27, 91, 136, 106, 29, 19, 70, 32,
+        ],
+        [
+            183, 140, 119, 40, 234, 18, 150, 188, 245, 145, 29, 134, 108, 239, 3, 75, 85, 135, 174,
+            215, 248, 64, 240, 135, 80, 107, 134, 242, 237, 181, 254, 34,
+        ],
+        [
+            157, 21, 160, 26, 117, 32, 17, 245, 64, 238, 132, 120, 163, 148, 190, 127, 55, 73, 224,
+            219, 166, 32, 236, 26, 161, 153, 206, 37, 218, 158, 115, 50,
+        ],
+        [
+            102, 128, 174, 242, 77, 163, 172, 154, 138, 244, 102, 17, 122, 197, 231, 16, 67, 251,
+            112, 69, 234, 176, 66, 247, 133, 177, 21, 204, 174, 237, 4, 49,
+        ],
+        [
+            239, 96, 167, 25, 10, 118, 236, 57, 32, 103, 160, 19, 209, 187, 230, 224, 85, 134, 110,
+            238, 216, 152, 208, 109, 0, 188, 254, 240, 93, 53, 109, 23,
+        ],
+        [
+            108, 28, 154, 95, 92, 197, 178, 24, 211, 70, 120, 40, 247, 84, 168, 186, 7, 171, 75,
+            120, 151, 200, 22, 59, 21, 170, 251, 131, 56, 235, 175, 30,
+        ],
+        [
+            167, 85, 243, 125, 181, 241, 122, 202, 14, 50, 200, 228, 168, 106, 9, 243, 21, 134,
+            155, 179, 123, 98, 111, 203, 96, 238, 117, 102, 244, 82, 32, 3,
+        ],
+    ],
+    [
+        [
+            81, 194, 89, 56, 62, 155, 254, 27, 234, 67, 235, 139, 206, 253, 178, 220, 111, 228,
+            143, 76, 232, 237, 223, 210, 227, 76, 234, 83, 158, 41, 165, 30,
+        ],
+        [
+            231, 16, 196, 172, 106, 248, 216, 179, 18, 11, 178, 169, 44, 149, 81, 254, 108, 74,
+            207, 135, 95, 26, 32, 80, 180, 103, 196, 109, 126, 18, 241, 26,
+        ],
+        [
+            25, 140, 4, 125, 204, 220, 57, 121, 155, 173, 62, 202, 248, 55, 151, 70, 91, 173, 109,
+            160, 23, 245, 116, 228, 68, 199, 22, 29, 170, 0, 10, 36,
+        ],
+        [
+            170, 226, 29, 101, 137, 91, 118, 169, 27, 250, 42, 0, 135, 49, 146, 159, 97, 105, 241,
+            55, 67, 34, 72, 162, 122, 167, 18, 120, 202, 9, 82, 39,
+        ],
+        [
+            130, 23, 40, 251, 34, 205, 36, 24, 34, 193, 84, 226, 32, 35, 205, 182, 98, 64, 218, 99,
+            223, 29, 193, 200, 187, 51, 94, 127, 85, 136, 106, 63,
+        ],
+        [
+            20, 174, 125, 99, 207, 8, 50, 43, 203, 1, 165, 193, 43, 225, 16, 254, 207, 164, 119,
+            162, 140, 94, 66, 208, 113, 7, 89, 200, 55, 53, 169, 24,
+        ],
+        [
+            114, 146, 145, 183, 20, 171, 214, 161, 11, 200, 195, 62, 124, 57, 225, 210, 37, 202,
+            108, 255, 246, 167, 197, 3, 205, 66, 206, 131, 22, 60, 71, 51,
+        ],
+        [
+            96, 247, 39, 97, 175, 212, 113, 61, 218, 136, 61, 57, 34, 15, 242, 54, 133, 211, 151,
+            28, 183, 159, 134, 188, 192, 104, 174, 54, 236, 231, 26, 5,
+        ],
+    ],
+    [
+        [
+            159, 212, 195, 141, 31, 242, 46, 244, 34, 181, 77, 152, 114, 59, 111, 27, 127, 224,
+            253, 146, 51, 221, 241, 189, 211, 26, 127, 150, 115, 126, 255, 8,
+        ],
+        [
+            166, 51, 28, 89, 18, 65, 151, 110, 54, 47, 186, 87, 146, 233, 13, 36, 99, 46, 194, 38,
+            248, 235, 17, 179, 225, 64, 174, 192, 149, 76, 193, 57,
+        ],
+        [
+            124, 227, 148, 2, 195, 251, 0, 91, 99, 91, 4, 61, 36, 61, 60, 185, 160, 8, 216, 162,
+            255, 163, 156, 212, 189, 234, 160, 131, 80, 233, 69, 31,
+        ],
+        [
+            228, 5, 75, 168, 81, 179, 20, 142, 53, 62, 19, 152, 211, 120, 178, 172, 214, 30, 69,
+            85, 124, 165, 73, 139, 93, 24, 36, 46, 199, 96, 40, 30,
+        ],
+        [
+            252, 20, 32, 26, 246, 30, 192, 50, 136, 144, 68, 182, 232, 174, 73, 4, 252, 168, 180,
+            46, 189, 66, 59, 7, 189, 2, 72, 92, 118, 220, 240, 43,
+        ],
+        [
+            61, 140, 148, 113, 74, 83, 138, 136, 151, 151, 156, 219, 38, 244, 28, 186, 62, 172, 40,
+            239, 14, 13, 100, 187, 136, 215, 226, 156, 167, 53, 46, 22,
+        ],
+        [
+            137, 240, 137, 254, 218, 224, 225, 48, 30, 129, 224, 75, 203, 160, 113, 2, 238, 6, 205,
+            79, 230, 109, 24, 44, 5, 147, 43, 123, 120, 33, 176, 16,
+        ],
+        [
+            252, 48, 156, 11, 223, 23, 120, 45, 236, 97, 109, 212, 138, 155, 248, 142, 17, 14, 185,
+            199, 52, 218, 56, 244, 239, 186, 59, 155, 82, 48, 200, 39,
+        ],
+    ],
+    [
+        [
+            5, 220, 5, 128, 148, 124, 206, 148, 180, 145, 11, 158, 188, 112, 206, 237, 160, 123,
+            218, 124, 1, 54, 164, 128, 18, 95, 83, 183, 248, 29, 228, 12,
+        ],
+        [
+            214, 168, 154, 183, 172, 78, 16, 52, 50, 33, 14, 96, 238, 44, 248, 23, 157, 35, 215,
+            83, 221, 57, 161, 29, 193, 11, 161, 179, 229, 48, 198, 21,
+        ],
+        [
+            133, 164, 224, 39, 107, 6, 45, 223, 31, 74, 95, 252, 109, 219, 126, 219, 154, 63, 190,
+            71, 193, 16, 23, 146, 1, 24, 128, 52, 193, 130, 160, 23,
+        ],
+        [
+            121, 231, 94, 211, 129, 23, 194, 169, 190, 169, 243, 221, 172, 104, 207, 254, 157, 174,
+            139, 227, 208, 20, 188, 82, 82, 190, 139, 190, 72, 23, 205, 20,
+        ],
+        [
+            91, 172, 54, 154, 40, 43, 90, 99, 254, 241, 239, 151, 148, 167, 189, 194, 248, 200, 56,
+            103, 126, 85, 184, 208, 17, 168, 236, 248, 153, 208, 179, 31,
+        ],
+        [
+            205, 123, 215, 56, 96, 17, 215, 28, 168, 216, 148, 55, 15, 133, 60, 195, 164, 134, 17,
+            234, 32, 36, 207, 201, 14, 112, 211, 78, 203, 7, 230, 52,
+        ],
+        [
+            93, 248, 248, 21, 87, 109, 35, 58, 212, 50, 248, 161, 115, 63, 189, 191, 135, 115, 223,
+            208, 78, 213, 39, 118, 91, 211, 131, 192, 33, 234, 149, 37,
+        ],
+        [
+            35, 215, 54, 145, 79, 225, 122, 226, 127, 245, 11, 190, 251, 200, 1, 47, 80, 179, 224,
+            211, 121, 180, 217, 47, 108, 41, 65, 53, 77, 93, 205, 47,
+        ],
+    ],
+    [
+        [
+            121, 229, 227, 180, 214, 66, 64, 75, 82, 108, 25, 2, 216, 161, 23, 42, 45, 75, 106,
+            187, 162, 63, 32, 6, 45, 189, 38, 184, 218, 18, 6, 43,
+        ],
+        [
+            65, 81, 179, 34, 92, 125, 223, 47, 254, 226, 115, 185, 128, 172, 68, 24, 9, 184, 57,
+            129, 234, 174, 232, 12, 171, 145, 73, 72, 18, 195, 42, 11,
+        ],
+        [
+            14, 28, 16, 216, 210, 137, 236, 100, 226, 55, 225, 147, 154, 252, 211, 181, 106, 243,
+            161, 79, 247, 183, 91, 55, 111, 18, 181, 172, 154, 5, 151, 53,
+        ],
+        [
+            59, 222, 201, 101, 150, 48, 2, 24, 246, 2, 107, 177, 44, 141, 54, 27, 244, 1, 91, 52,
+            200, 187, 171, 156, 135, 208, 249, 222, 154, 42, 16, 33,
+        ],
+        [
+            104, 150, 234, 215, 26, 74, 45, 216, 243, 25, 122, 153, 44, 247, 128, 15, 164, 80, 95,
+            105, 74, 164, 174, 150, 221, 180, 164, 117, 94, 121, 184, 21,
+        ],
+        [
+            244, 3, 63, 14, 247, 139, 139, 24, 56, 152, 122, 211, 220, 149, 32, 72, 173, 50, 233,
+            95, 192, 61, 115, 222, 6, 198, 23, 145, 220, 92, 168, 14,
+        ],
+        [
+            123, 105, 48, 25, 179, 136, 51, 189, 62, 161, 38, 50, 41, 89, 206, 31, 92, 164, 227,
+            29, 69, 233, 226, 53, 29, 17, 61, 221, 213, 199, 213, 36,
+        ],
+        [
+            10, 180, 201, 130, 164, 6, 35, 113, 109, 164, 34, 227, 3, 202, 86, 70, 95, 236, 68, 10,
+            198, 16, 204, 49, 49, 232, 145, 2, 205, 237, 135, 33,
+        ],
+    ],
+    [
+        [
+            164, 61, 189, 226, 93, 173, 150, 18, 110, 21, 99, 125, 250, 45, 117, 50, 250, 157, 212,
+            9, 169, 14, 232, 53, 168, 110, 221, 253, 98, 44, 184, 55,
+        ],
+        [
+            10, 200, 231, 57, 40, 195, 109, 223, 230, 107, 35, 167, 70, 250, 255, 175, 106, 241,
+            35, 163, 24, 65, 178, 218, 181, 40, 201, 150, 29, 181, 120, 1,
+        ],
+        [
+            23, 147, 76, 178, 80, 155, 42, 165, 82, 142, 164, 81, 100, 180, 173, 9, 26, 9, 233, 6,
+            67, 3, 203, 70, 213, 195, 1, 93, 123, 169, 4, 12,
+        ],
+        [
+            15, 24, 204, 61, 20, 190, 93, 198, 16, 129, 215, 142, 41, 33, 219, 224, 34, 154, 94,
+            234, 109, 21, 251, 232, 198, 62, 4, 235, 236, 16, 3, 45,
+        ],
+        [
+            143, 177, 225, 157, 173, 54, 188, 123, 41, 91, 240, 220, 223, 81, 70, 194, 27, 147,
+            141, 230, 175, 43, 25, 222, 7, 143, 81, 185, 252, 252, 13, 63,
+        ],
+        [
+            2, 130, 165, 36, 212, 154, 222, 127, 66, 123, 167, 90, 242, 142, 84, 162, 154, 244, 10,
+            228, 7, 110, 213, 182, 236, 30, 202, 0, 248, 20, 219, 31,
+        ],
+        [
+            91, 141, 198, 216, 211, 179, 193, 160, 134, 90, 212, 128, 85, 185, 8, 213, 156, 178,
+            84, 94, 33, 60, 104, 15, 76, 132, 101, 139, 16, 202, 39, 7,
+        ],
+        [
+            40, 21, 104, 114, 55, 102, 78, 10, 8, 169, 121, 156, 143, 255, 176, 144, 216, 134, 19,
+            27, 70, 151, 163, 149, 21, 220, 239, 65, 109, 137, 163, 36,
+        ],
+    ],
+    [
+        [
+            177, 102, 25, 89, 51, 205, 218, 46, 239, 16, 165, 74, 131, 94, 82, 248, 57, 135, 156,
+            160, 63, 57, 210, 21, 30, 42, 243, 39, 215, 37, 128, 28,
+        ],
+        [
+            105, 52, 188, 198, 150, 99, 113, 232, 68, 219, 243, 180, 210, 216, 187, 179, 27, 118,
+            63, 211, 239, 147, 39, 75, 243, 209, 136, 247, 151, 84, 146, 32,
+        ],
+        [
+            114, 57, 148, 130, 175, 207, 73, 255, 149, 172, 194, 92, 217, 117, 177, 223, 52, 37,
+            51, 57, 169, 149, 212, 248, 73, 221, 164, 0, 186, 245, 112, 23,
+        ],
+        [
+            57, 72, 243, 117, 146, 120, 9, 114, 211, 234, 216, 19, 43, 149, 3, 198, 27, 4, 239, 93,
+            46, 75, 219, 149, 112, 40, 54, 28, 48, 234, 66, 57,
+        ],
+        [
+            67, 161, 31, 89, 164, 242, 224, 205, 207, 9, 154, 77, 198, 216, 166, 150, 167, 168, 60,
+            83, 229, 54, 120, 248, 82, 105, 61, 130, 142, 46, 193, 18,
+        ],
+        [
+            45, 128, 84, 140, 202, 147, 79, 95, 51, 250, 148, 114, 188, 145, 61, 29, 62, 132, 115,
+            244, 102, 11, 0, 96, 85, 30, 86, 136, 195, 144, 247, 18,
+        ],
+        [
+            7, 154, 159, 131, 116, 203, 12, 167, 60, 97, 53, 6, 77, 133, 249, 117, 25, 204, 243,
+            118, 175, 154, 233, 70, 243, 130, 27, 127, 179, 205, 253, 15,
+        ],
+        [
+            106, 108, 100, 123, 231, 100, 59, 207, 108, 100, 34, 155, 222, 229, 31, 255, 98, 181,
+            171, 122, 9, 114, 3, 101, 255, 72, 161, 61, 8, 219, 123, 27,
+        ],
+    ],
+    [
+        [
+            138, 91, 16, 195, 19, 101, 70, 243, 47, 48, 96, 34, 191, 184, 150, 226, 190, 100, 88,
+            119, 234, 152, 160, 152, 104, 219, 29, 239, 19, 148, 9, 38,
+        ],
+        [
+            246, 211, 73, 28, 125, 13, 63, 122, 5, 88, 167, 151, 179, 186, 84, 13, 111, 163, 102,
+            113, 126, 241, 32, 50, 224, 13, 146, 15, 230, 150, 11, 52,
+        ],
+        [
+            154, 150, 57, 187, 127, 246, 180, 239, 190, 165, 103, 233, 89, 183, 5, 175, 150, 93,
+            87, 51, 167, 126, 178, 169, 66, 28, 9, 161, 218, 239, 123, 25,
+        ],
+        [
+            185, 229, 244, 166, 244, 110, 77, 101, 167, 108, 163, 229, 108, 174, 226, 103, 89, 36,
+            200, 164, 214, 148, 49, 212, 242, 197, 121, 167, 97, 157, 74, 17,
+        ],
+        [
+            52, 58, 191, 122, 149, 177, 220, 26, 97, 103, 175, 44, 100, 111, 151, 136, 79, 54, 93,
+            185, 65, 182, 102, 131, 165, 82, 46, 91, 114, 18, 91, 6,
+        ],
+        [
+            107, 19, 80, 165, 166, 216, 121, 157, 215, 92, 135, 201, 246, 234, 30, 122, 36, 27,
+            203, 88, 216, 113, 237, 199, 111, 120, 35, 119, 8, 205, 32, 46,
+        ],
+        [
+            20, 119, 36, 113, 135, 162, 9, 149, 247, 211, 154, 128, 212, 137, 68, 212, 28, 87, 145,
+            233, 53, 162, 167, 72, 114, 252, 255, 10, 110, 30, 117, 41,
+        ],
+        [
+            69, 67, 187, 172, 32, 58, 82, 131, 180, 241, 128, 245, 245, 178, 215, 244, 40, 37, 49,
+            66, 218, 99, 232, 17, 201, 214, 84, 241, 29, 215, 217, 16,
+        ],
+    ],
+    [
+        [
+            8, 217, 27, 9, 205, 139, 87, 170, 175, 101, 13, 65, 42, 153, 124, 195, 221, 110, 147,
+            106, 107, 50, 112, 113, 79, 85, 128, 96, 221, 122, 88, 37,
+        ],
+        [
+            62, 174, 26, 84, 3, 154, 76, 218, 161, 234, 202, 236, 43, 222, 190, 214, 40, 177, 81,
+            209, 138, 91, 117, 25, 45, 250, 233, 13, 223, 81, 61, 34,
+        ],
+        [
+            112, 4, 242, 252, 45, 111, 178, 214, 78, 207, 68, 208, 81, 104, 157, 45, 160, 124, 213,
+            193, 38, 80, 58, 205, 140, 9, 107, 41, 196, 141, 223, 40,
+        ],
+        [
+            54, 79, 54, 153, 234, 76, 173, 78, 107, 19, 23, 164, 223, 21, 74, 147, 230, 20, 103,
+            113, 131, 60, 33, 233, 200, 146, 23, 144, 189, 71, 94, 24,
+        ],
+        [
+            113, 192, 128, 244, 20, 55, 236, 149, 20, 196, 221, 99, 71, 23, 208, 187, 92, 158, 5,
+            73, 239, 163, 254, 39, 142, 161, 51, 180, 159, 209, 209, 12,
+        ],
+        [
+            204, 251, 47, 230, 61, 123, 221, 149, 69, 100, 194, 77, 56, 250, 81, 132, 163, 128,
+            181, 208, 116, 94, 151, 79, 31, 139, 66, 154, 91, 182, 52, 28,
+        ],
+        [
+            83, 105, 243, 244, 101, 204, 108, 161, 15, 204, 51, 165, 200, 209, 129, 177, 30, 110,
+            84, 4, 65, 203, 125, 221, 234, 8, 100, 183, 47, 52, 49, 25,
+        ],
+        [
+            201, 43, 72, 102, 184, 137, 0, 15, 252, 35, 236, 135, 16, 241, 233, 164, 218, 184, 188,
+            92, 174, 121, 33, 207, 166, 154, 39, 203, 16, 89, 89, 46,
+        ],
+    ],
+];
+
+pub fn generator() -> pallas::Affine {
+    pallas::Affine::from_xy(
+        pallas::Base::from_bytes(&GENERATOR.0).unwrap(),
+        pallas::Base::from_bytes(&GENERATOR.1).unwrap(),
+    )
+    .unwrap()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::{
+        test_lagrange_coeffs, test_zs_and_us, NUM_WINDOWS, VALUE_COMMITMENT_PERSONALIZATION,
+    };
+    use super::*;
+    use group::Curve;
+    use pasta_curves::{
+        arithmetic::{CurveAffine, CurveExt, FieldExt},
+        pallas,
+    };
+
+    #[test]
+    fn generator() {
+        let hasher = pallas::Point::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION);
+        let point = hasher(b"r");
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(*coords.x(), pallas::Base::from_bytes(&GENERATOR.0).unwrap());
+        assert_eq!(*coords.y(), pallas::Base::from_bytes(&GENERATOR.1).unwrap());
+    }
+
+    #[test]
+    fn lagrange_coeffs() {
+        let base = super::generator();
+        test_lagrange_coeffs(base, NUM_WINDOWS);
+    }
+
+    #[test]
+    fn z() {
+        let base = super::generator();
+        test_zs_and_us(base, &Z, &U, NUM_WINDOWS);
+    }
+}

+ 818 - 0
examples/halo2/src/constants/value_commit_v.rs

@@ -0,0 +1,818 @@
+use pasta_curves::{
+    arithmetic::{CurveAffine, FieldExt},
+    pallas,
+};
+
+/// The value commitment is used to check balance between inputs and outputs. The value is
+/// placed over this generator.
+pub const GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        103, 67, 249, 58, 110, 189, 167, 42, 140, 124, 90, 43, 127, 163, 4, 254, 50, 178, 155, 79,
+        112, 106, 168, 247, 66, 15, 61, 142, 122, 89, 112, 47,
+    ],
+    [
+        142, 242, 90, 175, 126, 196, 19, 164, 219, 227, 255, 167, 102, 167, 158, 29, 66, 108, 109,
+        19, 99, 127, 145, 30, 175, 25, 25, 49, 105, 81, 14, 45,
+    ],
+);
+
+/// Short signed z-values for GENERATOR
+pub const Z_SHORT: [u64; super::NUM_WINDOWS_SHORT] = [
+    163547, 76040, 88852, 128479, 54088, 89871, 39598, 144309, 43471, 102492, 741, 55288, 33756,
+    77312, 12095, 48253, 45718, 202901, 33132, 71081, 152108, 169712,
+];
+
+/// Short signed u-values for GENERATOR
+pub const U_SHORT: [[[u8; 32]; super::H]; super::NUM_WINDOWS_SHORT] = [
+    [
+        [
+            16, 88, 158, 52, 92, 165, 59, 177, 224, 70, 108, 93, 144, 51, 8, 133, 114, 192, 151,
+            40, 85, 33, 52, 118, 147, 163, 220, 193, 171, 43, 73, 27,
+        ],
+        [
+            201, 84, 190, 165, 219, 228, 63, 155, 182, 74, 179, 74, 230, 96, 89, 168, 110, 162, 83,
+            218, 185, 137, 194, 92, 244, 85, 1, 60, 59, 16, 119, 14,
+        ],
+        [
+            113, 146, 25, 32, 206, 37, 173, 225, 58, 41, 184, 214, 177, 123, 211, 55, 42, 208, 214,
+            45, 149, 99, 31, 171, 172, 226, 219, 171, 246, 85, 116, 59,
+        ],
+        [
+            10, 79, 89, 241, 37, 161, 115, 213, 183, 43, 68, 233, 219, 249, 131, 137, 41, 119, 153,
+            24, 92, 87, 138, 167, 93, 46, 32, 97, 102, 164, 164, 53,
+        ],
+        [
+            50, 252, 2, 254, 234, 133, 190, 34, 244, 192, 31, 96, 156, 152, 150, 88, 154, 224, 223,
+            144, 223, 113, 203, 226, 214, 44, 69, 198, 171, 60, 26, 45,
+        ],
+        [
+            151, 65, 173, 0, 249, 13, 78, 201, 84, 58, 255, 120, 124, 169, 98, 242, 239, 132, 149,
+            204, 146, 244, 55, 176, 56, 26, 19, 148, 125, 42, 26, 32,
+        ],
+        [
+            6, 29, 196, 176, 135, 157, 248, 239, 196, 9, 100, 82, 220, 41, 203, 49, 35, 108, 76,
+            59, 222, 47, 82, 39, 35, 23, 88, 136, 61, 90, 23, 57,
+        ],
+        [
+            169, 203, 101, 116, 220, 68, 34, 248, 199, 107, 202, 59, 111, 171, 90, 121, 119, 80,
+            146, 214, 191, 197, 220, 212, 125, 139, 12, 140, 198, 191, 110, 31,
+        ],
+    ],
+    [
+        [
+            16, 171, 139, 236, 248, 28, 27, 145, 109, 161, 63, 121, 19, 190, 106, 193, 13, 122,
+            108, 54, 95, 202, 195, 184, 118, 60, 72, 213, 154, 240, 52, 34,
+        ],
+        [
+            131, 218, 16, 142, 97, 153, 190, 249, 118, 171, 187, 254, 21, 17, 202, 48, 107, 23,
+            103, 72, 159, 238, 228, 38, 183, 166, 74, 136, 77, 51, 85, 18,
+        ],
+        [
+            137, 78, 204, 243, 154, 87, 148, 200, 11, 98, 58, 33, 89, 170, 198, 87, 29, 187, 167,
+            122, 157, 151, 5, 148, 254, 216, 113, 12, 158, 243, 102, 63,
+        ],
+        [
+            16, 187, 216, 98, 244, 19, 70, 209, 217, 133, 240, 226, 111, 219, 247, 74, 4, 231, 183,
+            216, 35, 174, 192, 96, 129, 159, 39, 96, 200, 174, 126, 1,
+        ],
+        [
+            185, 2, 174, 129, 110, 163, 212, 152, 214, 139, 105, 150, 23, 209, 185, 245, 71, 8,
+            171, 142, 43, 57, 167, 172, 233, 77, 194, 166, 118, 232, 127, 35,
+        ],
+        [
+            57, 28, 236, 33, 234, 0, 214, 131, 161, 209, 42, 25, 194, 150, 82, 126, 216, 23, 81,
+            85, 90, 47, 95, 46, 119, 108, 253, 12, 92, 29, 13, 25,
+        ],
+        [
+            100, 162, 156, 175, 254, 203, 69, 171, 182, 190, 85, 161, 94, 117, 225, 0, 95, 121,
+            190, 235, 79, 7, 147, 134, 48, 156, 113, 55, 114, 229, 174, 25,
+        ],
+        [
+            243, 93, 223, 98, 132, 0, 171, 125, 135, 53, 111, 49, 49, 173, 69, 211, 62, 106, 168,
+            221, 115, 208, 2, 20, 14, 150, 124, 130, 189, 48, 16, 15,
+        ],
+    ],
+    [
+        [
+            43, 238, 4, 240, 186, 135, 47, 128, 185, 51, 70, 196, 3, 137, 22, 254, 29, 247, 161,
+            233, 187, 255, 239, 183, 150, 179, 8, 64, 90, 33, 17, 54,
+        ],
+        [
+            20, 226, 19, 60, 92, 195, 1, 255, 100, 188, 89, 54, 98, 225, 138, 133, 26, 140, 202,
+            76, 107, 199, 46, 54, 167, 23, 119, 80, 19, 25, 34, 5,
+        ],
+        [
+            145, 109, 10, 159, 200, 145, 32, 253, 32, 93, 187, 12, 66, 161, 44, 217, 16, 100, 225,
+            37, 139, 125, 169, 119, 83, 34, 96, 130, 234, 255, 138, 38,
+        ],
+        [
+            148, 127, 71, 227, 195, 244, 12, 49, 83, 78, 218, 9, 176, 158, 12, 5, 194, 54, 44, 157,
+            252, 228, 175, 170, 54, 91, 49, 254, 83, 228, 180, 61,
+        ],
+        [
+            36, 96, 238, 61, 227, 144, 153, 81, 121, 197, 74, 190, 35, 216, 255, 92, 70, 7, 168,
+            219, 130, 255, 172, 71, 200, 31, 142, 232, 255, 117, 96, 15,
+        ],
+        [
+            50, 152, 255, 238, 188, 127, 140, 240, 203, 33, 246, 193, 228, 179, 25, 1, 227, 194,
+            79, 70, 41, 160, 83, 243, 148, 1, 95, 86, 63, 22, 55, 40,
+        ],
+        [
+            99, 228, 147, 46, 232, 157, 225, 210, 45, 159, 169, 42, 184, 90, 3, 165, 62, 4, 93,
+            181, 74, 187, 112, 156, 26, 103, 199, 84, 132, 148, 14, 24,
+        ],
+        [
+            120, 163, 182, 125, 197, 141, 122, 21, 166, 103, 203, 57, 160, 228, 242, 192, 203, 40,
+            233, 179, 8, 173, 199, 21, 213, 215, 222, 129, 23, 153, 25, 29,
+        ],
+    ],
+    [
+        [
+            189, 6, 27, 46, 68, 6, 124, 69, 159, 212, 18, 104, 218, 16, 66, 183, 250, 92, 69, 5,
+            218, 234, 31, 198, 123, 100, 216, 103, 106, 113, 192, 43,
+        ],
+        [
+            226, 152, 83, 159, 143, 155, 164, 90, 171, 100, 22, 240, 187, 26, 55, 172, 170, 133,
+            128, 192, 29, 33, 35, 8, 59, 142, 20, 204, 151, 172, 29, 28,
+        ],
+        [
+            196, 57, 232, 112, 46, 200, 26, 93, 224, 191, 117, 154, 9, 47, 228, 145, 122, 137, 238,
+            236, 70, 14, 112, 163, 96, 140, 239, 122, 75, 200, 206, 12,
+        ],
+        [
+            91, 66, 65, 159, 86, 50, 113, 39, 30, 12, 213, 235, 15, 70, 163, 119, 112, 27, 22, 170,
+            151, 20, 71, 172, 65, 251, 224, 76, 26, 189, 118, 42,
+        ],
+        [
+            195, 200, 87, 207, 125, 122, 254, 50, 24, 40, 189, 169, 237, 228, 134, 66, 37, 220, 23,
+            98, 202, 193, 152, 184, 171, 63, 105, 11, 70, 94, 154, 58,
+        ],
+        [
+            4, 0, 82, 125, 41, 130, 11, 238, 112, 201, 95, 30, 144, 31, 31, 233, 86, 121, 145, 200,
+            204, 89, 182, 51, 151, 169, 58, 206, 184, 219, 181, 46,
+        ],
+        [
+            36, 240, 60, 205, 120, 239, 9, 98, 61, 228, 247, 9, 145, 71, 67, 10, 164, 160, 186,
+            104, 25, 225, 210, 37, 31, 42, 58, 208, 44, 19, 30, 29,
+        ],
+        [
+            163, 214, 140, 64, 48, 239, 54, 175, 108, 32, 187, 248, 142, 77, 244, 117, 10, 236, 39,
+            80, 158, 44, 98, 44, 248, 24, 208, 60, 173, 247, 115, 28,
+        ],
+    ],
+    [
+        [
+            230, 166, 7, 118, 178, 55, 26, 250, 91, 159, 230, 158, 34, 135, 91, 49, 166, 244, 124,
+            175, 86, 228, 159, 119, 231, 15, 19, 199, 219, 85, 233, 19,
+        ],
+        [
+            65, 240, 77, 9, 197, 255, 96, 35, 239, 161, 177, 115, 83, 114, 180, 179, 118, 158, 220,
+            61, 177, 3, 175, 70, 132, 51, 87, 79, 36, 104, 129, 15,
+        ],
+        [
+            245, 9, 141, 218, 228, 57, 204, 250, 83, 156, 160, 158, 146, 157, 206, 198, 16, 94, 80,
+            59, 31, 242, 163, 30, 80, 99, 32, 142, 193, 101, 172, 22,
+        ],
+        [
+            22, 68, 73, 27, 236, 149, 225, 78, 69, 83, 174, 202, 98, 113, 148, 167, 43, 132, 118,
+            49, 153, 96, 186, 134, 20, 103, 123, 48, 75, 104, 207, 6,
+        ],
+        [
+            186, 5, 66, 183, 166, 255, 222, 14, 34, 0, 105, 167, 36, 11, 210, 228, 91, 103, 65,
+            248, 3, 48, 117, 240, 180, 214, 201, 222, 5, 202, 103, 42,
+        ],
+        [
+            231, 31, 19, 122, 240, 72, 34, 93, 204, 125, 90, 215, 124, 174, 124, 28, 145, 103, 126,
+            178, 1, 9, 152, 240, 251, 118, 14, 195, 197, 167, 136, 22,
+        ],
+        [
+            121, 57, 39, 104, 26, 135, 98, 221, 85, 199, 94, 230, 223, 129, 28, 191, 185, 0, 46,
+            200, 72, 116, 202, 255, 80, 180, 13, 98, 229, 217, 238, 17,
+        ],
+        [
+            228, 158, 59, 241, 50, 224, 177, 78, 8, 121, 211, 157, 95, 196, 88, 59, 85, 141, 134,
+            50, 123, 168, 175, 115, 240, 153, 223, 61, 71, 229, 77, 10,
+        ],
+    ],
+    [
+        [
+            196, 151, 212, 168, 230, 19, 214, 179, 118, 17, 196, 50, 76, 231, 114, 80, 178, 137,
+            232, 241, 60, 2, 0, 124, 25, 239, 98, 131, 220, 159, 221, 51,
+        ],
+        [
+            207, 216, 50, 53, 106, 200, 85, 166, 137, 33, 29, 239, 97, 46, 104, 218, 177, 150, 178,
+            64, 232, 238, 208, 98, 103, 58, 233, 97, 1, 243, 73, 5,
+        ],
+        [
+            174, 215, 22, 124, 193, 136, 79, 91, 111, 146, 51, 128, 249, 129, 203, 168, 157, 164,
+            252, 144, 206, 10, 63, 253, 250, 113, 251, 65, 218, 23, 12, 25,
+        ],
+        [
+            186, 92, 109, 134, 176, 198, 214, 156, 148, 7, 106, 121, 226, 70, 250, 192, 180, 164,
+            16, 29, 245, 196, 155, 183, 214, 26, 3, 26, 249, 134, 153, 38,
+        ],
+        [
+            244, 56, 170, 227, 236, 145, 153, 150, 166, 77, 201, 48, 100, 130, 204, 194, 108, 207,
+            3, 243, 227, 41, 45, 8, 136, 106, 58, 70, 126, 3, 132, 59,
+        ],
+        [
+            215, 169, 24, 118, 5, 192, 171, 217, 47, 86, 212, 249, 228, 92, 248, 103, 242, 222, 17,
+            206, 36, 157, 126, 224, 105, 113, 239, 102, 54, 25, 151, 14,
+        ],
+        [
+            129, 213, 202, 163, 74, 201, 249, 43, 200, 62, 4, 232, 68, 211, 44, 153, 25, 71, 155,
+            5, 93, 19, 117, 195, 201, 179, 158, 207, 252, 213, 166, 62,
+        ],
+        [
+            86, 75, 236, 222, 217, 118, 49, 0, 141, 130, 201, 248, 34, 225, 69, 91, 186, 90, 246,
+            36, 141, 152, 166, 216, 118, 7, 38, 133, 147, 190, 79, 3,
+        ],
+    ],
+    [
+        [
+            226, 55, 121, 73, 104, 77, 129, 202, 168, 123, 192, 163, 28, 9, 195, 37, 116, 207, 125,
+            198, 203, 244, 121, 236, 232, 91, 168, 14, 142, 241, 250, 60,
+        ],
+        [
+            222, 86, 183, 37, 132, 107, 210, 125, 127, 46, 94, 81, 18, 91, 72, 160, 16, 193, 239,
+            114, 238, 186, 186, 203, 96, 169, 87, 155, 108, 36, 97, 6,
+        ],
+        [
+            110, 110, 99, 98, 167, 78, 75, 128, 33, 138, 18, 19, 194, 192, 219, 184, 74, 196, 82,
+            115, 241, 102, 30, 197, 199, 194, 154, 120, 49, 10, 95, 37,
+        ],
+        [
+            212, 206, 154, 98, 20, 33, 185, 182, 138, 207, 65, 197, 246, 19, 132, 52, 173, 186, 42,
+            243, 88, 20, 51, 11, 206, 25, 216, 48, 162, 138, 124, 13,
+        ],
+        [
+            32, 161, 64, 72, 1, 32, 243, 175, 251, 37, 86, 248, 136, 187, 181, 55, 39, 255, 98,
+            228, 189, 235, 194, 2, 228, 39, 92, 104, 245, 17, 117, 7,
+        ],
+        [
+            207, 205, 116, 251, 54, 21, 8, 82, 173, 45, 205, 38, 245, 155, 16, 56, 198, 232, 173,
+            88, 97, 22, 234, 26, 139, 206, 108, 254, 123, 87, 181, 26,
+        ],
+        [
+            38, 147, 223, 169, 68, 76, 49, 169, 137, 141, 72, 63, 166, 88, 34, 220, 163, 91, 167,
+            251, 29, 160, 254, 199, 205, 74, 158, 105, 252, 182, 158, 21,
+        ],
+        [
+            221, 44, 183, 72, 226, 191, 226, 165, 162, 153, 186, 190, 97, 53, 19, 115, 215, 71,
+            155, 33, 79, 120, 197, 228, 216, 212, 249, 15, 179, 11, 216, 32,
+        ],
+    ],
+    [
+        [
+            248, 136, 25, 30, 234, 18, 242, 209, 97, 211, 74, 228, 236, 199, 101, 200, 206, 52,
+            146, 207, 72, 125, 28, 3, 60, 86, 34, 195, 250, 251, 204, 0,
+        ],
+        [
+            204, 182, 197, 171, 247, 159, 161, 27, 18, 146, 249, 99, 198, 138, 25, 61, 119, 232,
+            160, 152, 18, 149, 7, 67, 125, 231, 237, 3, 68, 190, 137, 0,
+        ],
+        [
+            141, 245, 108, 181, 49, 171, 106, 247, 202, 169, 106, 39, 93, 40, 122, 2, 236, 255,
+            198, 215, 122, 254, 242, 192, 49, 250, 243, 35, 7, 219, 21, 22,
+        ],
+        [
+            239, 85, 174, 15, 207, 84, 128, 92, 87, 80, 129, 20, 21, 225, 233, 158, 193, 136, 141,
+            114, 66, 146, 29, 193, 223, 250, 27, 56, 195, 15, 135, 17,
+        ],
+        [
+            231, 242, 76, 43, 57, 10, 41, 166, 32, 254, 129, 47, 147, 118, 189, 200, 44, 102, 204,
+            116, 96, 82, 186, 150, 106, 27, 30, 73, 237, 94, 36, 44,
+        ],
+        [
+            240, 139, 69, 197, 199, 228, 206, 96, 255, 229, 189, 207, 65, 97, 93, 211, 161, 190,
+            228, 249, 50, 82, 223, 251, 13, 173, 241, 221, 78, 243, 105, 19,
+        ],
+        [
+            44, 224, 170, 161, 50, 93, 212, 80, 100, 243, 51, 74, 51, 165, 60, 208, 244, 18, 158,
+            30, 158, 81, 111, 213, 136, 95, 125, 173, 143, 108, 106, 4,
+        ],
+        [
+            134, 244, 131, 92, 152, 118, 30, 139, 153, 128, 62, 115, 88, 25, 58, 29, 205, 101, 47,
+            208, 93, 89, 222, 17, 122, 112, 71, 56, 147, 68, 92, 22,
+        ],
+    ],
+    [
+        [
+            59, 157, 112, 130, 217, 2, 102, 228, 79, 211, 152, 82, 183, 186, 47, 151, 125, 13, 97,
+            121, 115, 253, 17, 121, 227, 250, 99, 14, 84, 249, 18, 30,
+        ],
+        [
+            80, 180, 155, 59, 6, 182, 136, 39, 134, 168, 238, 138, 129, 174, 195, 206, 210, 167,
+            214, 167, 35, 139, 130, 27, 21, 59, 7, 200, 165, 37, 91, 29,
+        ],
+        [
+            220, 228, 189, 172, 68, 102, 135, 236, 7, 70, 152, 244, 120, 217, 67, 44, 43, 74, 155,
+            179, 2, 148, 106, 238, 232, 186, 181, 130, 141, 114, 60, 1,
+        ],
+        [
+            68, 132, 80, 55, 28, 52, 222, 165, 156, 6, 214, 236, 207, 37, 223, 118, 42, 55, 40,
+            123, 208, 181, 240, 56, 14, 142, 58, 72, 193, 71, 120, 58,
+        ],
+        [
+            93, 114, 68, 232, 179, 37, 202, 74, 41, 64, 245, 112, 233, 162, 231, 19, 223, 207, 232,
+            213, 178, 60, 106, 26, 35, 191, 108, 19, 243, 220, 40, 41,
+        ],
+        [
+            166, 223, 96, 196, 120, 210, 67, 47, 249, 123, 164, 213, 148, 138, 7, 155, 96, 222,
+            176, 166, 88, 85, 95, 71, 221, 237, 138, 181, 198, 165, 163, 0,
+        ],
+        [
+            241, 254, 24, 83, 47, 65, 146, 151, 5, 182, 233, 205, 182, 13, 75, 173, 10, 14, 48,
+            223, 227, 201, 141, 212, 114, 205, 196, 92, 137, 253, 127, 60,
+        ],
+        [
+            20, 41, 204, 77, 168, 230, 68, 202, 73, 251, 254, 88, 95, 80, 130, 216, 122, 75, 173,
+            105, 236, 192, 177, 209, 26, 66, 205, 127, 154, 188, 245, 17,
+        ],
+    ],
+    [
+        [
+            239, 194, 214, 218, 225, 244, 0, 110, 12, 75, 130, 236, 76, 102, 205, 64, 104, 144,
+            198, 188, 183, 46, 119, 96, 230, 68, 210, 161, 253, 91, 8, 20,
+        ],
+        [
+            84, 32, 226, 77, 213, 16, 207, 156, 234, 224, 147, 173, 186, 249, 186, 155, 90, 255,
+            34, 55, 48, 108, 76, 214, 254, 66, 95, 200, 174, 191, 52, 43,
+        ],
+        [
+            37, 103, 206, 174, 250, 172, 136, 87, 30, 68, 89, 230, 110, 190, 148, 71, 5, 249, 217,
+            112, 54, 182, 127, 54, 173, 89, 6, 63, 230, 69, 32, 35,
+        ],
+        [
+            160, 186, 242, 212, 179, 197, 16, 239, 56, 24, 91, 241, 68, 7, 138, 200, 93, 194, 45,
+            155, 210, 60, 30, 4, 167, 246, 82, 244, 71, 217, 31, 20,
+        ],
+        [
+            182, 132, 62, 134, 4, 186, 95, 160, 230, 255, 125, 156, 5, 134, 66, 99, 83, 182, 156,
+            207, 98, 84, 197, 48, 160, 47, 126, 2, 253, 64, 69, 25,
+        ],
+        [
+            135, 241, 60, 121, 32, 218, 195, 61, 68, 66, 190, 195, 208, 2, 201, 111, 158, 101, 108,
+            228, 145, 141, 82, 80, 36, 16, 157, 212, 65, 213, 188, 61,
+        ],
+        [
+            190, 186, 202, 30, 121, 177, 200, 82, 245, 162, 14, 253, 114, 50, 43, 134, 246, 12,
+            100, 222, 149, 242, 117, 174, 136, 192, 117, 132, 228, 144, 238, 39,
+        ],
+        [
+            160, 120, 19, 13, 34, 38, 71, 236, 116, 162, 150, 254, 247, 252, 222, 198, 196, 59, 98,
+            165, 54, 33, 22, 120, 58, 73, 225, 42, 37, 211, 88, 21,
+        ],
+    ],
+    [
+        [
+            252, 1, 229, 131, 50, 189, 111, 31, 191, 210, 177, 219, 234, 21, 100, 182, 115, 212,
+            154, 111, 130, 59, 237, 32, 142, 202, 110, 96, 166, 120, 188, 1,
+        ],
+        [
+            247, 244, 137, 120, 38, 62, 94, 38, 17, 38, 102, 240, 225, 129, 15, 214, 213, 142, 79,
+            176, 156, 118, 85, 80, 167, 47, 122, 152, 206, 19, 67, 40,
+        ],
+        [
+            27, 159, 102, 201, 17, 4, 75, 28, 159, 5, 194, 6, 63, 104, 157, 219, 53, 38, 84, 216,
+            73, 181, 11, 118, 29, 177, 147, 135, 150, 5, 58, 10,
+        ],
+        [
+            97, 168, 102, 245, 40, 187, 155, 99, 147, 65, 114, 119, 191, 225, 196, 34, 117, 134,
+            116, 162, 73, 69, 158, 103, 144, 16, 22, 216, 146, 38, 10, 41,
+        ],
+        [
+            149, 231, 10, 10, 17, 16, 88, 231, 24, 215, 115, 237, 123, 68, 9, 209, 24, 141, 150,
+            207, 109, 56, 107, 192, 252, 112, 156, 0, 65, 234, 86, 10,
+        ],
+        [
+            201, 24, 6, 113, 122, 123, 58, 3, 233, 141, 78, 228, 137, 112, 71, 121, 200, 171, 158,
+            233, 87, 171, 121, 118, 205, 98, 38, 24, 176, 153, 170, 25,
+        ],
+        [
+            6, 114, 137, 241, 204, 203, 173, 160, 14, 124, 220, 164, 166, 224, 0, 253, 255, 68, 40,
+            182, 248, 135, 226, 25, 213, 247, 45, 116, 94, 147, 107, 3,
+        ],
+        [
+            73, 103, 138, 222, 168, 203, 85, 216, 242, 63, 127, 158, 153, 60, 168, 180, 234, 71,
+            27, 10, 38, 161, 207, 26, 81, 150, 195, 37, 91, 228, 57, 46,
+        ],
+    ],
+    [
+        [
+            188, 220, 107, 162, 250, 116, 137, 134, 75, 73, 102, 28, 11, 158, 166, 162, 77, 99,
+            159, 21, 166, 195, 208, 99, 28, 0, 51, 64, 126, 222, 203, 28,
+        ],
+        [
+            115, 93, 10, 209, 3, 81, 82, 191, 158, 74, 26, 242, 145, 24, 85, 106, 28, 36, 54, 17,
+            216, 109, 58, 102, 221, 11, 10, 157, 226, 90, 53, 3,
+        ],
+        [
+            197, 172, 174, 245, 150, 142, 92, 221, 45, 118, 174, 8, 83, 195, 45, 83, 221, 212, 122,
+            239, 218, 103, 89, 56, 184, 102, 73, 70, 1, 40, 246, 54,
+        ],
+        [
+            131, 77, 239, 236, 59, 58, 35, 163, 25, 57, 251, 93, 224, 202, 225, 84, 189, 195, 1,
+            234, 156, 138, 3, 2, 102, 170, 173, 235, 97, 41, 224, 0,
+        ],
+        [
+            251, 165, 141, 221, 2, 154, 174, 224, 120, 187, 163, 188, 37, 146, 49, 193, 150, 241,
+            183, 33, 12, 228, 96, 92, 105, 198, 238, 59, 247, 172, 247, 54,
+        ],
+        [
+            31, 84, 10, 130, 68, 107, 203, 153, 201, 34, 69, 151, 1, 180, 37, 198, 113, 64, 82,
+            116, 116, 142, 251, 62, 22, 122, 138, 130, 200, 159, 145, 2,
+        ],
+        [
+            229, 126, 102, 192, 242, 5, 109, 247, 248, 70, 34, 78, 35, 23, 81, 67, 34, 226, 133,
+            119, 200, 242, 142, 111, 223, 102, 159, 61, 162, 226, 222, 11,
+        ],
+        [
+            171, 0, 253, 102, 188, 223, 208, 250, 186, 183, 127, 172, 10, 41, 201, 173, 242, 156,
+            106, 219, 236, 139, 76, 115, 200, 123, 176, 228, 181, 248, 121, 38,
+        ],
+    ],
+    [
+        [
+            187, 71, 125, 130, 250, 45, 125, 44, 56, 31, 103, 55, 71, 87, 166, 228, 184, 12, 252,
+            79, 26, 221, 65, 188, 62, 254, 222, 87, 189, 71, 43, 0,
+        ],
+        [
+            248, 127, 55, 175, 11, 237, 134, 201, 211, 212, 93, 115, 63, 118, 15, 121, 71, 55, 176,
+            74, 3, 75, 20, 100, 177, 194, 39, 92, 67, 109, 243, 38,
+        ],
+        [
+            147, 188, 248, 11, 127, 3, 176, 153, 109, 5, 65, 101, 2, 46, 70, 203, 246, 245, 254,
+            67, 193, 214, 156, 21, 116, 165, 60, 79, 219, 45, 180, 47,
+        ],
+        [
+            78, 126, 47, 15, 17, 83, 240, 144, 40, 174, 95, 250, 144, 43, 132, 67, 241, 189, 140,
+            244, 41, 221, 164, 186, 104, 156, 223, 233, 160, 99, 190, 39,
+        ],
+        [
+            29, 119, 16, 42, 190, 69, 200, 191, 3, 160, 164, 28, 189, 135, 85, 63, 59, 121, 213,
+            143, 9, 96, 150, 14, 21, 93, 132, 57, 4, 165, 174, 12,
+        ],
+        [
+            54, 200, 34, 46, 89, 210, 152, 121, 245, 147, 150, 48, 193, 246, 108, 154, 243, 12, 10,
+            10, 97, 83, 225, 116, 187, 177, 176, 80, 248, 185, 5, 38,
+        ],
+        [
+            245, 84, 103, 49, 77, 27, 84, 143, 30, 40, 54, 249, 178, 71, 191, 135, 199, 72, 204,
+            162, 75, 110, 203, 246, 193, 61, 70, 158, 74, 154, 13, 45,
+        ],
+        [
+            123, 98, 28, 217, 129, 160, 71, 205, 19, 41, 168, 124, 76, 145, 108, 71, 57, 60, 26,
+            154, 163, 64, 250, 13, 52, 179, 197, 193, 54, 184, 29, 32,
+        ],
+    ],
+    [
+        [
+            103, 140, 102, 88, 162, 193, 224, 59, 243, 31, 145, 100, 116, 71, 36, 129, 94, 248, 33,
+            0, 102, 46, 146, 206, 22, 255, 216, 58, 61, 118, 226, 47,
+        ],
+        [
+            21, 127, 228, 231, 155, 190, 28, 145, 48, 160, 35, 104, 47, 120, 243, 107, 145, 118,
+            199, 126, 138, 164, 246, 143, 153, 59, 153, 209, 81, 118, 167, 9,
+        ],
+        [
+            4, 84, 44, 30, 90, 253, 226, 166, 218, 12, 39, 214, 231, 241, 223, 87, 87, 82, 93, 220,
+            65, 132, 166, 75, 221, 33, 236, 113, 198, 43, 210, 39,
+        ],
+        [
+            243, 54, 41, 143, 244, 171, 75, 158, 218, 230, 55, 35, 236, 18, 40, 55, 157, 139, 180,
+            29, 58, 159, 88, 208, 214, 87, 168, 227, 93, 211, 194, 17,
+        ],
+        [
+            97, 131, 219, 190, 19, 178, 244, 173, 141, 143, 113, 3, 27, 63, 35, 185, 170, 43, 75,
+            64, 75, 38, 5, 13, 123, 39, 147, 243, 141, 122, 217, 39,
+        ],
+        [
+            3, 24, 126, 200, 122, 92, 125, 221, 95, 205, 139, 145, 231, 77, 223, 96, 84, 39, 33,
+            66, 139, 41, 82, 182, 22, 102, 95, 173, 66, 125, 77, 21,
+        ],
+        [
+            27, 50, 52, 183, 190, 198, 236, 248, 71, 251, 120, 132, 192, 227, 113, 36, 155, 81,
+            225, 48, 72, 17, 246, 99, 208, 242, 236, 93, 2, 19, 53, 31,
+        ],
+        [
+            99, 18, 31, 165, 229, 52, 216, 52, 162, 62, 66, 1, 190, 22, 69, 133, 11, 126, 106, 165,
+            131, 180, 218, 253, 238, 124, 3, 16, 42, 196, 148, 57,
+        ],
+    ],
+    [
+        [
+            0, 209, 105, 72, 69, 130, 81, 154, 136, 174, 169, 182, 42, 150, 112, 115, 234, 136, 47,
+            170, 158, 213, 211, 65, 178, 62, 18, 172, 135, 59, 253, 19,
+        ],
+        [
+            145, 192, 219, 168, 214, 190, 54, 248, 68, 248, 196, 148, 4, 254, 61, 193, 67, 218,
+            131, 110, 235, 60, 159, 101, 200, 218, 208, 195, 30, 249, 163, 32,
+        ],
+        [
+            21, 246, 3, 74, 137, 246, 202, 207, 71, 59, 198, 73, 117, 224, 124, 57, 2, 82, 110, 6,
+            190, 80, 143, 143, 113, 62, 127, 122, 164, 202, 6, 54,
+        ],
+        [
+            252, 245, 11, 63, 63, 70, 60, 82, 15, 154, 188, 35, 211, 222, 252, 180, 109, 109, 98,
+            69, 197, 240, 137, 46, 189, 8, 167, 87, 15, 179, 18, 12,
+        ],
+        [
+            125, 206, 204, 128, 43, 62, 39, 36, 246, 164, 44, 6, 250, 83, 14, 207, 53, 201, 166,
+            231, 175, 110, 140, 200, 48, 239, 20, 171, 46, 80, 115, 54,
+        ],
+        [
+            167, 7, 74, 225, 61, 229, 21, 154, 196, 11, 247, 27, 158, 112, 217, 238, 57, 53, 63,
+            251, 162, 91, 168, 86, 37, 203, 207, 119, 68, 135, 205, 9,
+        ],
+        [
+            84, 187, 71, 200, 46, 254, 136, 13, 25, 137, 121, 128, 232, 221, 40, 0, 175, 232, 153,
+            227, 181, 162, 29, 67, 225, 234, 249, 102, 82, 171, 226, 1,
+        ],
+        [
+            24, 185, 170, 6, 35, 57, 108, 85, 245, 134, 216, 239, 33, 12, 223, 38, 227, 73, 145,
+            100, 25, 14, 244, 177, 84, 38, 101, 67, 21, 96, 249, 61,
+        ],
+    ],
+    [
+        [
+            57, 9, 82, 174, 160, 195, 27, 106, 241, 225, 207, 16, 11, 131, 29, 63, 187, 187, 5, 76,
+            34, 39, 136, 124, 56, 25, 58, 99, 70, 116, 170, 19,
+        ],
+        [
+            143, 6, 32, 114, 74, 44, 29, 53, 226, 34, 62, 232, 111, 63, 201, 203, 46, 115, 209,
+            118, 31, 27, 1, 120, 254, 70, 252, 80, 5, 111, 123, 55,
+        ],
+        [
+            62, 18, 214, 41, 0, 12, 4, 12, 145, 201, 12, 6, 179, 4, 20, 84, 36, 155, 8, 99, 181,
+            18, 150, 144, 203, 228, 172, 135, 166, 152, 214, 8,
+        ],
+        [
+            49, 93, 249, 139, 121, 113, 205, 158, 145, 118, 40, 96, 206, 154, 71, 190, 146, 65,
+            233, 104, 83, 91, 25, 118, 176, 14, 149, 115, 137, 27, 223, 41,
+        ],
+        [
+            116, 160, 29, 244, 254, 193, 228, 122, 194, 168, 126, 1, 222, 247, 90, 191, 253, 101,
+            123, 197, 178, 127, 30, 113, 38, 73, 48, 240, 82, 52, 161, 12,
+        ],
+        [
+            156, 145, 203, 40, 113, 83, 199, 161, 230, 196, 203, 227, 217, 212, 254, 139, 37, 215,
+            39, 230, 190, 141, 119, 120, 87, 23, 61, 21, 3, 209, 179, 47,
+        ],
+        [
+            179, 114, 238, 159, 43, 22, 64, 61, 207, 56, 101, 90, 62, 245, 27, 21, 165, 0, 205, 34,
+            104, 32, 170, 75, 215, 255, 83, 74, 123, 73, 159, 19,
+        ],
+        [
+            14, 208, 162, 223, 209, 5, 175, 15, 1, 78, 222, 82, 21, 113, 25, 129, 103, 64, 139, 21,
+            226, 245, 199, 114, 252, 69, 133, 254, 128, 63, 61, 13,
+        ],
+    ],
+    [
+        [
+            255, 187, 20, 3, 51, 61, 230, 80, 83, 233, 71, 190, 94, 131, 225, 143, 139, 246, 196,
+            161, 165, 85, 92, 167, 71, 198, 83, 10, 164, 120, 89, 26,
+        ],
+        [
+            250, 108, 167, 151, 249, 92, 38, 36, 21, 96, 210, 31, 41, 91, 113, 183, 104, 192, 3,
+            45, 165, 253, 37, 75, 239, 245, 28, 148, 5, 255, 134, 60,
+        ],
+        [
+            59, 154, 220, 255, 37, 98, 169, 60, 50, 196, 202, 240, 225, 57, 165, 129, 255, 66, 169,
+            162, 7, 30, 198, 27, 160, 208, 193, 106, 29, 119, 104, 48,
+        ],
+        [
+            137, 180, 21, 151, 27, 173, 213, 11, 238, 163, 104, 192, 171, 59, 79, 249, 123, 55,
+            183, 8, 94, 117, 32, 48, 41, 141, 231, 207, 61, 135, 104, 2,
+        ],
+        [
+            242, 254, 15, 0, 58, 49, 204, 28, 27, 56, 2, 67, 248, 104, 160, 32, 214, 242, 10, 206,
+            233, 61, 23, 103, 180, 53, 179, 198, 56, 254, 65, 6,
+        ],
+        [
+            136, 214, 253, 248, 156, 140, 42, 172, 221, 187, 160, 233, 86, 213, 239, 5, 110, 252,
+            70, 18, 193, 29, 156, 156, 136, 70, 167, 59, 98, 223, 7, 30,
+        ],
+        [
+            84, 25, 227, 152, 61, 51, 53, 59, 135, 229, 159, 248, 6, 39, 151, 139, 121, 149, 226,
+            142, 126, 136, 248, 196, 93, 176, 131, 254, 221, 204, 179, 36,
+        ],
+        [
+            198, 74, 99, 58, 59, 34, 82, 94, 95, 64, 17, 241, 173, 114, 211, 57, 124, 181, 140,
+            102, 105, 79, 13, 1, 60, 121, 143, 88, 192, 253, 159, 47,
+        ],
+    ],
+    [
+        [
+            90, 115, 165, 218, 163, 197, 210, 143, 213, 125, 1, 77, 74, 165, 200, 244, 80, 39, 20,
+            247, 86, 120, 109, 109, 93, 7, 209, 199, 109, 12, 144, 46,
+        ],
+        [
+            231, 44, 48, 128, 109, 202, 114, 192, 218, 67, 233, 141, 64, 251, 104, 41, 58, 212, 60,
+            65, 93, 58, 34, 149, 128, 90, 30, 197, 191, 244, 8, 37,
+        ],
+        [
+            56, 47, 18, 80, 195, 143, 175, 35, 183, 225, 201, 236, 138, 29, 26, 229, 194, 202, 13,
+            43, 71, 188, 3, 204, 12, 15, 218, 207, 15, 83, 219, 39,
+        ],
+        [
+            50, 71, 182, 171, 33, 129, 211, 168, 40, 85, 193, 218, 165, 54, 220, 203, 164, 124, 8,
+            37, 19, 210, 8, 253, 120, 158, 239, 239, 28, 195, 253, 37,
+        ],
+        [
+            245, 191, 155, 103, 118, 221, 209, 204, 89, 48, 249, 160, 180, 1, 114, 3, 254, 220, 94,
+            244, 221, 122, 224, 55, 184, 106, 99, 11, 236, 89, 211, 38,
+        ],
+        [
+            182, 208, 168, 152, 15, 192, 45, 31, 93, 181, 13, 203, 128, 82, 126, 145, 129, 220, 19,
+            252, 188, 247, 49, 216, 218, 198, 178, 70, 180, 209, 175, 22,
+        ],
+        [
+            72, 71, 200, 22, 21, 120, 50, 111, 112, 195, 141, 79, 49, 52, 98, 8, 37, 130, 142, 13,
+            78, 197, 15, 92, 203, 50, 108, 82, 109, 254, 158, 12,
+        ],
+        [
+            71, 44, 114, 76, 152, 26, 79, 25, 44, 244, 191, 178, 150, 102, 34, 230, 54, 251, 209,
+            155, 90, 28, 81, 49, 127, 246, 116, 238, 106, 105, 196, 29,
+        ],
+    ],
+    [
+        [
+            208, 87, 78, 186, 184, 128, 38, 190, 131, 156, 221, 119, 87, 12, 144, 4, 240, 77, 118,
+            209, 74, 131, 37, 155, 247, 155, 206, 167, 80, 71, 127, 18,
+        ],
+        [
+            190, 54, 229, 228, 15, 167, 185, 240, 161, 238, 216, 88, 210, 31, 242, 20, 81, 147, 48,
+            54, 38, 226, 251, 64, 69, 196, 67, 166, 242, 34, 118, 39,
+        ],
+        [
+            58, 171, 187, 174, 13, 247, 253, 15, 102, 171, 48, 63, 136, 157, 55, 28, 117, 130, 104,
+            23, 145, 203, 155, 105, 121, 249, 115, 106, 88, 114, 86, 11,
+        ],
+        [
+            105, 30, 100, 75, 20, 206, 29, 147, 150, 37, 48, 216, 33, 147, 61, 193, 82, 230, 205,
+            122, 142, 65, 148, 102, 47, 185, 182, 147, 185, 31, 29, 54,
+        ],
+        [
+            158, 245, 169, 236, 26, 185, 17, 174, 156, 69, 81, 196, 60, 109, 99, 91, 19, 208, 93,
+            58, 9, 109, 228, 186, 109, 127, 171, 156, 229, 215, 195, 59,
+        ],
+        [
+            23, 42, 4, 183, 91, 177, 2, 172, 168, 182, 158, 185, 157, 118, 199, 184, 237, 203, 60,
+            170, 35, 121, 162, 7, 130, 171, 121, 207, 32, 2, 227, 62,
+        ],
+        [
+            0, 139, 174, 217, 13, 116, 28, 230, 238, 117, 190, 91, 86, 105, 38, 231, 147, 100, 233,
+            187, 70, 128, 111, 82, 184, 113, 154, 136, 59, 27, 21, 10,
+        ],
+        [
+            4, 208, 53, 136, 59, 196, 102, 52, 69, 1, 231, 8, 254, 19, 67, 134, 251, 73, 157, 156,
+            30, 94, 170, 147, 185, 72, 11, 143, 226, 255, 0, 60,
+        ],
+    ],
+    [
+        [
+            214, 131, 68, 196, 131, 169, 22, 250, 29, 101, 142, 26, 106, 96, 18, 190, 18, 15, 19,
+            59, 203, 203, 119, 251, 61, 221, 198, 116, 24, 178, 61, 42,
+        ],
+        [
+            101, 161, 133, 103, 0, 112, 204, 255, 98, 240, 20, 161, 242, 253, 216, 204, 83, 96, 93,
+            228, 77, 76, 63, 70, 116, 156, 69, 253, 121, 189, 2, 36,
+        ],
+        [
+            156, 83, 226, 206, 4, 35, 12, 137, 209, 181, 109, 81, 194, 119, 188, 216, 30, 233, 135,
+            220, 213, 40, 74, 152, 49, 14, 0, 3, 223, 41, 238, 54,
+        ],
+        [
+            47, 25, 110, 4, 111, 57, 200, 91, 168, 73, 47, 175, 189, 60, 49, 243, 128, 11, 63, 17,
+            151, 123, 80, 140, 139, 202, 93, 104, 190, 32, 67, 54,
+        ],
+        [
+            90, 100, 132, 107, 167, 162, 164, 62, 239, 68, 20, 223, 157, 1, 90, 95, 248, 82, 65,
+            61, 241, 63, 238, 10, 2, 160, 230, 104, 101, 197, 60, 52,
+        ],
+        [
+            41, 144, 80, 156, 134, 224, 6, 48, 188, 57, 30, 205, 84, 135, 190, 75, 213, 94, 16, 72,
+            11, 96, 41, 117, 75, 60, 62, 133, 29, 133, 105, 15,
+        ],
+        [
+            219, 66, 247, 117, 3, 137, 38, 43, 131, 177, 137, 150, 9, 65, 160, 206, 235, 121, 121,
+            245, 205, 233, 229, 78, 72, 200, 171, 149, 240, 64, 184, 5,
+        ],
+        [
+            22, 179, 118, 116, 100, 222, 159, 96, 236, 247, 38, 23, 224, 103, 6, 5, 42, 95, 161, 4,
+            128, 2, 240, 122, 117, 247, 127, 207, 76, 205, 137, 31,
+        ],
+    ],
+    [
+        [
+            255, 68, 73, 184, 204, 219, 231, 9, 237, 101, 142, 55, 146, 252, 138, 14, 186, 62, 32,
+            108, 79, 130, 251, 188, 101, 134, 179, 162, 172, 160, 149, 22,
+        ],
+        [
+            93, 226, 69, 177, 229, 17, 78, 185, 6, 206, 195, 246, 145, 189, 141, 7, 197, 148, 166,
+            43, 203, 235, 170, 119, 102, 76, 108, 98, 216, 237, 121, 34,
+        ],
+        [
+            211, 167, 46, 90, 228, 111, 217, 129, 255, 3, 113, 207, 200, 221, 28, 48, 33, 62, 31,
+            245, 116, 175, 130, 128, 180, 252, 132, 178, 56, 58, 16, 2,
+        ],
+        [
+            159, 176, 149, 39, 220, 58, 146, 80, 175, 91, 125, 15, 166, 114, 133, 117, 52, 243,
+            219, 221, 223, 114, 140, 236, 106, 39, 65, 168, 43, 244, 140, 57,
+        ],
+        [
+            144, 68, 49, 189, 208, 94, 145, 108, 143, 62, 16, 188, 15, 110, 23, 239, 71, 48, 32,
+            238, 96, 19, 43, 91, 231, 90, 77, 162, 159, 162, 71, 15,
+        ],
+        [
+            103, 8, 114, 153, 156, 97, 188, 167, 128, 217, 58, 42, 208, 82, 234, 142, 53, 71, 10,
+            38, 177, 2, 13, 35, 8, 49, 196, 134, 215, 255, 42, 54,
+        ],
+        [
+            229, 29, 149, 199, 252, 232, 6, 148, 31, 243, 79, 192, 221, 191, 136, 186, 249, 198,
+            35, 155, 198, 198, 19, 183, 159, 123, 65, 127, 169, 3, 156, 59,
+        ],
+        [
+            2, 244, 213, 144, 80, 83, 125, 211, 252, 98, 209, 105, 104, 213, 143, 183, 164, 199,
+            103, 53, 110, 48, 230, 35, 34, 129, 221, 255, 225, 224, 42, 42,
+        ],
+    ],
+    [
+        [
+            145, 41, 77, 21, 230, 237, 146, 98, 160, 218, 242, 227, 198, 83, 11, 39, 148, 69, 31,
+            185, 143, 52, 71, 75, 157, 26, 157, 188, 179, 27, 114, 24,
+        ],
+        [
+            160, 247, 33, 120, 242, 78, 125, 237, 149, 68, 194, 190, 248, 145, 93, 23, 171, 167,
+            181, 242, 226, 41, 104, 67, 0, 116, 81, 246, 87, 82, 103, 51,
+        ],
+        [
+            84, 35, 131, 165, 134, 206, 147, 191, 7, 3, 253, 142, 49, 128, 111, 47, 53, 169, 88,
+            17, 31, 193, 20, 98, 19, 173, 111, 175, 134, 186, 166, 27,
+        ],
+        [
+            49, 150, 139, 110, 180, 138, 202, 107, 41, 238, 123, 185, 17, 161, 67, 30, 2, 2, 39,
+            91, 7, 35, 69, 121, 34, 12, 247, 78, 138, 39, 59, 8,
+        ],
+        [
+            64, 14, 249, 58, 50, 65, 122, 135, 174, 11, 102, 220, 221, 64, 29, 66, 24, 169, 57,
+            114, 140, 176, 7, 149, 78, 15, 211, 255, 101, 244, 151, 46,
+        ],
+        [
+            127, 185, 215, 42, 158, 164, 234, 37, 140, 239, 228, 75, 189, 8, 197, 4, 206, 24, 136,
+            191, 73, 206, 141, 195, 85, 123, 141, 189, 82, 250, 65, 21,
+        ],
+        [
+            49, 239, 163, 97, 219, 143, 242, 84, 53, 166, 149, 155, 243, 11, 207, 69, 250, 25, 159,
+            142, 240, 8, 72, 229, 91, 179, 218, 39, 128, 133, 201, 6,
+        ],
+        [
+            96, 144, 236, 91, 71, 246, 217, 36, 27, 102, 209, 14, 75, 249, 185, 211, 2, 97, 216,
+            204, 141, 6, 234, 251, 183, 215, 152, 151, 125, 210, 121, 14,
+        ],
+    ],
+];
+
+pub fn generator() -> pallas::Affine {
+    pallas::Affine::from_xy(
+        pallas::Base::from_bytes(&GENERATOR.0).unwrap(),
+        pallas::Base::from_bytes(&GENERATOR.1).unwrap(),
+    )
+    .unwrap()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::super::{
+        test_lagrange_coeffs, test_zs_and_us, NUM_WINDOWS_SHORT, VALUE_COMMITMENT_PERSONALIZATION,
+    };
+    use super::*;
+    use group::Curve;
+    use pasta_curves::{
+        arithmetic::{CurveAffine, CurveExt, FieldExt},
+        pallas,
+    };
+
+    #[test]
+    fn generator() {
+        let hasher = pallas::Point::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION);
+        let point = hasher(b"v");
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(*coords.x(), pallas::Base::from_bytes(&GENERATOR.0).unwrap());
+        assert_eq!(*coords.y(), pallas::Base::from_bytes(&GENERATOR.1).unwrap());
+    }
+
+    #[test]
+    fn lagrange_coeffs_short() {
+        let base = super::generator();
+        test_lagrange_coeffs(base, NUM_WINDOWS_SHORT);
+    }
+
+    #[test]
+    fn z_short() {
+        let base = super::generator();
+        test_zs_and_us(base, &Z_SHORT, &U_SHORT, NUM_WINDOWS_SHORT);
+    }
+}

+ 280 - 0
examples/halo2/src/primitives/sinsemilla.rs

@@ -0,0 +1,280 @@
+//! The Sinsemilla hash function and commitment scheme.
+
+use group::Wnaf;
+use halo2::arithmetic::{CurveAffine, CurveExt};
+use pasta_curves::pallas;
+use subtle::CtOption;
+
+use crate::spec::{extract_p_bottom, i2lebsp};
+
+mod addition;
+use self::addition::IncompletePoint;
+
+mod constants;
+mod sinsemilla_s;
+pub use constants::*;
+pub(crate) use sinsemilla_s::*;
+
+pub(crate) fn lebs2ip_k(bits: &[bool]) -> u32 {
+    assert!(bits.len() == K);
+    bits.iter()
+        .enumerate()
+        .fold(0u32, |acc, (i, b)| acc + if *b { 1 << i } else { 0 })
+}
+
+/// The sequence of K bits in little-endian order representing an integer
+/// up to `2^K` - 1.
+pub(crate) fn i2lebsp_k(int: usize) -> [bool; K] {
+    assert!(int < (1 << K));
+    i2lebsp(int as u64)
+}
+
+/// Pads the given iterator (which MUST have length $\leq K * C$) with zero-bits to a
+/// multiple of $K$ bits.
+struct Pad<I: Iterator<Item = bool>> {
+    /// The iterator we are padding.
+    inner: I,
+    /// The measured length of the inner iterator.
+    ///
+    /// This starts as a lower bound, and will be accurate once `padding_left.is_some()`.
+    len: usize,
+    /// The amount of padding that remains to be emitted.
+    padding_left: Option<usize>,
+}
+
+impl<I: Iterator<Item = bool>> Pad<I> {
+    fn new(inner: I) -> Self {
+        Pad {
+            inner,
+            len: 0,
+            padding_left: None,
+        }
+    }
+}
+
+impl<I: Iterator<Item = bool>> Iterator for Pad<I> {
+    type Item = bool;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        loop {
+            // If we have identified the required padding, the inner iterator has ended,
+            // and we will never poll it again.
+            if let Some(n) = self.padding_left.as_mut() {
+                if *n == 0 {
+                    // Either we already emitted all necessary padding, or there was no
+                    // padding required.
+                    break None;
+                } else {
+                    // Emit the next padding bit.
+                    *n -= 1;
+                    break Some(false);
+                }
+            } else if let Some(ret) = self.inner.next() {
+                // We haven't reached the end of the inner iterator yet.
+                self.len += 1;
+                assert!(self.len <= K * C);
+                break Some(ret);
+            } else {
+                // Inner iterator just ended, so we now know its length.
+                let rem = self.len % K;
+                if rem > 0 {
+                    // The inner iterator requires padding in the range [1,K).
+                    self.padding_left = Some(K - rem);
+                } else {
+                    // No padding required.
+                    self.padding_left = Some(0);
+                }
+            }
+        }
+    }
+}
+
+/// A domain in which $\mathsf{SinsemillaHashToPoint}$ and $\mathsf{SinsemillaHash}$ can
+/// be used.
+#[derive(Debug, Clone)]
+#[allow(non_snake_case)]
+pub struct HashDomain {
+    Q: pallas::Point,
+}
+
+impl HashDomain {
+    /// Constructs a new `HashDomain` with a specific prefix string.
+    pub fn new(domain: &str) -> Self {
+        HashDomain {
+            Q: pallas::Point::hash_to_curve(Q_PERSONALIZATION)(domain.as_bytes()),
+        }
+    }
+
+    /// $\mathsf{SinsemillaHashToPoint}$ from [§ 5.4.1.9][concretesinsemillahash].
+    ///
+    /// [concretesinsemillahash]: https://zips.z.cash/protocol/nu5.pdf#concretesinsemillahash
+    pub fn hash_to_point(&self, msg: impl Iterator<Item = bool>) -> CtOption<pallas::Point> {
+        self.hash_to_point_inner(msg).into()
+    }
+
+    #[allow(non_snake_case)]
+    fn hash_to_point_inner(&self, msg: impl Iterator<Item = bool>) -> IncompletePoint {
+        let padded: Vec<_> = Pad::new(msg).collect();
+
+        padded
+            .chunks(K)
+            .fold(IncompletePoint::from(self.Q), |acc, chunk| {
+                let (S_x, S_y) = SINSEMILLA_S[lebs2ip_k(chunk) as usize];
+                let S_chunk = pallas::Affine::from_xy(S_x, S_y).unwrap();
+                (acc + S_chunk) + acc
+            })
+    }
+
+    /// $\mathsf{SinsemillaHash}$ from [§ 5.4.1.9][concretesinsemillahash].
+    ///
+    /// [concretesinsemillahash]: https://zips.z.cash/protocol/nu5.pdf#concretesinsemillahash
+    ///
+    /// # Panics
+    ///
+    /// This panics if the message length is greater than [`K`] * [`C`]
+    pub fn hash(&self, msg: impl Iterator<Item = bool>) -> CtOption<pallas::Base> {
+        extract_p_bottom(self.hash_to_point(msg))
+    }
+
+    /// Returns the Sinsemilla $Q$ constant for this domain.
+    #[cfg(test)]
+    #[allow(non_snake_case)]
+    pub(crate) fn Q(&self) -> pallas::Point {
+        self.Q
+    }
+}
+
+/// A domain in which $\mathsf{SinsemillaCommit}$ and $\mathsf{SinsemillaShortCommit}$ can
+/// be used.
+#[derive(Debug)]
+#[allow(non_snake_case)]
+pub struct CommitDomain {
+    M: HashDomain,
+    R: pallas::Point,
+}
+
+impl CommitDomain {
+    /// Constructs a new `CommitDomain` with a specific prefix string.
+    pub fn new(domain: &str) -> Self {
+        let m_prefix = format!("{}-M", domain);
+        let r_prefix = format!("{}-r", domain);
+        let hasher_r = pallas::Point::hash_to_curve(&r_prefix);
+        CommitDomain {
+            M: HashDomain::new(&m_prefix),
+            R: hasher_r(&[]),
+        }
+    }
+
+    /// $\mathsf{SinsemillaCommit}$ from [§ 5.4.8.4][concretesinsemillacommit].
+    ///
+    /// [concretesinsemillacommit]: https://zips.z.cash/protocol/nu5.pdf#concretesinsemillacommit
+    #[allow(non_snake_case)]
+    pub fn commit(
+        &self,
+        msg: impl Iterator<Item = bool>,
+        r: &pallas::Scalar,
+    ) -> CtOption<pallas::Point> {
+        (self.M.hash_to_point_inner(msg) + Wnaf::new().scalar(r).base(self.R)).into()
+    }
+
+    /// $\mathsf{SinsemillaShortCommit}$ from [§ 5.4.8.4][concretesinsemillacommit].
+    ///
+    /// [concretesinsemillacommit]: https://zips.z.cash/protocol/nu5.pdf#concretesinsemillacommit
+    pub fn short_commit(
+        &self,
+        msg: impl Iterator<Item = bool>,
+        r: &pallas::Scalar,
+    ) -> CtOption<pallas::Base> {
+        extract_p_bottom(self.commit(msg, r))
+    }
+
+    /// Returns the Sinsemilla $R$ constant for this domain.
+    #[cfg(test)]
+    #[allow(non_snake_case)]
+    pub(crate) fn R(&self) -> pallas::Point {
+        self.R
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::{i2lebsp_k, lebs2ip_k, Pad, K};
+    use rand::{self, rngs::OsRng, Rng};
+
+    #[test]
+    fn pad() {
+        assert_eq!(Pad::new([].iter().cloned()).collect::<Vec<_>>(), vec![]);
+        assert_eq!(
+            Pad::new([true].iter().cloned()).collect::<Vec<_>>(),
+            vec![true, false, false, false, false, false, false, false, false, false]
+        );
+        assert_eq!(
+            Pad::new([true, true].iter().cloned()).collect::<Vec<_>>(),
+            vec![true, true, false, false, false, false, false, false, false, false]
+        );
+        assert_eq!(
+            Pad::new([true, true, true].iter().cloned()).collect::<Vec<_>>(),
+            vec![true, true, true, false, false, false, false, false, false, false]
+        );
+        assert_eq!(
+            Pad::new(
+                [true, true, false, true, false, true, false, true, false, true]
+                    .iter()
+                    .cloned()
+            )
+            .collect::<Vec<_>>(),
+            vec![true, true, false, true, false, true, false, true, false, true]
+        );
+        assert_eq!(
+            Pad::new(
+                [true, true, false, true, false, true, false, true, false, true, true]
+                    .iter()
+                    .cloned()
+            )
+            .collect::<Vec<_>>(),
+            vec![
+                true, true, false, true, false, true, false, true, false, true, true, false, false,
+                false, false, false, false, false, false, false
+            ]
+        );
+    }
+
+    #[test]
+    fn lebs2ip_k_round_trip() {
+        let mut rng = OsRng;
+        {
+            let int = rng.gen_range(0..(1 << K));
+            assert_eq!(lebs2ip_k(&i2lebsp_k(int)) as usize, int);
+        }
+
+        assert_eq!(lebs2ip_k(&i2lebsp_k(0)) as usize, 0);
+        assert_eq!(lebs2ip_k(&i2lebsp_k((1 << K) - 1)) as usize, (1 << K) - 1);
+    }
+
+    #[test]
+    fn i2lebsp_k_round_trip() {
+        {
+            let bitstring = (0..K).map(|_| rand::random()).collect::<Vec<_>>();
+            assert_eq!(
+                i2lebsp_k(lebs2ip_k(&bitstring) as usize).to_vec(),
+                bitstring
+            );
+        }
+
+        {
+            let bitstring = [false; K];
+            assert_eq!(
+                i2lebsp_k(lebs2ip_k(&bitstring) as usize).to_vec(),
+                bitstring
+            );
+        }
+
+        {
+            let bitstring = [true; K];
+            assert_eq!(
+                i2lebsp_k(lebs2ip_k(&bitstring) as usize).to_vec(),
+                bitstring
+            );
+        }
+    }
+}

+ 81 - 0
examples/halo2/src/primitives/sinsemilla/addition.rs

@@ -0,0 +1,81 @@
+use std::ops::Add;
+
+use group::{cofactor::CofactorCurveAffine, Group};
+use pasta_curves::pallas;
+use subtle::{ConstantTimeEq, CtOption};
+
+/// P ∪ {⊥}
+///
+/// Simulated incomplete addition built over complete addition.
+#[derive(Clone, Copy, Debug)]
+pub(super) struct IncompletePoint(CtOption<pallas::Point>);
+
+impl From<pallas::Point> for IncompletePoint {
+    fn from(p: pallas::Point) -> Self {
+        IncompletePoint(CtOption::new(p, 1.into()))
+    }
+}
+
+impl From<IncompletePoint> for CtOption<pallas::Point> {
+    fn from(p: IncompletePoint) -> Self {
+        p.0
+    }
+}
+
+impl Add for IncompletePoint {
+    type Output = IncompletePoint;
+
+    #[allow(clippy::suspicious_arithmetic_impl)]
+    fn add(self, rhs: Self) -> Self::Output {
+        // ⊥ ⸭ ⊥ = ⊥
+        // ⊥ ⸭ P = ⊥
+        IncompletePoint(self.0.and_then(|p| {
+            // P ⸭ ⊥ = ⊥
+            rhs.0.and_then(|q| {
+                // 0 ⸭ 0 = ⊥
+                // 0 ⸭ P = ⊥
+                // P ⸭ 0 = ⊥
+                // (x, y) ⸭ (x', y') = ⊥ if x == x'
+                // (x, y) ⸭ (x', y') = (x, y) + (x', y') if x != x'
+                CtOption::new(
+                    p + q,
+                    !(p.is_identity() | q.is_identity() | p.ct_eq(&q) | p.ct_eq(&-q)),
+                )
+            })
+        }))
+    }
+}
+
+impl Add<pallas::Point> for IncompletePoint {
+    type Output = IncompletePoint;
+
+    fn add(self, rhs: pallas::Point) -> Self::Output {
+        self + IncompletePoint(CtOption::new(rhs, 1.into()))
+    }
+}
+
+impl Add<pallas::Affine> for IncompletePoint {
+    type Output = IncompletePoint;
+
+    /// Specialisation of incomplete addition for mixed addition.
+    #[allow(clippy::suspicious_arithmetic_impl)]
+    fn add(self, rhs: pallas::Affine) -> Self::Output {
+        // ⊥ ⸭ ⊥ = ⊥
+        // ⊥ ⸭ P = ⊥
+        IncompletePoint(self.0.and_then(|p| {
+            // P ⸭ ⊥ = ⊥ is satisfied by definition.
+            let q = rhs.to_curve();
+
+            // 0 ⸭ 0 = ⊥
+            // 0 ⸭ P = ⊥
+            // P ⸭ 0 = ⊥
+            // (x, y) ⸭ (x', y') = ⊥ if x == x'
+            // (x, y) ⸭ (x', y') = (x, y) + (x', y') if x != x'
+            CtOption::new(
+                // Use mixed addition for efficiency.
+                p + rhs,
+                !(p.is_identity() | q.is_identity() | p.ct_eq(&q) | p.ct_eq(&-q)),
+            )
+        }))
+    }
+}

+ 143 - 0
examples/halo2/src/primitives/sinsemilla/constants.rs

@@ -0,0 +1,143 @@
+//! Sinsemilla generators
+
+/// Number of bits of each message piece in $\mathsf{SinsemillaHashToPoint}$
+pub const K: usize = 10;
+
+/// $\frac{1}{2^K}$
+pub const INV_TWO_POW_K: [u8; 32] = [
+    1, 0, 192, 196, 160, 229, 70, 82, 221, 165, 74, 202, 85, 7, 62, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 240, 63,
+];
+
+/// The largest integer such that $2^c \leq (r_P - 1) / 2$, where $r_P$ is the order
+/// of Pallas.
+pub const C: usize = 253;
+
+// Sinsemilla Q generators
+
+/// SWU hash-to-curve personalization for Sinsemilla $Q$ generators.
+pub const Q_PERSONALIZATION: &str = "z.cash:SinsemillaQ";
+
+/// Generator used in SinsemillaHashToPoint for note commitment
+pub const Q_NOTE_COMMITMENT_M_GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        93, 116, 168, 64, 9, 186, 14, 50, 42, 221, 70, 253, 90, 15, 150, 197, 93, 237, 176, 121,
+        180, 242, 159, 247, 13, 205, 251, 86, 160, 7, 128, 23,
+    ],
+    [
+        99, 172, 73, 115, 90, 10, 39, 135, 158, 94, 219, 129, 136, 18, 34, 136, 44, 201, 244, 110,
+        217, 194, 190, 78, 131, 112, 198, 138, 147, 88, 160, 50,
+    ],
+);
+
+/// Generator used in SinsemillaHashToPoint for IVK commitment
+pub const Q_COMMIT_IVK_M_GENERATOR: ([u8; 32], [u8; 32]) = (
+    [
+        242, 130, 15, 121, 146, 47, 203, 107, 50, 162, 40, 81, 36, 204, 27, 66, 250, 65, 162, 90,
+        184, 129, 204, 125, 17, 200, 169, 74, 241, 12, 188, 5,
+    ],
+    [
+        190, 222, 173, 207, 206, 229, 90, 190, 241, 165, 109, 201, 29, 53, 196, 70, 75, 5, 222, 32,
+        70, 7, 89, 239, 230, 190, 26, 212, 246, 76, 1, 27,
+    ],
+);
+
+/// Generator used in SinsemillaHashToPoint for Merkle collision-resistant hash
+pub const Q_MERKLE_CRH: ([u8; 32], [u8; 32]) = (
+    [
+        160, 198, 41, 127, 249, 199, 185, 248, 112, 16, 141, 192, 85, 185, 190, 201, 153, 14, 137,
+        239, 90, 54, 15, 160, 185, 24, 168, 99, 150, 210, 22, 22,
+    ],
+    [
+        98, 234, 242, 37, 206, 174, 233, 134, 150, 21, 116, 5, 234, 150, 28, 226, 121, 89, 163, 79,
+        62, 242, 196, 45, 153, 32, 175, 227, 163, 66, 134, 53,
+    ],
+);
+
+// Sinsemilla S generators
+
+/// SWU hash-to-curve personalization for Sinsemilla $S$ generators.
+pub const S_PERSONALIZATION: &str = "z.cash:SinsemillaS";
+
+#[cfg(test)]
+mod tests {
+    use super::super::{CommitDomain, HashDomain};
+    use super::*;
+    use crate::constants::{
+        COMMIT_IVK_PERSONALIZATION, MERKLE_CRH_PERSONALIZATION, NOTE_COMMITMENT_PERSONALIZATION,
+    };
+    use group::Curve;
+    use halo2::arithmetic::{CurveAffine, CurveExt, FieldExt};
+    use halo2::pasta::pallas;
+
+    #[test]
+    fn sinsemilla_s() {
+        use super::super::sinsemilla_s::SINSEMILLA_S;
+        let hasher = pallas::Point::hash_to_curve(S_PERSONALIZATION);
+
+        for j in 0..(1u32 << K) {
+            let computed = {
+                let point = hasher(&j.to_le_bytes()).to_affine().coordinates().unwrap();
+                (*point.x(), *point.y())
+            };
+            let actual = SINSEMILLA_S[j as usize];
+            assert_eq!(computed, actual);
+        }
+    }
+
+    #[test]
+    fn q_note_commitment_m() {
+        let domain = CommitDomain::new(NOTE_COMMITMENT_PERSONALIZATION);
+        let point = domain.M.Q;
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(
+            *coords.x(),
+            pallas::Base::from_bytes(&Q_NOTE_COMMITMENT_M_GENERATOR.0).unwrap()
+        );
+        assert_eq!(
+            *coords.y(),
+            pallas::Base::from_bytes(&Q_NOTE_COMMITMENT_M_GENERATOR.1).unwrap()
+        );
+    }
+
+    #[test]
+    fn q_commit_ivk_m() {
+        let domain = CommitDomain::new(COMMIT_IVK_PERSONALIZATION);
+        let point = domain.M.Q;
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(
+            *coords.x(),
+            pallas::Base::from_bytes(&Q_COMMIT_IVK_M_GENERATOR.0).unwrap()
+        );
+        assert_eq!(
+            *coords.y(),
+            pallas::Base::from_bytes(&Q_COMMIT_IVK_M_GENERATOR.1).unwrap()
+        );
+    }
+
+    #[test]
+    fn q_merkle_crh() {
+        let domain = HashDomain::new(MERKLE_CRH_PERSONALIZATION);
+        let point = domain.Q;
+        let coords = point.to_affine().coordinates().unwrap();
+
+        assert_eq!(
+            *coords.x(),
+            pallas::Base::from_bytes(&Q_MERKLE_CRH.0).unwrap()
+        );
+        assert_eq!(
+            *coords.y(),
+            pallas::Base::from_bytes(&Q_MERKLE_CRH.1).unwrap()
+        );
+    }
+
+    #[test]
+    fn inv_two_pow_k() {
+        let two_pow_k = pallas::Base::from_u64(1u64 << K);
+        let inv_two_pow_k = pallas::Base::from_bytes(&INV_TWO_POW_K).unwrap();
+
+        assert_eq!(two_pow_k * inv_two_pow_k, pallas::Base::one());
+    }
+}

+ 14344 - 0
examples/halo2/src/primitives/sinsemilla/sinsemilla_s.rs

@@ -0,0 +1,14344 @@
+use super::K;
+use pasta_curves::pallas;
+
+/// The precomputed bases for the Sinsemilla hash function.
+///
+/// https://zips.z.cash/protocol/protocol.pdf#concretesinsemillahash
+pub const SINSEMILLA_S: [(pallas::Base, pallas::Base); 1 << K] = [
+    (
+        pallas::Base::from_raw([
+            0x5a91_eb91_2044_ea5f,
+            0x29a0_5baf_bede_62b5,
+            0x1431_d4ea_7d4a_fc7b,
+            0x0db5_218b_e688_1f0f,
+        ]),
+        pallas::Base::from_raw([
+            0x17c2_4f76_bf8e_6483,
+            0x944a_041c_2e65_ba01,
+            0x9caf_6629_8493_d5d0,
+            0x2f0f_40c2_f152_a01c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xce4a_e33e_a108_af91,
+            0xe677_00ca_2464_9b8f,
+            0xc8fd_33eb_3917_5404,
+            0x2111_12b4_b3e1_9518,
+        ]),
+        pallas::Base::from_raw([
+            0x1d83_c293_f810_c5ee,
+            0xb43c_744a_670e_19bc,
+            0xa38a_3e79_cd5a_35fe,
+            0x06c5_9939_93ad_b03b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x22e0_c475_a18f_6d24,
+            0xf40c_b333_4b54_11c0,
+            0x4661_a4e2_355b_9b33,
+            0x25b3_2ccd_49f9_25a3,
+        ]),
+        pallas::Base::from_raw([
+            0xa67d_6b8d_b8fd_9757,
+            0x4be1_ebb9_f945_ccd2,
+            0x7d53_d0f3_23b4_4711,
+            0x140f_f2ba_70d0_692c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5fa_ef0f_0419_dabc,
+            0x6539_ca12_938b_1826,
+            0x60ff_465c_d02c_701f,
+            0x1421_5a48_e118_32c9,
+        ]),
+        pallas::Base::from_raw([
+            0x011d_5d36_25ca_36dc,
+            0x97b6_3b4b_53e2_ad56,
+            0xc711_a0b9_0b58_03bd,
+            0x1066_6957_becb_884d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xcd48_cef6_4bed_0936,
+            0x0e94_8b52_f738_61ce,
+            0x9ab9_b595_d23f_059f,
+            0x315c_f93b_9e63_151c,
+        ]),
+        pallas::Base::from_raw([
+            0xe257_7684_a31c_721a,
+            0x81ef_1386_c070_a51d,
+            0x2afb_9a52_d043_78ca,
+            0x2c54_c0b3_8dfb_ad40,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1e62_9662_aa5a_3fdf,
+            0x94fb_57dc_9d31_389b,
+            0x63c5_542e_be6c_3ab7,
+            0x1d74_51a5_7e92_5ec5,
+        ]),
+        pallas::Base::from_raw([
+            0x934c_1dc8_aaca_454b,
+            0xc086_048c_4eef_c0dd,
+            0xc49c_1472_164b_6fbc,
+            0x0a4b_5139_9347_7ec7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7e7c_cebd_ac44_118f,
+            0xe055_272f_8429_ff1c,
+            0x3c80_b5f8_24a7_5f24,
+            0x0d3d_3c74_10d4_4668,
+        ]),
+        pallas::Base::from_raw([
+            0x79ea_b21b_b522_55cc,
+            0x1268_61c0_de4f_0982,
+            0xa02e_3186_23a5_5ae9,
+            0x2b94_e712_9758_334f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0e77_383e_d712_9d2f,
+            0x6283_df71_4b0f_9b18,
+            0x0864_617c_d666_062c,
+            0x197e_faba_7491_0b57,
+        ]),
+        pallas::Base::from_raw([
+            0x85b8_e2cb_12fd_c127,
+            0x7a88_75b5_de27_45cd,
+            0x8df5_6a97_ed99_d31b,
+            0x34d9_5547_d6e9_56a9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd21c_d292_6b24_b055,
+            0xa416_7a07_7246_418e,
+            0x3e29_11ab_ef54_9b47,
+            0x305a_d0e8_b11c_ee66,
+        ]),
+        pallas::Base::from_raw([
+            0x9b39_73cf_a5bf_b938,
+            0x12a2_0ca5_d138_80d6,
+            0x8207_1242_c3b7_34a4,
+            0x3e25_9102_6dbb_bfd8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf6bc_e362_6b48_56be,
+            0xdf5e_e6f1_5b66_3484,
+            0xbc37_bdf1_4766_3e61,
+            0x2a80_ed20_aecc_771f,
+        ]),
+        pallas::Base::from_raw([
+            0xaeaf_58cd_40d9_d753,
+            0x6776_81a1_39a9_44eb,
+            0xdb78_4220_d080_d1ae,
+            0x3bed_9f53_2f89_c873,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa96d_351c_69e7_3b34,
+            0xe5df_e62c_bb74_b432,
+            0x3e0b_f886_c563_3909,
+            0x1169_679d_516b_0f52,
+        ]),
+        pallas::Base::from_raw([
+            0x447f_2648_3a56_52ee,
+            0x77d8_03b3_afe8_3912,
+            0xbe1e_a779_988f_4fd3,
+            0x24dc_58d8_46ef_f85d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x851d_c62e_bc87_5030,
+            0x1957_510c_703c_5765,
+            0xd439_8de8_3aae_c992,
+            0x0a64_5164_e0e0_d1cb,
+        ]),
+        pallas::Base::from_raw([
+            0xd768_494c_1aa6_936d,
+            0x0c89_d7ee_a548_c2a4,
+            0x7e1f_87b7_9978_76b1,
+            0x153f_b63d_3879_f182,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc565_0619_42a8_3439,
+            0x7716_f57c_193a_3df2,
+            0x1325_b0e1_8d7a_ea0a,
+            0x05a9_1753_a68b_7601,
+        ]),
+        pallas::Base::from_raw([
+            0x2443_2316_26bd_d43c,
+            0x959f_e764_a3f2_575f,
+            0xd709_6a40_9799_144e,
+            0x1c29_c630_347e_9508,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe843_6f46_1411_e72a,
+            0x2c1a_4034_7249_2a59,
+            0x1347_0a8d_938a_b691,
+            0x25e3_34b5_cec9_3544,
+        ]),
+        pallas::Base::from_raw([
+            0xcec5_d233_9cad_4b3d,
+            0xa40d_0761_a4cc_45ab,
+            0x194c_d250_2d80_84b2,
+            0x0160_64db_6159_2474,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe2f0_65b5_2537_5cc9,
+            0x2528_5987_8c88_25ab,
+            0x9252_31c1_bc9d_6a66,
+            0x379c_2bd0_c190_9c7e,
+        ]),
+        pallas::Base::from_raw([
+            0xa0fb_efa7_6375_9430,
+            0x430e_1e41_7b73_83f0,
+            0xddea_123a_66f3_6e40,
+            0x11a9_c254_99d5_9f1b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0b5a_9e1e_862e_edaa,
+            0xc0a3_4382_61ff_61c6,
+            0x4b41_f6dc_4801_f3a1,
+            0x0c6f_c7b2_d365_6f82,
+        ]),
+        pallas::Base::from_raw([
+            0xf30d_50e8_3e60_3bb5,
+            0x589f_b478_7d54_8e5f,
+            0x06d5_b032_d1ea_0eeb,
+            0x2492_a76d_96dc_fe8e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0719_4d69_3a4f_e5d9,
+            0xc3f4_ced6_5ced_7022,
+            0x1965_c5c3_f9ee_e6b7,
+            0x0c17_5d45_3bb5_0e04,
+        ]),
+        pallas::Base::from_raw([
+            0x6e28_e65c_02a8_979a,
+            0x9155_bdb2_213a_1ec2,
+            0xa592_5dd2_ac1b_a08a,
+            0x106e_3d4f_2d01_2990,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2af5_5769_718f_6d0a,
+            0x0acc_0135_db3d_9c80,
+            0x31f8_9d95_9313_5e05,
+            0x26e5_eae3_20ed_b155,
+        ]),
+        pallas::Base::from_raw([
+            0xd75b_fdee_b95f_d1c9,
+            0x1e63_a80a_818c_5374,
+            0x4bb1_c3e6_0f0b_c040,
+            0x1d05_882a_cd14_4b0c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7ec3_90f2_5e39_5b94,
+            0x4230_0755_c68f_a549,
+            0x9210_9733_af81_0407,
+            0x310d_60d7_14eb_00d9,
+        ]),
+        pallas::Base::from_raw([
+            0xce04_43cb_4410_650a,
+            0xb1c0_4053_f900_ef43,
+            0x4087_e7a3_9312_1fdd,
+            0x3ee2_559e_cdce_ec5c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa2a0_b2bb_c709_eb43,
+            0x8ade_17ea_bf18_0624,
+            0xbe3d_cee5_1eac_8187,
+            0x1719_0481_09ec_ac8d,
+        ]),
+        pallas::Base::from_raw([
+            0x2abc_973a_cc15_a05b,
+            0x50a8_df0b_570a_193a,
+            0x87f1_e098_4f0e_1d44,
+            0x1267_3ac5_b9fe_f8c5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb461_d0fe_6d58_3369,
+            0xccbc_110f_c982_9287,
+            0x0263_da47_2626_a5f0,
+            0x1289_d222_9c37_19c6,
+        ]),
+        pallas::Base::from_raw([
+            0x7f84_d109_f869_6212,
+            0xe7b6_8435_60c9_f37e,
+            0xc9ab_26a3_a8a3_b9aa,
+            0x08a7_e5e9_d4ad_1e44,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd657_d70e_67a6_cffb,
+            0x1bc2_8f7a_f5d8_d663,
+            0x176c_cb97_5e2e_acdd,
+            0x08dc_48f1_a91c_222a,
+        ]),
+        pallas::Base::from_raw([
+            0xc6aa_0ceb_40b6_128c,
+            0x94a1_9ee5_c270_a217,
+            0x9f79_f114_a1f4_083a,
+            0x21f4_0941_aa55_b3d0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x84c6_e703_7113_c2c1,
+            0x9549_5a9a_5e2c_f521,
+            0xae9d_c0a2_1bc8_b85e,
+            0x2bde_7809_257f_2d02,
+        ]),
+        pallas::Base::from_raw([
+            0xa114_c0a6_314e_d2f9,
+            0x9be7_e608_3d7e_876f,
+            0xc105_6823_d929_fd2a,
+            0x15ac_6d2a_83e2_50bd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb0fe_9fd5_a421_340b,
+            0x48e4_f171_3c9e_cd26,
+            0xe4f4_ac71_3d4a_95bc,
+            0x312b_6128_1ab5_d033,
+        ]),
+        pallas::Base::from_raw([
+            0x405b_d400_afdb_5d9c,
+            0xaaeb_8090_ef6b_9390,
+            0x7469_c0b3_e23c_53dd,
+            0x2e4f_21bf_b05d_4559,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa0bf_d82b_7612_2e84,
+            0x6c78_ca0a_b548_2d27,
+            0x75ae_5653_62af_eb1d,
+            0x089b_3b7f_8bd4_ea08,
+        ]),
+        pallas::Base::from_raw([
+            0x7fca_3834_c670_2579,
+            0xa062_31d2_085d_6258,
+            0xb32f_6836_d782_eb34,
+            0x3708_e831_35ae_10c4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9f6d_c014_6c05_c7fe,
+            0x1119_b3b5_d67c_a65f,
+            0x45bf_6d2e_f7e6_fe54,
+            0x0141_08ac_9ab6_3e4f,
+        ]),
+        pallas::Base::from_raw([
+            0x57f9_36e7_a514_d173,
+            0x3d4e_a9b8_283e_a3f2,
+            0x0b45_9bbe_bf56_d8df,
+            0x0096_be83_6417_c3ce,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbf84_7e6e_a60a_1e10,
+            0x007d_0da9_59a1_8af7,
+            0x9b66_6f39_805d_f26e,
+            0x2dda_a8b1_c70d_4798,
+        ]),
+        pallas::Base::from_raw([
+            0x8afa_e4a1_2104_3215,
+            0xfc45_281d_665c_435f,
+            0xcf42_5d23_97a4_d0d6,
+            0x203b_d5e4_3544_e416,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6355_a342_c769_b991,
+            0xaf94_3561_7ca8_fba5,
+            0x9bc6_1953_1bc6_867c,
+            0x35c6_b4b2_7ce9_8c84,
+        ]),
+        pallas::Base::from_raw([
+            0x358b_52f2_aa05_d0e2,
+            0x1e36_f404_1069_11a7,
+            0xdfb1_775d_f512_925e,
+            0x2f0e_4cff_2885_5660,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9bc6_45aa_659d_394f,
+            0x63fb_f9d5_aff5_52c2,
+            0x2a81_a1f9_157d_0ddf,
+            0x0840_8d6d_792b_1bdd,
+        ]),
+        pallas::Base::from_raw([
+            0x6214_c9e0_a442_6fed,
+            0x580c_2dc1_b2dc_4db0,
+            0xdf6e_7ce6_7c07_8b91,
+            0x149b_86c7_aa0a_5807,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2366_fb20_016a_d15d,
+            0x7e11_a509_32be_92a2,
+            0xdf46_3c90_d34d_85db,
+            0x3b7d_3524_37fb_ddae,
+        ]),
+        pallas::Base::from_raw([
+            0xd701_78a2_e2e7_3b2c,
+            0xeb76_7a60_49bb_fd17,
+            0xa081_0c5a_7118_8504,
+            0x30e1_da14_7a31_ac8a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x996c_1cc3_79a3_05e2,
+            0x61d9_35a7_da7f_f9df,
+            0xe77e_3c50_0e84_d1fe,
+            0x119d_6098_c1df_c009,
+        ]),
+        pallas::Base::from_raw([
+            0xe83c_68f6_0bac_ad89,
+            0xe3e4_5f6b_7f33_8aea,
+            0xcb02_edb7_2703_0a11,
+            0x0dfe_fcd8_c7a0_37d2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0249_e1ef_c0c1_2e3f,
+            0xfd35_f750_fc1b_140e,
+            0x34cc_fd25_ee0a_24a4,
+            0x2d85_ea37_1450_e936,
+        ]),
+        pallas::Base::from_raw([
+            0xea03_7e87_7076_c6a6,
+            0x1e86_054a_7181_9a98,
+            0xc8b2_0a67_de55_ffdd,
+            0x2fa0_f1dc_c560_6ead,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x149d_4058_8269_142a,
+            0xc47e_8699_87cd_0c7e,
+            0x9083_84e4_4ce8_c260,
+            0x0d65_ccec_99ef_3d51,
+        ]),
+        pallas::Base::from_raw([
+            0x3d9f_bece_1b95_bb5c,
+            0x7369_87ea_5b12_60ce,
+            0x69c5_cc43_e099_3c2c,
+            0x1296_2805_bcb2_5e3d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfd0f_79ac_f857_70f6,
+            0x2cad_5ad0_3b87_58f2,
+            0xd79d_4eba_953a_f087,
+            0x0074_778c_62d8_0363,
+        ]),
+        pallas::Base::from_raw([
+            0x4d53_43bd_75b7_04b2,
+            0xfb69_64df_389f_bd6c,
+            0x0999_4f51_36f1_c414,
+            0x0776_f4ae_c6cb_4e85,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2207_b16e_8cac_9dc4,
+            0x6fcc_2464_92c3_0265,
+            0x1f05_e00a_14f4_b845,
+            0x01a9_d4be_c204_e872,
+        ]),
+        pallas::Base::from_raw([
+            0xf783_69ae_24fb_81a8,
+            0xf741_a8a2_38ae_9967,
+            0x4408_0885_faae_b30d,
+            0x03f7_7f1f_49b9_18e6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xad73_e083_fd4b_c101,
+            0xb299_c606_ca3b_197f,
+            0x61c8_0000_0ba8_6506,
+            0x1691_35f3_c4b5_4f76,
+        ]),
+        pallas::Base::from_raw([
+            0x8760_58ce_eb92_e28c,
+            0x34f0_16e0_f86c_0e2d,
+            0x86b0_495e_c47b_3f50,
+            0x03f1_c42b_c4c5_85ff,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x017d_94b7_2cab_798c,
+            0x8d6d_cb5b_18aa_f523,
+            0x8e08_8b5d_8994_c20b,
+            0x19ba_e178_e635_fe13,
+        ]),
+        pallas::Base::from_raw([
+            0xab27_84b4_994a_0119,
+            0x9da4_fe0e_635c_7e33,
+            0x1143_8112_caa2_afc4,
+            0x3acf_da94_ded9_c4e7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbbce_cb08_317a_55bc,
+            0x36aa_ddcd_3238_f0e6,
+            0xdf00_05b6_e6ab_d61e,
+            0x2527_c64e_053d_087c,
+        ]),
+        pallas::Base::from_raw([
+            0x6be8_48ee_033a_68ef,
+            0x55a3_f9ac_d4f4_cee1,
+            0xf6dd_57ce_d465_28bf,
+            0x1e27_ea7d_b509_cc96,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe5bc_12d9_9516_4280,
+            0x2a00_0dc2_5125_5df6,
+            0xa936_924b_164c_d882,
+            0x34a9_358a_32a8_ce49,
+        ]),
+        pallas::Base::from_raw([
+            0x60e8_77e4_dfcb_aca2,
+            0x0aa5_3e88_25f8_a521,
+            0xe325_6cc5_83dd_f098,
+            0x3bdb_fc5c_5aa3_cdb8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6d95_f7ea_ea3d_16d8,
+            0x03c0_4e9a_6bd6_5383,
+            0xec05_bb17_c4fe_b283,
+            0x289e_03a5_ed1f_3b07,
+        ]),
+        pallas::Base::from_raw([
+            0x2b6a_c52f_feb1_7686,
+            0xbcb7_da92_4e49_8948,
+            0xa995_cd81_d04d_dbd3,
+            0x0c46_6c57_1159_224a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6093_9be7_a4d2_9f0c,
+            0x1518_62a2_b799_0aa2,
+            0x44a3_e62c_1ce7_8cc2,
+            0x201e_25ea_427d_e5f3,
+        ]),
+        pallas::Base::from_raw([
+            0x5853_5ee9_27ff_6b4f,
+            0xa9ba_b5b3_9592_7126,
+            0x2c60_0708_e61e_5681,
+            0x31d4_68f6_37a7_026d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x97ec_2bda_32f9_27b3,
+            0x7e79_9f38_c361_ed87,
+            0x588f_ac0b_d601_fa88,
+            0x275f_7736_734d_27fe,
+        ]),
+        pallas::Base::from_raw([
+            0x6426_8a27_c545_d9b9,
+            0x46a0_a23d_c423_01eb,
+            0xac7d_e04c_dccf_c81c,
+            0x3030_4778_8312_b499,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9491_a146_3215_8028,
+            0xee63_c9c2_6401_e1ab,
+            0xe68f_139c_e3e6_847b,
+            0x0ce9_e803_9aca_842f,
+        ]),
+        pallas::Base::from_raw([
+            0xe09d_04d1_25c7_4609,
+            0x3770_bbd0_c05e_f8ad,
+            0xdd8b_8c88_a169_9567,
+            0x2d99_3912_f127_a6e4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe531_5459_6f63_dd08,
+            0xf7a0_13fe_10a1_9fc0,
+            0xd7b4_76dc_ac74_a040,
+            0x08a0_75bf_2f3f_783f,
+        ]),
+        pallas::Base::from_raw([
+            0x1962_3209_80d2_b200,
+            0x3da6_e1b6_5f7f_1977,
+            0x6168_4dbf_f2db_9c35,
+            0x3c21_4bf5_b381_9204,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x46fc_698d_e305_8e9d,
+            0xed82_7429_e58b_0e53,
+            0xff3b_2ab5_65d8_30e8,
+            0x2ee6_898e_6f25_1e50,
+        ]),
+        pallas::Base::from_raw([
+            0x2fea_1665_b778_7f9e,
+            0xa84c_eb52_339e_9083,
+            0xfc32_2809_6906_9bf6,
+            0x22a0_7570_d244_95a4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8b2e_1430_028d_9350,
+            0xa9ad_41fb_bf86_26c0,
+            0xecff_6798_0a63_b4a7,
+            0x38ec_640b_0d84_abd2,
+        ]),
+        pallas::Base::from_raw([
+            0xda17_249d_9fd9_ddc4,
+            0x3862_5d42_a318_2c13,
+            0x74b0_4c68_5377_a262,
+            0x1e61_c8ab_ab50_80ed,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9263_3bf4_9d92_db8c,
+            0x5b42_7e02_12d6_fcc3,
+            0xd20c_2b5b_3c99_9c68,
+            0x34a7_46a8_736d_3635,
+        ]),
+        pallas::Base::from_raw([
+            0x484c_9af1_9fc0_7320,
+            0x2362_4c04_4eb0_ddc2,
+            0x27e8_3514_854d_3b73,
+            0x3064_16e8_7ca7_c73b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x32d4_110d_cc45_356b,
+            0x48f4_7f5e_fc03_07ae,
+            0x7853_0e2b_f3ff_9683,
+            0x36d6_91ab_da05_2e5f,
+        ]),
+        pallas::Base::from_raw([
+            0xbedb_da77_5302_ff2e,
+            0x4a4c_5917_f279_7024,
+            0x0a89_7f1c_02e3_d7f5,
+            0x01ac_b0f3_614f_a0e4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4ed3_24c0_f046_d8ff,
+            0xd81f_1aca_41bc_54b4,
+            0x633d_70fd_3193_5850,
+            0x2f15_eb03_9398_a90e,
+        ]),
+        pallas::Base::from_raw([
+            0xe7be_4499_5af7_37c9,
+            0x073c_911b_0333_2ce7,
+            0x6ea6_25ed_f5ff_2dda,
+            0x0290_63f6_092d_d3df,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x15f2_260b_7092_c6c1,
+            0x00fd_36e3_678b_2424,
+            0x1463_36d5_403d_3290,
+            0x26cc_d620_a8dd_a6be,
+        ]),
+        pallas::Base::from_raw([
+            0x24d6_05f8_d93c_5bf6,
+            0xbe50_1490_75ca_0894,
+            0x70ea_d543_4183_1118,
+            0x197e_4293_be61_e514,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9b50_3271_5c73_4456,
+            0x2aff_79cf_b329_881f,
+            0x20ad_27f7_8677_2305,
+            0x1fb2_df9c_0084_6254,
+        ]),
+        pallas::Base::from_raw([
+            0xd726_501c_633c_d28f,
+            0xee75_e9bd_87c7_1d7e,
+            0xe5a0_ffd1_3d7a_a3dc,
+            0x3501_2a18_8aab_9aed,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5e3_3bb7_1725_a038,
+            0x1a6f_44fa_d126_caec,
+            0xc682_0c7b_8b6b_3c11,
+            0x1e69_1a87_f24b_4f92,
+        ]),
+        pallas::Base::from_raw([
+            0xef4b_cf4f_cd8d_ce42,
+            0x9ed4_61f9_5a17_0c8a,
+            0x885b_451a_cc3e_7b33,
+            0x17e0_4dc9_ffb0_95b4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe134_a4de_1af0_e032,
+            0x6055_abca_fd65_aa29,
+            0x8109_bd0f_7563_29f6,
+            0x3d92_2e0c_6fcd_9ba6,
+        ]),
+        pallas::Base::from_raw([
+            0xa51d_b5ff_c901_49ed,
+            0x8886_223c_be3a_44da,
+            0x9cf3_0d83_8bc7_63f1,
+            0x23d6_dc61_5576_d09a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x79e2_836e_2b2a_990c,
+            0x982d_0f03_434f_7eb9,
+            0x8bd2_b47f_e76c_d5ab,
+            0x1560_a3d5_02ce_9002,
+        ]),
+        pallas::Base::from_raw([
+            0x38ca_701d_79f6_f538,
+            0x0e6a_15a2_265a_5ca7,
+            0x6941_bbbd_ce8a_3cdb,
+            0x22ed_bcbd_725d_71c2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xeb62_42b4_9b2b_17cc,
+            0xdc45_c0bf_cfb3_b708,
+            0x1ae9_71ab_fd1a_3f3e,
+            0x3850_926a_6116_f9d5,
+        ]),
+        pallas::Base::from_raw([
+            0xdb46_22f9_99d5_1a3a,
+            0xddcd_2618_7398_1ef3,
+            0x3bb5_8508_b3d1_3894,
+            0x2001_6ee8_a7ee_6a67,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x40e7_fdbf_ba4d_a620,
+            0xf056_b930_22e3_f9ce,
+            0x02b8_ee49_e734_7325,
+            0x1d6f_f561_e1bc_8de3,
+        ]),
+        pallas::Base::from_raw([
+            0xb84e_027a_8189_369d,
+            0x22f2_75da_0766_031d,
+            0x4fe5_1687_c170_f2ec,
+            0x3b2a_c069_39e1_17d1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6207_1eeb_79ef_b20c,
+            0x0e39_0101_9c6f_6b1a,
+            0xad9a_b2d4_0863_083d,
+            0x24bb_0da6_d98e_430c,
+        ]),
+        pallas::Base::from_raw([
+            0xdc8e_7552_5328_2784,
+            0x97f0_d36b_389a_5e23,
+            0xdf59_27ec_4ddf_9bb4,
+            0x205f_0b78_f827_4d40,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x01cd_96f6_680d_43ce,
+            0xead1_e981_b589_56ef,
+            0x7c6c_198f_61d3_59b6,
+            0x2f8e_652c_a28e_caab,
+        ]),
+        pallas::Base::from_raw([
+            0xf893_e5c8_f34a_0ff0,
+            0xc70a_cb32_4520_0e27,
+            0xf8c6_36ea_ae29_6dc6,
+            0x2328_82c1_1d67_4489,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd48e_2c48_68be_2a7f,
+            0xfd76_3124_e97c_3785,
+            0x2494_17a0_2862_5a76,
+            0x1adb_8e39_5814_6bb6,
+        ]),
+        pallas::Base::from_raw([
+            0xc5b2_a933_33d8_2271,
+            0xc234_101f_038d_cceb,
+            0x14f3_b690_9f60_efab,
+            0x27ba_de97_ba05_a771,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3781_a814_a454_5341,
+            0xa839_4f11_8db0_db87,
+            0x5f89_9340_4408_04e2,
+            0x32c2_7af2_a581_5018,
+        ]),
+        pallas::Base::from_raw([
+            0x5072_470a_53d8_4521,
+            0xf3ca_f426_f878_4d19,
+            0x59c7_fc07_0d03_a314,
+            0x05c9_4781_d82a_2a15,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x80d1_8205_7021_0e5c,
+            0xc3c1_9d74_bb05_c3fd,
+            0xb4d7_0972_795d_dc32,
+            0x1703_d858_90b0_1ff2,
+        ]),
+        pallas::Base::from_raw([
+            0x48a1_ba30_d95b_8f1c,
+            0xd8f0_0c72_cf1d_2306,
+            0x13ac_ce4c_3128_9a52,
+            0x3e18_5f4b_f046_df12,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6fe5_75df_15be_5ace,
+            0x2c1f_ad80_7746_0b25,
+            0x1fb9_8d91_95ff_e580,
+            0x25d2_f86b_25f6_0374,
+        ]),
+        pallas::Base::from_raw([
+            0xe56d_dd9b_adaa_a04d,
+            0x443a_5452_103d_3d0c,
+            0x268f_e354_2b01_c30f,
+            0x360a_d0af_c036_b6ec,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd5be_3219_7358_df23,
+            0x36cd_6c6c_65c0_9b4d,
+            0x2886_ca9d_7d3a_f212,
+            0x0ad0_c100_2c7f_f83f,
+        ]),
+        pallas::Base::from_raw([
+            0x965c_3680_c268_ea30,
+            0x90c2_1c88_c78f_7abd,
+            0xadbd_7dfd_d32e_b481,
+            0x3e32_3f87_fe7e_9cc8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa927_c4f7_bcbc_65c9,
+            0xb16b_54b4_356c_da95,
+            0x467d_21ce_c0a1_946a,
+            0x3a94_7a7a_8ba8_fcf3,
+        ]),
+        pallas::Base::from_raw([
+            0x6ad5_c82f_2e6b_802b,
+            0x2134_5b22_9afa_da8c,
+            0xfc8f_90bb_fa9c_a1d5,
+            0x1760_5d23_3ef4_1cfb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x745b_4736_84f8_b6ff,
+            0x2fa7_72e6_7d28_f226,
+            0x7f5c_281c_0a58_3d12,
+            0x2101_b974_3906_2e3a,
+        ]),
+        pallas::Base::from_raw([
+            0xe616_1109_cf4e_3a62,
+            0x250e_baad_119d_1842,
+            0xfbd4_356a_24bc_0f49,
+            0x197f_86a7_7da6_fbe4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5078_ccf0_65b4_a022,
+            0xcadd_f679_760c_cec1,
+            0x57f9_1931_9550_a0f2,
+            0x1999_0351_202f_4b81,
+        ]),
+        pallas::Base::from_raw([
+            0xba4c_1093_d57d_9f32,
+            0xa80a_f145_0a0f_e90f,
+            0x640a_4328_7313_6af7,
+            0x1965_465f_d2eb_c138,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d75_75df_d86d_6ffc,
+            0x8c7b_72c0_1499_bab5,
+            0x8354_9fe9_4386_40f6,
+            0x01a5_1723_6d7d_92c7,
+        ]),
+        pallas::Base::from_raw([
+            0x850e_9adf_152d_9d66,
+            0xb87b_f256_43ee_366e,
+            0x39dd_1caf_086d_f29c,
+            0x2b2e_cbfa_0c18_5cfa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2ff4_d2c3_2c0c_fb5e,
+            0x5b66_20fb_1e78_2e48,
+            0x164e_048f_a6a6_a139,
+            0x1177_de98_7417_d289,
+        ]),
+        pallas::Base::from_raw([
+            0x4473_f63c_8b63_96f8,
+            0x8813_7018_e47c_7668,
+            0x6e54_658a_9365_58d6,
+            0x1565_f32e_c124_4d16,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd3f8_b046_ad64_54ca,
+            0x0783_8e28_f074_59fb,
+            0x2c26_6e07_3920_1035,
+            0x1ade_ae43_961e_58b4,
+        ]),
+        pallas::Base::from_raw([
+            0xcbac_9225_97cc_0885,
+            0x0297_41f2_ecb8_bb41,
+            0x52f7_8881_bca8_0ffe,
+            0x2626_3bd7_d9ea_3997,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x239b_b01c_10ba_15ee,
+            0xe0de_2e2f_e883_21d9,
+            0x249e_a03d_0db2_8458,
+            0x02a1_1010_c364_a8ea,
+        ]),
+        pallas::Base::from_raw([
+            0xbd63_66bd_80d3_bf55,
+            0xb968_3e0e_df85_70d0,
+            0xf00a_642f_04ed_e36b,
+            0x37ff_d622_b30b_a504,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc31a_07a7_d2f5_79be,
+            0x93e0_4a16_dd86_733b,
+            0xbec9_12d1_386f_ac07,
+            0x1991_25d9_b76c_e739,
+        ]),
+        pallas::Base::from_raw([
+            0x976a_9a8c_0d17_a731,
+            0xaf6f_c9c4_4420_7256,
+            0x7e5b_0ef8_957e_bf8d,
+            0x1afe_401a_7512_9532,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3be4_fa65_6613_b0fa,
+            0x3a1f_be61_2e26_94e4,
+            0x0091_a6fc_3b5e_dd57,
+            0x39fd_5dda_cf6b_ead4,
+        ]),
+        pallas::Base::from_raw([
+            0xf61e_8e10_a02d_938d,
+            0x303d_5afb_e1b1_5c24,
+            0x4f3b_c283_f1c5_9415,
+            0x19ea_636b_25ee_6d68,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2f71_d6ff_1108_c379,
+            0x3338_649b_c8f8_2416,
+            0x29cb_7fba_0970_1000,
+            0x3206_be8d_debb_c71c,
+        ]),
+        pallas::Base::from_raw([
+            0x4797_990c_97ff_3dc0,
+            0xb0f3_243c_bc1b_97bc,
+            0x8017_28af_4cf3_8a59,
+            0x3f56_eb32_53df_1196,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5b66_3474_6e09_2e1f,
+            0xc2e2_87f5_f9ef_0a82,
+            0x2442_95dd_210c_66ca,
+            0x1d88_ea2d_bc4c_95ae,
+        ]),
+        pallas::Base::from_raw([
+            0xe19d_8eb8_f861_3356,
+            0x4b53_10d6_7f10_e971,
+            0x1ae6_394e_2861_00bf,
+            0x0bc9_988e_3ea3_35e3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc3be_adb7_c20e_f2de,
+            0xe8ca_eb5c_5b32_9708,
+            0x7c0b_c8f5_a91d_631b,
+            0x357d_7b0d_bb96_a87f,
+        ]),
+        pallas::Base::from_raw([
+            0xad73_6f6d_e6f6_ed85,
+            0xa176_6fea_071e_6309,
+            0x73ff_1119_546e_4400,
+            0x37b5_a0a3_1732_6eb9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x71fb_d7b6_ec81_457b,
+            0xa3db_880b_8ebd_e2f8,
+            0x6fae_9d5e_77f7_7282,
+            0x3922_33fe_aae5_f4d8,
+        ]),
+        pallas::Base::from_raw([
+            0x10db_938c_736f_6d80,
+            0x343d_e723_56d1_9731,
+            0x78b3_c37a_9d5d_a468,
+            0x1617_300e_9160_0a2b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x424a_8877_5bac_1aa3,
+            0xa8c8_36e8_7e8c_c0e5,
+            0xc371_2374_03fe_9264,
+            0x26f1_c98a_7a66_a30e,
+        ]),
+        pallas::Base::from_raw([
+            0x51a3_b36e_0db2_44d9,
+            0x3eea_1d88_887d_e035,
+            0x25cb_a902_d51f_f3da,
+            0x36e7_0b90_4548_6468,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2728_fdb5_0b61_d1c1,
+            0xcb71_a070_6ed1_1521,
+            0x0509_29be_1d07_ab6f,
+            0x21d2_7b62_2b7e_c84c,
+        ]),
+        pallas::Base::from_raw([
+            0xe13a_1cfe_7ee0_cf80,
+            0xae30_8c36_a8e1_6416,
+            0xed99_fb9e_9ce0_6d84,
+            0x34a7_cab8_9803_1842,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfdbb_35ef_3aeb_c28f,
+            0x834b_2806_1e44_0e87,
+            0xbd65_25e3_6607_150d,
+            0x183c_3d98_886a_d987,
+        ]),
+        pallas::Base::from_raw([
+            0xefb2_e06e_bf3d_5ba9,
+            0x8d2e_e783_371a_b957,
+            0xca32_80bd_b0c7_07f8,
+            0x1de1_6b88_08f5_68f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x786d_bdc0_924e_ec5b,
+            0xe210_6c1c_189c_4147,
+            0x7a4b_a8ab_bb17_0ad5,
+            0x27d2_5cca_176a_5ec8,
+        ]),
+        pallas::Base::from_raw([
+            0xbccc_549c_6a1a_38e3,
+            0xffe7_d383_bcd5_f8c1,
+            0x1e45_0633_f24b_c870,
+            0x346e_0709_ab95_21c1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5e73_f44f_3cca_5a3e,
+            0xa965_c7a3_dd6c_7e35,
+            0x3ec6_eee4_1149_89dc,
+            0x1083_dfea_d4be_6b07,
+        ]),
+        pallas::Base::from_raw([
+            0x294d_4b25_9ddb_cf9c,
+            0x7ace_974e_8045_61c6,
+            0x507e_843f_4d68_c0cd,
+            0x0a2d_8f78_fec0_e925,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf05e_c78b_2d6d_b205,
+            0x74ed_d93b_8da6_3fc5,
+            0x2d14_ee3d_c962_e1b5,
+            0x3d96_e779_a206_75e2,
+        ]),
+        pallas::Base::from_raw([
+            0x74b0_20fc_2442_53df,
+            0x5e67_731c_8a84_c1e5,
+            0x76b9_572f_ee83_9cca,
+            0x20ec_4fc7_e584_793d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x618d_3a50_bf2f_9c6c,
+            0x2c9e_12ad_d09d_53c9,
+            0xc40e_e12a_9971_a79c,
+            0x2193_5e49_8cdb_4af2,
+        ]),
+        pallas::Base::from_raw([
+            0x526d_a471_4847_0d71,
+            0x91b6_ada6_7e06_44fd,
+            0x0ed3_0fc8_f6f1_8eb0,
+            0x3339_a9d2_a7ce_d503,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5083_6ba9_ebe2_c4d2,
+            0x1a97_6e48_cf4e_b89f,
+            0x8704_3936_d76c_17ad,
+            0x29af_2213_94b4_1751,
+        ]),
+        pallas::Base::from_raw([
+            0xf644_cd10_7f09_50c3,
+            0x8884_71c3_01ea_94bc,
+            0x8937_b2cf_3be6_5258,
+            0x2647_20f5_e202_98cb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x95c7_2972_4e5a_6bdd,
+            0xcc55_a697_2f1e_750b,
+            0xb9b7_90c3_f913_c375,
+            0x1ddf_0c2a_bcd6_126c,
+        ]),
+        pallas::Base::from_raw([
+            0xb261_7fe7_e51f_68c2,
+            0xaf6a_f700_27e2_8cd1,
+            0x22e8_5bb5_4a2c_2e77,
+            0x04af_6cfe_6abe_1c31,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8ea6_8c4e_c05f_e2f3,
+            0x0155_d4ad_ba7b_31ef,
+            0xa5ea_74df_1d84_ead9,
+            0x2523_0890_0a38_e897,
+        ]),
+        pallas::Base::from_raw([
+            0xa64a_883e_1163_2151,
+            0xd107_d743_2477_f8ff,
+            0x0daf_49f8_7158_36fc,
+            0x3e81_0b63_687a_6435,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb8e8_f1d3_9d83_1327,
+            0xeefd_129a_2f23_fb16,
+            0x5ce7_95e9_417c_4b58,
+            0x3579_508c_8c75_a170,
+        ]),
+        pallas::Base::from_raw([
+            0xe1b9_574c_e4b2_5e71,
+            0xa37c_b44d_e87e_b515,
+            0xf492_24b9_9d55_8ab8,
+            0x09c4_997f_9e5b_f623,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5010_3905_13ee_f907,
+            0x4719_6aaa_d39a_a899,
+            0x54de_851b_e709_1a02,
+            0x2784_a297_4957_e70e,
+        ]),
+        pallas::Base::from_raw([
+            0x24ee_caef_9885_dfab,
+            0xd189_3009_5f27_f678,
+            0x1fd3_6af4_15d9_091f,
+            0x084b_ec81_b437_8e44,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb19f_74b4_e493_4f13,
+            0xe3a0_e81b_f084_e23c,
+            0xafb2_ef1f_aea3_231b,
+            0x0281_e846_acc0_87ee,
+        ]),
+        pallas::Base::from_raw([
+            0xd975_d00f_7393_542f,
+            0xf8ae_f91e_ec9e_59d0,
+            0xd285_8c11_b9c5_280c,
+            0x3b00_5d52_5add_f883,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7b66_98ea_e221_f3ec,
+            0xaa52_8c99_81e3_ef9d,
+            0x8594_5e1a_bb14_af22,
+            0x005a_5676_d642_01e0,
+        ]),
+        pallas::Base::from_raw([
+            0xf403_21aa_0a31_021b,
+            0x4b9d_4172_43e9_01ce,
+            0xdcef_30a1_fffd_6fe4,
+            0x115c_5d90_17e7_5c6b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb50b_a31a_29ee_735f,
+            0xe087_4244_55be_9f05,
+            0x4b3d_5356_7f34_bb41,
+            0x3592_dfa2_ef73_8fd5,
+        ]),
+        pallas::Base::from_raw([
+            0x5eea_a2b4_5eaa_ac7f,
+            0xba64_a158_5df4_da51,
+            0x64f2_1e18_e2a1_a18b,
+            0x2744_472c_60b3_f4f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1ab7_7d4c_5a3a_d076,
+            0xecef_342e_138f_55a9,
+            0xe581_d4cf_1cbd_f93b,
+            0x0ea1_f359_9f7d_3d5c,
+        ]),
+        pallas::Base::from_raw([
+            0xfc25_aea5_9fe3_c15f,
+            0xc8eb_d71a_f44f_64e0,
+            0xaa6b_2e54_38b5_a5ed,
+            0x1cd7_d950_1f7e_fb20,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb92c_cc75_d2f6_7ef9,
+            0x7c8c_7050_bb4b_c76c,
+            0xae06_dd71_3e7c_b705,
+            0x12e7_b66e_0a99_9a6f,
+        ]),
+        pallas::Base::from_raw([
+            0xce73_174c_46de_1a90,
+            0xf233_8c5c_dce6_3624,
+            0x7311_d0f1_6107_caba,
+            0x07c5_3cd8_2f6e_3bc1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x679f_68cb_0663_880c,
+            0x22eb_3ab9_b8f2_c733,
+            0x8c9a_cbf2_ee17_7ad5,
+            0x0215_4cc2_96b2_c905,
+        ]),
+        pallas::Base::from_raw([
+            0xf9f8_7298_bb53_de4c,
+            0xdf36_8c20_1ec4_1690,
+            0x4964_d682_c5ab_2e0e,
+            0x1c40_fd23_1fb7_cd69,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2119_8bfc_8956_b75d,
+            0x991d_620b_35a4_b565,
+            0x71ea_c445_814e_d86d,
+            0x28c7_9db6_4739_3f32,
+        ]),
+        pallas::Base::from_raw([
+            0x14ce_2060_ae17_f113,
+            0xbe45_fdc5_1246_fc50,
+            0x8e1c_4319_10ac_be73,
+            0x1312_53c6_1783_912e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x026d_767e_1005_dd37,
+            0x0759_23a2_1a64_428a,
+            0xeeae_4507_b79d_6a0e,
+            0x37d5_760d_8173_256b,
+        ]),
+        pallas::Base::from_raw([
+            0x5214_d99e_936f_56c0,
+            0x26a0_b50e_6731_2f58,
+            0x3dfa_7029_6ec1_d238,
+            0x170c_0df2_5f28_1a90,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x397a_3bcb_ba4d_bd68,
+            0xf577_2816_06d1_1af5,
+            0x0814_30b5_220c_1e6e,
+            0x04ee_cac4_45e3_73c9,
+        ]),
+        pallas::Base::from_raw([
+            0x3de6_619d_1a4f_65d1,
+            0x680e_a92b_eb54_6b7a,
+            0x01d4_31ba_19fc_51bf,
+            0x070c_35d1_13a7_0730,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x327a_43da_e34b_c50b,
+            0x9227_b80c_f9ef_6317,
+            0x207b_c331_727a_65f5,
+            0x2f5b_368e_9519_0487,
+        ]),
+        pallas::Base::from_raw([
+            0x59da_f9c7_044b_8bc1,
+            0x1ab3_944a_4c78_5084,
+            0xb716_6a13_ed9f_a130,
+            0x2165_91e0_c300_e0b9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5fa9_1288_f21f_b95f,
+            0xbbd2_13a8_837b_4744,
+            0x0a4a_3270_6938_5d8c,
+            0x2db9_f193_d5c5_c9c1,
+        ]),
+        pallas::Base::from_raw([
+            0x7bbd_9898_1a1a_9bff,
+            0x4ad2_4d15_ef54_060e,
+            0x8824_c7a3_915e_035e,
+            0x04ea_a03b_8152_e316,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x718e_5117_e211_d00c,
+            0x6820_04a7_e806_2c61,
+            0xe14d_1252_02ee_8806,
+            0x35d6_bbce_17ad_d8be,
+        ]),
+        pallas::Base::from_raw([
+            0x6d50_9095_573e_853e,
+            0x9be9_bb45_bd5d_ff54,
+            0xd142_d615_c2b2_e50a,
+            0x0d21_45dc_b049_831c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8fe4_32aa_3577_54fb,
+            0x4766_8513_94d3_898b,
+            0x776f_85d0_c89d_75c4,
+            0x1144_091e_1eb0_8134,
+        ]),
+        pallas::Base::from_raw([
+            0x398f_9036_dcb4_9364,
+            0xaaa7_1f19_dd46_1c3e,
+            0xda24_0bf3_7b5d_659e,
+            0x1c09_8238_7bf2_3870,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6570_c993_e75f_d9fd,
+            0x5595_d3ee_e187_37f9,
+            0x0629_32a7_cec7_4b58,
+            0x0202_816c_bc84_b4fa,
+        ]),
+        pallas::Base::from_raw([
+            0x1df0_9e9c_5fb9_da74,
+            0xb847_f271_42f4_50ee,
+            0xf499_343b_da75_dca6,
+            0x1781_323b_7425_6726,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5aff_0d37_7f88_51d2,
+            0x7353_2959_e87d_bfb3,
+            0x634c_476c_fbb7_1c96,
+            0x11df_8818_cefd_7683,
+        ]),
+        pallas::Base::from_raw([
+            0x35ac_fac4_4577_543d,
+            0x5c8f_db44_1658_61fc,
+            0x4b19_0f39_cf3c_fb30,
+            0x27dc_c868_42a3_d6b8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x706f_36b5_bce1_6334,
+            0xed63_bc8e_d67e_8f0d,
+            0x5389_8211_d9a1_148b,
+            0x084e_1a66_ed1d_9f9a,
+        ]),
+        pallas::Base::from_raw([
+            0xa9e0_e924_9383_6ee5,
+            0x54c4_d664_8f95_0861,
+            0xe2de_beff_8d23_4306,
+            0x2038_1989_0b48_2b10,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3afe_f81c_330c_8ad7,
+            0x8f31_b38b_3cb7_7f46,
+            0x0be8_a9e3_b4bc_f237,
+            0x09ce_729b_7917_ae58,
+        ]),
+        pallas::Base::from_raw([
+            0xd199_ef86_4732_8de0,
+            0x7b03_6744_a3f5_8144,
+            0xa545_b8ef_580a_7994,
+            0x1074_1c11_9769_07ab,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xcc3d_d69a_86da_b9af,
+            0xd4e7_5a09_d52b_0b3e,
+            0xe8ad_091d_8b10_7f75,
+            0x2b43_cc2e_f8d8_f01e,
+        ]),
+        pallas::Base::from_raw([
+            0xbd14_0c51_b03d_0f63,
+            0x1006_923c_4bcf_285d,
+            0x7221_7a99_120c_7911,
+            0x012f_2b79_8f53_056f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0beb_949f_a313_486c,
+            0x0d5c_e4d6_059d_abf8,
+            0x4991_4b41_76f5_2b16,
+            0x1a14_5dc7_97b5_eb4c,
+        ]),
+        pallas::Base::from_raw([
+            0x9b0a_fb2b_b5fb_dc02,
+            0xb72e_d001_8b32_e67e,
+            0x8dc1_f4ac_e7f6_40a1,
+            0x0a03_99e6_e2c1_35e8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x24e5_3cfc_0a85_3bd6,
+            0xc691_a440_5284_538a,
+            0x285f_8587_a2ca_3f67,
+            0x0049_29ba_589a_b1ac,
+        ]),
+        pallas::Base::from_raw([
+            0x47d0_0f51_b59e_11b5,
+            0x034c_e6c5_4f24_d018,
+            0xcdfa_fdf5_9352_2277,
+            0x1740_01a4_cd80_e459,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x05f2_fba6_88e4_64cd,
+            0xcc07_4f11_8393_de4e,
+            0x8cd3_84d1_2d3a_f616,
+            0x082e_c561_65bd_c5db,
+        ]),
+        pallas::Base::from_raw([
+            0x0ff4_d463_cdf6_1438,
+            0xb9d4_8513_1297_820b,
+            0x577a_ab49_6011_7b6f,
+            0x189f_caa5_6f47_de49,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6a66_f234_459d_9c05,
+            0x52b3_b4e7_046a_0ca2,
+            0x5f0c_f5c7_ac0b_8673,
+            0x2d4d_378b_8ab7_0f4d,
+        ]),
+        pallas::Base::from_raw([
+            0x25e8_c3f3_463b_7de3,
+            0x1db7_6493_b323_dd0c,
+            0x96a6_cbc7_69f8_7c7f,
+            0x0433_09e4_d57b_65e1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xcf05_4d04_c520_e0a0,
+            0xd540_edc7_1ca1_3af1,
+            0x4993_044b_77dd_0400,
+            0x1b0e_a9cd_b77e_ff99,
+        ]),
+        pallas::Base::from_raw([
+            0x6928_0ea8_321c_cd3b,
+            0x72ab_b895_a1a8_f03d,
+            0xf3d3_938f_2c87_7734,
+            0x1270_1769_ae73_6bcf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3e52_a2f0_ad5f_a12d,
+            0x4418_5ba6_38bc_b064,
+            0xef8b_d3ef_5bf1_6622,
+            0x3ef5_5ec2_16b2_28bf,
+        ]),
+        pallas::Base::from_raw([
+            0xb82b_cb14_f2f4_9c05,
+            0x1ecb_aee5_356e_0958,
+            0xd850_681c_85cd_d83a,
+            0x1328_7a30_a3cd_c18a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x76c9_1531_675b_e4d2,
+            0xbff3_efc0_f5e7_a3d5,
+            0xbf16_1feb_c704_2e5a,
+            0x0033_a85c_5e3e_212d,
+        ]),
+        pallas::Base::from_raw([
+            0xb3fe_295f_735b_1607,
+            0x4c07_169f_2f85_8811,
+            0x53af_cd3d_e314_e24b,
+            0x33dd_2f1a_9d46_44fc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8e41_0696_97e7_8171,
+            0x26ff_1208_32bf_c795,
+            0x0bd7_0aa4_1196_808a,
+            0x3ae0_f344_40d2_99f5,
+        ]),
+        pallas::Base::from_raw([
+            0x2474_b70b_2dad_669a,
+            0x4603_66a7_e898_713f,
+            0xb369_5b24_0bd9_aeba,
+            0x3c74_bb6d_465e_e2ea,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6e89_42a3_91dd_c2ea,
+            0xc38a_28e1_fcf3_fba9,
+            0xeb31_2651_5a79_f178,
+            0x341f_5e3d_2d3a_415b,
+        ]),
+        pallas::Base::from_raw([
+            0x7449_ce64_375e_4ca8,
+            0x0602_745a_0fb3_6d33,
+            0x2958_f891_d370_9055,
+            0x09b2_2212_2dc8_e043,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x06b4_c662_7f86_1a17,
+            0x6892_8a55_09f7_1a30,
+            0x0f16_7e0c_216f_c514,
+            0x3d3a_af95_d02a_5c26,
+        ]),
+        pallas::Base::from_raw([
+            0xf1df_9dff_4331_9bc6,
+            0x3728_ab5b_c9a6_f755,
+            0x8c73_0235_2ed7_3f95,
+            0x3f65_6e0c_c790_2ba0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9f45_5904_d062_3f0a,
+            0x7823_029e_72a6_7bb6,
+            0x99fb_f22c_510a_2be4,
+            0x2e85_df2d_4723_8ae7,
+        ]),
+        pallas::Base::from_raw([
+            0x327d_317b_e878_66e3,
+            0xa45e_75ef_95df_3e94,
+            0x7b1a_c76d_c402_0f49,
+            0x3a60_fbcd_a37c_815e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x17df_a08e_e2a4_a5c2,
+            0x0d37_fdbf_7f39_3cc8,
+            0x5f65_0aee_69a3_3aab,
+            0x21cc_cd3f_512f_6fef,
+        ]),
+        pallas::Base::from_raw([
+            0x5501_f47b_1934_3bbb,
+            0xc629_25da_839b_5703,
+            0xe869_5dff_4ac7_98db,
+            0x2616_31c0_e0e8_b1b3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x11b8_7af9_9e00_27df,
+            0xafd7_bf48_d6fc_a4f1,
+            0xd540_1aff_42f4_c233,
+            0x158d_6245_8d40_37b2,
+        ]),
+        pallas::Base::from_raw([
+            0x8b6f_fd47_6243_eb36,
+            0x6c6d_2aa6_425d_192e,
+            0x9148_af15_de60_624c,
+            0x3e87_9938_3886_00a0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfe07_2c77_e4e1_e7c2,
+            0x93d8_3c8c_e662_68de,
+            0x619f_5102_29bc_739b,
+            0x3a66_5f24_c02b_af59,
+        ]),
+        pallas::Base::from_raw([
+            0xc557_f198_58c8_a876,
+            0x7731_9895_7381_1af9,
+            0x6b7d_918d_995d_93e6,
+            0x307f_067d_c98e_9636,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa436_5475_6a68_c675,
+            0x88f2_f299_794f_3553,
+            0x7f11_45b8_74ae_62c7,
+            0x0dee_f81a_0f27_b481,
+        ]),
+        pallas::Base::from_raw([
+            0x993e_47cf_7f5e_cf8c,
+            0xe810_5d2c_1b5e_0447,
+            0xcaad_b923_1a1d_ac82,
+            0x147a_8969_4b2b_e230,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4723_e366_ae1e_6184,
+            0xee04_327f_d719_ea9b,
+            0x24db_be73_e152_f27d,
+            0x2100_9976_6171_438d,
+        ]),
+        pallas::Base::from_raw([
+            0xefe4_8e4e_9b94_1267,
+            0xacb1_8986_fab0_a084,
+            0x7b10_5663_ae11_ea5e,
+            0x274f_221d_771c_400c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5cb8_1790_8657_3d1e,
+            0xdd05_63de_2edd_ddc4,
+            0x78ba_e557_b388_ffeb,
+            0x1a84_b9f1_4ad0_365d,
+        ]),
+        pallas::Base::from_raw([
+            0xd1da_bfb8_e966_236a,
+            0x57d3_fa91_cbd6_0cc8,
+            0xdc92_8096_0248_333a,
+            0x376c_21b4_5247_997f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x13f0_c07a_dc21_f7b1,
+            0x2a5c_69e9_05fe_854b,
+            0x0573_d14d_1d7d_da4f,
+            0x193e_e5da_b674_a49d,
+        ]),
+        pallas::Base::from_raw([
+            0x7fa1_74ca_714a_4b90,
+            0xfe21_aa2e_52a5_a793,
+            0x69dc_b536_0f5b_c791,
+            0x1b16_b237_03d7_e26c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xeaf6_6865_27d4_b8e6,
+            0x1aa0_aab4_2666_1fcf,
+            0x1aa7_9baf_a2a0_5e73,
+            0x3589_722c_8ec2_4085,
+        ]),
+        pallas::Base::from_raw([
+            0x4142_0491_d747_fb8f,
+            0xc20b_63f7_728a_bf57,
+            0xf61d_1974_ab2a_d20b,
+            0x3a16_a2b3_28cd_a978,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x479a_9ac8_e884_e011,
+            0x504e_93b0_cd03_ae26,
+            0xc711_9e1f_1319_e977,
+            0x3793_11e7_db77_15e7,
+        ]),
+        pallas::Base::from_raw([
+            0xf05b_ef48_6578_ec58,
+            0x05b9_b52f_deca_50dd,
+            0x6c92_c4fe_9bf6_95a2,
+            0x2ae6_65e4_8ad7_556d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9418_f007_3a11_5039,
+            0x84ba_f7e6_293c_aa1d,
+            0x4be5_7bb5_6c37_e8e8,
+            0x2e01_0c6c_ba9d_2f9e,
+        ]),
+        pallas::Base::from_raw([
+            0xb30c_63c5_793a_1373,
+            0xc2a7_a868_e4da_a692,
+            0x789f_e67b_b71f_b6dd,
+            0x2812_c192_3126_8e2a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8a3e_8b6d_d6fb_bcb6,
+            0xfab6_9586_3583_cbe2,
+            0x3d2e_3c47_a4bf_b5a1,
+            0x1715_0e76_b351_e99d,
+        ]),
+        pallas::Base::from_raw([
+            0x2ea8_22fa_65a4_7757,
+            0x1f2f_e64a_c655_741c,
+            0xd1aa_205a_f5ac_9570,
+            0x27cf_dd88_0836_c8e9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7d30_5f29_822a_7979,
+            0x8082_4fc1_a364_96e2,
+            0xf73d_1cf4_c77a_0f4d,
+            0x1c9c_be3c_6a19_26be,
+        ]),
+        pallas::Base::from_raw([
+            0xaa17_af8c_1c76_1823,
+            0x09d0_a290_baf6_e926,
+            0xf61c_06f8_b5d6_c22b,
+            0x172f_1a6d_fc32_d9cd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5ad3_8743_b520_2fb9,
+            0x083a_2695_50be_40d2,
+            0xb911_1803_3f67_cde3,
+            0x2846_f462_30cf_b810,
+        ]),
+        pallas::Base::from_raw([
+            0xe223_b5e7_e937_c54c,
+            0xf2c5_77fd_b08b_3f21,
+            0xb6c1_652b_7505_a7d3,
+            0x2c8f_a498_2e60_e130,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x56bb_e185_4175_95f3,
+            0xecc1_0053_9407_c202,
+            0x90a5_c415_7630_fd2e,
+            0x1f33_8ef2_6410_ce20,
+        ]),
+        pallas::Base::from_raw([
+            0x1a3b_5459_1a56_b7d4,
+            0x2711_c42b_cfc8_bd25,
+            0xb313_42d6_a462_1965,
+            0x1e04_5727_6c6a_be28,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x33f0_122d_1fc2_e9d6,
+            0xbbaf_07e2_6d0d_b5f4,
+            0xada4_e1db_90f2_0928,
+            0x320d_78d3_7e1f_9b51,
+        ]),
+        pallas::Base::from_raw([
+            0x6d4f_fe2f_b80e_79f9,
+            0x1697_46f5_0160_9c4d,
+            0x9c94_aa69_371f_e117,
+            0x08ff_a47d_8297_7661,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0eed_415f_7d55_1715,
+            0xf420_3b98_aa11_457b,
+            0x9053_f3d5_4476_0afb,
+            0x02c2_03ba_dea2_76a1,
+        ]),
+        pallas::Base::from_raw([
+            0x55d7_024a_e842_a5af,
+            0xb58c_03ba_9deb_cd2f,
+            0x0c6b_c8b6_ceaa_42b5,
+            0x3b4e_7fab_6e35_5c3e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xea9d_81f8_6a0d_dbe9,
+            0xce0f_2809_3257_e6f1,
+            0x0039_3b64_fd52_ff04,
+            0x2942_5821_8d23_ef24,
+        ]),
+        pallas::Base::from_raw([
+            0xbb7f_710f_9517_dc5b,
+            0xb9db_1453_43ab_48ca,
+            0x94cd_60e3_1fe8_3451,
+            0x2be1_7ce0_f798_be8b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd971_ee8b_071f_3aa2,
+            0x6542_046f_2f21_6648,
+            0x7011_a0b4_c4c5_2feb,
+            0x176a_75e4_305d_c7cb,
+        ]),
+        pallas::Base::from_raw([
+            0xb8fe_680b_ce75_ae24,
+            0x8549_cbf6_c3d2_7b44,
+            0xa8ee_92a7_6a40_c587,
+            0x09e6_b0ba_013d_f131,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb80b_9e97_64fd_da65,
+            0xb0c0_b411_0bc5_8a2d,
+            0xac1b_b1a0_c6e1_5c55,
+            0x36a4_4d41_d37a_70e8,
+        ]),
+        pallas::Base::from_raw([
+            0x6a77_efb2_81aa_e72f,
+            0xc578_8686_9b58_faa7,
+            0xab74_33bd_7e33_68dc,
+            0x1792_ad2e_7f54_a000,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8792_f6ef_0395_a9a7,
+            0xd375_7f3d_66c2_7229,
+            0x6949_e876_d5c7_9010,
+            0x176c_f116_0c7f_8ba7,
+        ]),
+        pallas::Base::from_raw([
+            0xf0f5_d8f0_a98d_c2bf,
+            0x4118_e09e_ac6c_d9e9,
+            0x4ed1_51e4_5f97_f657,
+            0x13e7_3756_26b8_54e4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbccd_3257_f3c2_06d0,
+            0x3139_8eae_f991_a342,
+            0x5a2d_4414_2fa3_5a6c,
+            0x3cef_bcc7_13f6_3152,
+        ]),
+        pallas::Base::from_raw([
+            0xc806_3b97_017e_00ab,
+            0x5e20_fdd5_44b5_acc3,
+            0x6cce_c0f6_ef8f_18cd,
+            0x14ee_4b77_ec6a_bfeb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc096_2238_58db_eab3,
+            0x5c0e_61b0_db10_ef29,
+            0x6c9a_f1ed_8acb_1da4,
+            0x3f76_fe73_c425_d939,
+        ]),
+        pallas::Base::from_raw([
+            0xdad4_82e8_b280_556f,
+            0xc3f4_06de_7fdc_c54e,
+            0x37ca_88b8_1d36_54b9,
+            0x0261_f776_7244_a4d3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7e1c_ca9a_a12a_8efe,
+            0x948b_62a8_c522_ec9b,
+            0x9dbb_049b_218c_3df8,
+            0x1efd_3a6c_d255_af78,
+        ]),
+        pallas::Base::from_raw([
+            0xa4b5_0f75_4d65_0a1f,
+            0x25b7_6c86_a75e_2c13,
+            0xfd6c_6887_ef4d_1d53,
+            0x0a59_0bd3_71bc_51f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdcee_cea8_b8d0_d650,
+            0x4f2d_8b8d_6a29_f2d4,
+            0x43d0_528f_eaf9_11eb,
+            0x2404_4c52_546c_2b52,
+        ]),
+        pallas::Base::from_raw([
+            0x96c3_facd_1cf0_d9f6,
+            0xca63_6712_9f50_6ad8,
+            0x2f85_d005_fa5f_9b5b,
+            0x069e_153f_9896_c130,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x686e_8212_4c61_d957,
+            0xc7aa_9bde_a486_649e,
+            0xd3c2_91e0_d4a3_7a8d,
+            0x0107_e2e3_2c5f_28f3,
+        ]),
+        pallas::Base::from_raw([
+            0xab0b_45df_c3d7_591b,
+            0xf7b5_854a_710b_f63d,
+            0x544d_c8f1_2e0c_26f3,
+            0x2d9b_95a7_30cc_ea85,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x513d_33c2_95ce_56f0,
+            0xbd2b_2fdd_7fd7_7031,
+            0x5d4f_47fe_09e2_e031,
+            0x2f94_4842_7b80_54b4,
+        ]),
+        pallas::Base::from_raw([
+            0xdf6f_d665_d36a_7467,
+            0x5dc9_191f_2fea_6b07,
+            0xeca2_ef63_7140_6422,
+            0x0171_50c0_96da_f72c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x367a_1d4f_87ce_2858,
+            0x9d54_5c07_8137_cd19,
+            0xdf1a_2072_738f_3bfd,
+            0x114e_4120_52f0_25d4,
+        ]),
+        pallas::Base::from_raw([
+            0x18fd_28df_bf66_d5ea,
+            0x8bbd_77f0_f949_9a75,
+            0x6362_4f99_f3e8_453b,
+            0x2780_edfe_8a38_8449,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7402_3082_0ea9_5ad4,
+            0x63b2_7be5_3550_2ffd,
+            0x91dc_cb3e_fbe2_60b6,
+            0x25e2_bfb1_0f32_3477,
+        ]),
+        pallas::Base::from_raw([
+            0xadc0_3a71_39b4_094f,
+            0xedf8_c60f_b4d1_c2bb,
+            0x6911_0947_b702_9fcb,
+            0x01f4_2fe0_a850_8065,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xff2d_cd62_e596_b4d0,
+            0xc7d3_1ad4_5af5_0fc8,
+            0xa0bf_73fa_b1a6_63fd,
+            0x01c5_4695_7e3e_a005,
+        ]),
+        pallas::Base::from_raw([
+            0xefeb_aacf_938f_6779,
+            0x6986_3f6e_07de_7291,
+            0xc06e_8e67_ade6_e796,
+            0x164b_abe7_7966_9ae9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1c33_6e51_b527_8fe0,
+            0x830f_0267_88b0_060b,
+            0xe589_fe8a_6136_cdf4,
+            0x04e2_bb36_ec30_315b,
+        ]),
+        pallas::Base::from_raw([
+            0xcde6_5cb5_9334_5bfb,
+            0x10a1_fb83_4287_f5f4,
+            0x37c7_a20c_4619_28c1,
+            0x2adc_5a85_4126_6b62,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3932_ba35_42e2_61ba,
+            0x3a1e_399e_82de_4dcd,
+            0x3a5f_6dff_03ac_3c73,
+            0x2cbd_15f4_53d9_16a9,
+        ]),
+        pallas::Base::from_raw([
+            0x2425_a35f_a98d_8937,
+            0x0a66_a2d3_5d9f_588c,
+            0xf832_8c5a_3951_852b,
+            0x0848_6f66_b4a2_dd55,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa4c3_8380_3a4d_9564,
+            0x109a_bd0c_31eb_54f2,
+            0xa83d_57b4_b012_a211,
+            0x3949_c80c_4cfd_3f85,
+        ]),
+        pallas::Base::from_raw([
+            0xfdcd_3f0d_1ef1_9e40,
+            0x47f8_5477_4692_b481,
+            0x60fc_0e1d_252f_8607,
+            0x1547_2a08_45c3_dc19,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x042e_596d_48e5_7baf,
+            0xd9d7_3041_cb15_f628,
+            0x65ec_a378_4e88_0916,
+            0x059f_7f0d_27e9_01da,
+        ]),
+        pallas::Base::from_raw([
+            0xd37d_77d4_4cf8_b443,
+            0xbfa1_72a6_7d41_76ec,
+            0xd8c8_b761_2524_7b4e,
+            0x079b_6488_5c2d_24f5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd29f_0703_a4b5_6dbe,
+            0x75e2_6aa8_956b_46fc,
+            0x84a4_49e7_02e2_2806,
+            0x38bb_f1d6_ceac_121c,
+        ]),
+        pallas::Base::from_raw([
+            0xc772_1a73_3066_b6d1,
+            0x1737_55f3_b53b_ec06,
+            0x3c2a_bd62_3e1e_2c21,
+            0x088d_d43b_6366_0116,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa116_6f77_055a_8bb6,
+            0x6385_2d8c_5889_8da4,
+            0x34b4_f4cd_754b_7717,
+            0x1526_aa2d_f3e7_515f,
+        ]),
+        pallas::Base::from_raw([
+            0x4085_c51a_2657_e4b8,
+            0x9679_5ea4_4624_8645,
+            0xc804_03a1_e3d6_3998,
+            0x199c_c2b0_2132_4b08,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa52a_db5d_d168_77c2,
+            0x6b03_f922_0b52_af2e,
+            0x7fc8_01e8_b4ef_22bd,
+            0x12e5_67c2_ec81_2f1d,
+        ]),
+        pallas::Base::from_raw([
+            0x0309_4014_a4e8_c20b,
+            0xe7bf_0cd6_a200_a8cc,
+            0xc608_65fe_fb5b_94ea,
+            0x0993_1445_3f68_41ac,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbfd7_fd57_8b6f_75d8,
+            0xf07e_f86e_d33d_296a,
+            0x5054_c978_d48e_ee12,
+            0x0b3d_76cb_4f6f_c43a,
+        ]),
+        pallas::Base::from_raw([
+            0xbef7_625a_4eed_90eb,
+            0x1f8d_bade_22fe_73f7,
+            0xc960_ab94_3ae5_1bfe,
+            0x0858_b2d8_865c_973e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe2e4_3c37_843a_04dd,
+            0x28e9_8a1e_6966_e7c0,
+            0x6ac4_304f_d629_f5a1,
+            0x2dfc_f1e1_ec0c_32fb,
+        ]),
+        pallas::Base::from_raw([
+            0xbd67_15f8_99d0_7f6e,
+            0xcb85_5a99_89cc_47ff,
+            0xdd2d_2426_6872_35c4,
+            0x1968_0ec6_a3a3_fcb8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5ab_b96e_1f94_1076,
+            0x51b5_b451_b97a_0268,
+            0xd7e0_dc4f_58ed_e375,
+            0x2bee_18a5_f76d_7e63,
+        ]),
+        pallas::Base::from_raw([
+            0xed7d_80be_441d_d7b4,
+            0xa4c2_d30a_3c19_cf3b,
+            0xac4f_739b_2e1f_91ed,
+            0x3562_48da_e389_3d81,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7c79_fc8c_4dcb_a1c0,
+            0x8162_1c35_b958_c1a1,
+            0x0a41_6e19_3265_f04d,
+            0x009e_4848_45e1_7f41,
+        ]),
+        pallas::Base::from_raw([
+            0x712d_9394_ab35_ebd1,
+            0x6312_e11e_d8e1_49fb,
+            0x84af_9933_77e5_1ade,
+            0x3f42_3c6c_cd36_1dc9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf371_6e56_7f23_b1e1,
+            0x538f_3c4d_6a0d_4994,
+            0xaf2a_6e2a_b089_32ec,
+            0x2f3e_49c7_37a2_98af,
+        ]),
+        pallas::Base::from_raw([
+            0xc5eb_afba_dcc3_18cc,
+            0x64f2_6b4c_6339_fd3d,
+            0x5ef0_9554_fa27_b6cc,
+            0x21dd_5ec1_51e4_e135,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc382_c4ea_f9e5_4b3c,
+            0x47ea_f27a_b13e_c143,
+            0x2a6c_3775_caaf_400f,
+            0x08d1_cba6_65ee_26df,
+        ]),
+        pallas::Base::from_raw([
+            0xfdf2_f10d_f382_cd25,
+            0x812b_4d72_4045_d2f3,
+            0xc1c3_32e2_6422_084b,
+            0x26a4_9ea4_f176_8cd3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe132_91ea_94e5_9353,
+            0x7d69_5680_fc7b_82e5,
+            0xada6_bc9f_fcd7_fe02,
+            0x2ad4_e94f_ac41_1335,
+        ]),
+        pallas::Base::from_raw([
+            0xf166_8557_d845_98ef,
+            0xb6f8_78df_9c3a_5c6a,
+            0x0993_e2b9_0073_8ccf,
+            0x09b0_6867_4885_ae31,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4161_dea7_2c51_a176,
+            0x147b_e228_82c1_8e17,
+            0xf47c_b827_d4af_8bcd,
+            0x30a0_5ec4_90a9_aa33,
+        ]),
+        pallas::Base::from_raw([
+            0x3209_f6db_3ea8_a841,
+            0x1d9c_06c6_ea2d_6905,
+            0x6afe_34c8_ac39_628f,
+            0x35f8_03ed_ac2f_acde,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbe8d_dfdb_83eb_b5ed,
+            0x185a_8a55_57ab_07c3,
+            0x109c_99b1_64d5_ebb0,
+            0x0243_40be_c0e7_c4f7,
+        ]),
+        pallas::Base::from_raw([
+            0x6b51_37b6_6b10_0439,
+            0x6f2e_00fe_1a1d_1ecd,
+            0xe2af_ff62_7ab4_5f97,
+            0x31d1_3ebc_0bad_4368,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe52c_00c2_77e0_805b,
+            0x289a_6cfc_00e4_613e,
+            0xba6d_64e6_b80e_af43,
+            0x028d_bb3a_a2eb_10e1,
+        ]),
+        pallas::Base::from_raw([
+            0xb5e0_5d84_b2c2_af71,
+            0x8ca8_19c8_ed2d_d4b4,
+            0xbf23_1285_894e_181d,
+            0x13dd_55ec_af42_2820,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7cd5_9e64_f479_5578,
+            0xb2e4_8301_4dad_1d12,
+            0x69bc_3333_f3ae_7a7b,
+            0x1d8b_bee3_8e56_ce73,
+        ]),
+        pallas::Base::from_raw([
+            0x62ed_e032_93f3_6d8e,
+            0xe0ff_b670_42fd_4d90,
+            0x28e5_b97c_3c9d_1811,
+            0x1a6e_4ed7_56c2_b230,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0828_358e_7ca1_8645,
+            0x4e14_04d0_c831_fc41,
+            0xa2d9_42ef_1ded_82b9,
+            0x2fb8_9978_33e6_41c9,
+        ]),
+        pallas::Base::from_raw([
+            0x1fa1_883b_1222_e351,
+            0x8a92_e672_a65c_2998,
+            0x2c95_70ae_0ce3_66ac,
+            0x2182_c430_2f94_8f79,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7137_1420_909c_4455,
+            0x79a8_72fa_e5ff_4895,
+            0x64c5_8a11_259d_2d60,
+            0x1b4a_243f_2c40_9d0b,
+        ]),
+        pallas::Base::from_raw([
+            0x24b7_097b_3e5c_77cf,
+            0x103c_bbe4_8a2c_d3c1,
+            0xfb53_ff35_bd2b_0ac1,
+            0x3520_075c_da2f_93c3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf70f_d61e_7311_192b,
+            0x663f_6658_1f78_66bb,
+            0xb223_dcf3_6099_76c2,
+            0x22c3_ced3_c628_b166,
+        ]),
+        pallas::Base::from_raw([
+            0xc390_e15b_4656_71ea,
+            0x839c_7a74_12c7_d85b,
+            0x9eab_c165_478d_f2c2,
+            0x0426_245e_279f_b951,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf32e_587b_08ac_a16a,
+            0xef0f_0954_a0d1_18d6,
+            0x663a_0d0e_0f93_711b,
+            0x3ba9_d989_09c2_1586,
+        ]),
+        pallas::Base::from_raw([
+            0x67b0_fe69_78fa_f39b,
+            0x4365_7c97_5d17_8817,
+            0x3634_3954_9a26_d391,
+            0x2912_61a5_3c05_d61d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb213_f8dc_16d9_4935,
+            0x6c08_5bb9_8b3f_b3d8,
+            0x3c8e_7712_a323_61cb,
+            0x1186_5328_9691_8dbf,
+        ]),
+        pallas::Base::from_raw([
+            0xdd0f_6a6f_c395_0461,
+            0x402e_cdec_f30a_8b9a,
+            0x63c0_5442_4a3d_9c82,
+            0x1e3b_87b0_e601_4734,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd2bf_fe22_3f25_f8aa,
+            0x3d13_dad2_88e3_899a,
+            0xe40c_042b_1047_1796,
+            0x20ef_355f_b2b9_b7a4,
+        ]),
+        pallas::Base::from_raw([
+            0x2584_fc90_05a4_4eb7,
+            0xc73d_0faa_e860_285e,
+            0xa3a9_e4b5_9dce_93f6,
+            0x1002_4764_5a67_73fa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb44d_d4ef_f05f_ee9d,
+            0xd311_e35e_57c3_af04,
+            0x6afa_e748_df35_ace0,
+            0x2852_47bf_ed5c_af05,
+        ]),
+        pallas::Base::from_raw([
+            0x67e1_bbc4_0409_5959,
+            0x1064_023c_f1ce_c606,
+            0x12ea_7b93_7755_8d2c,
+            0x14e6_9d5a_a6ca_0da4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3dad_64a1_41cc_bf58,
+            0xcd45_cc95_e1bb_6d96,
+            0x4f71_1071_c168_9f44,
+            0x0f42_27ce_35ad_602c,
+        ]),
+        pallas::Base::from_raw([
+            0x54ef_0524_e72a_f65c,
+            0x7baf_4d83_432e_dfbc,
+            0x3479_4bfb_b7eb_9917,
+            0x1bad_5ff2_bc75_3f5e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x17df_6323_6eb4_e4a0,
+            0xec9a_1e58_c280_b973,
+            0x5a8d_46ad_12ab_e217,
+            0x0222_2ecc_4b1f_79a4,
+        ]),
+        pallas::Base::from_raw([
+            0x8dc6_c26b_627e_cfc3,
+            0xcad4_3492_8c57_feac,
+            0x4c7e_c57f_f201_761e,
+            0x1a7a_19c9_ebec_a09f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfbdd_d33a_def4_3e8f,
+            0xd650_1c5d_0b0f_e30a,
+            0x6fd5_fd34_c4c8_ef1b,
+            0x337e_4fbe_c8b3_3a4e,
+        ]),
+        pallas::Base::from_raw([
+            0xfe9a_5311_7c98_6fb1,
+            0x90fe_d9ee_d112_899c,
+            0xa935_19db_c171_8814,
+            0x1a32_d859_2e42_f132,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbd1f_570e_d595_ab4c,
+            0x2e11_069e_dc17_bceb,
+            0x5c63_4ef5_02d2_93e8,
+            0x3be4_949d_9d7b_53c5,
+        ]),
+        pallas::Base::from_raw([
+            0xf087_456a_6cc0_0eac,
+            0xb68e_6724_73b7_edeb,
+            0x9548_e552_8391_9a99,
+            0x0107_0f1f_04ae_b5d6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x493a_9aea_3262_6e17,
+            0x7b8e_4c15_74b2_e969,
+            0x8053_61b6_b5f2_ca98,
+            0x39d7_c501_1792_79a3,
+        ]),
+        pallas::Base::from_raw([
+            0x53d3_5c19_43dc_f2e9,
+            0xba13_604f_47bf_3260,
+            0x8324_b8e7_4d46_596a,
+            0x1882_9bdb_b7d8_45eb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d27_0a51_f183_e9e8,
+            0xd276_a7f9_3066_8f03,
+            0xd48d_97b5_9e5d_88e9,
+            0x0e8a_ee90_45a1_44e1,
+        ]),
+        pallas::Base::from_raw([
+            0x2818_4a9f_3fa0_bb40,
+            0x710f_acd0_0450_af64,
+            0x900f_4bdf_1974_6e9f,
+            0x27a4_2da3_2115_76d4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb689_cf40_37dc_668d,
+            0x9377_0a01_142d_c428,
+            0x3134_eac4_c878_08fd,
+            0x3afc_9061_8065_68ed,
+        ]),
+        pallas::Base::from_raw([
+            0x60c7_7d3d_3fad_57b6,
+            0x59f4_9ebc_34aa_59b3,
+            0x9d63_d009_0c0a_7384,
+            0x2559_c358_bc86_61ce,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5c09_5692_145c_79b4,
+            0xda8b_bb5f_49bd_b0b4,
+            0x4135_2c94_9dbf_9dd7,
+            0x0453_dc79_9e74_8178,
+        ]),
+        pallas::Base::from_raw([
+            0xda01_9f05_07c7_9539,
+            0xe639_45d5_2aef_6d32,
+            0x4119_4ec6_4943_39e2,
+            0x2ea2_ef55_be81_fd44,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf49f_4fa9_04be_f892,
+            0x62dc_978b_3700_3ffb,
+            0x6702_e625_4263_44a6,
+            0x3b3b_e12c_dc8e_7efc,
+        ]),
+        pallas::Base::from_raw([
+            0x10bd_e67f_93e4_1090,
+            0x8ccc_a11e_ecb0_991e,
+            0x50dd_72f0_eb8a_e400,
+            0x3f3c_db56_a787_8aad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xff0a_53a6_55f4_b430,
+            0x0fbe_41a2_841c_8e6b,
+            0xe44a_6249_5534_24da,
+            0x3d16_d183_cfd9_e4f3,
+        ]),
+        pallas::Base::from_raw([
+            0xf173_7a47_4a12_010d,
+            0x3386_2a20_5ae3_010c,
+            0x9475_ac8c_7cc9_6eb2,
+            0x2d5e_edba_92e3_787e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xec32_bdcc_3ab6_8bc8,
+            0x5ef1_c68d_8205_6ba8,
+            0x2a79_c6b1_760f_230a,
+            0x0269_c007_4842_ac02,
+        ]),
+        pallas::Base::from_raw([
+            0xdea5_6a73_acf7_0dd7,
+            0xefae_24fd_d605_d32c,
+            0x7644_0179_5a72_8a8f,
+            0x29bf_5935_ee3b_cf0d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xafec_fca4_d928_57e0,
+            0xa2ef_4a25_2d8d_462a,
+            0x3f9c_1cd2_7b1f_8c08,
+            0x3f06_e865_ae86_e74e,
+        ]),
+        pallas::Base::from_raw([
+            0x2bca_60c6_542a_5cce,
+            0x2017_a0ca_ddf9_1f45,
+            0x9ee1_6a4f_f103_b9cf,
+            0x3795_5bec_4580_dd2a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8691_e4b4_c1cf_edc6,
+            0xb4f6_468c_8120_fd13,
+            0x05b1_7517_b826_dc89,
+            0x0c61_3568_3cef_710c,
+        ]),
+        pallas::Base::from_raw([
+            0xb119_025f_6be2_1c59,
+            0xe60e_c8d4_cc1a_34da,
+            0x61ba_a8f8_bd7a_34ff,
+            0x1c27_2a98_a433_d3ba,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc775_8f6e_229b_53c4,
+            0x8187_14e3_1fd4_834f,
+            0x9b72_1c14_5292_b1f4,
+            0x2ad0_635e_fd85_69a0,
+        ]),
+        pallas::Base::from_raw([
+            0x359a_b6e7_a119_d83e,
+            0x598f_fc63_1f64_1ef0,
+            0x444e_4b2b_7792_20fd,
+            0x03df_5258_e7c9_9279,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9134_5261_be30_5e2e,
+            0xe6d4_a11d_a37a_2874,
+            0xba1c_281f_b344_e7ec,
+            0x160d_d9d7_58da_88b5,
+        ]),
+        pallas::Base::from_raw([
+            0xdade_8f8f_bbfe_566a,
+            0x2000_6526_5423_f35f,
+            0x0f19_01f2_71a6_22a5,
+            0x32a0_503a_fecb_2320,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0683_5997_1217_55ba,
+            0x2a57_c9d0_8730_2e1b,
+            0x8f07_c57b_3fdc_d076,
+            0x0849_b2af_ec11_13b5,
+        ]),
+        pallas::Base::from_raw([
+            0x13d6_5361_9c27_882d,
+            0x84d9_028a_a60f_5d93,
+            0xf1ee_437b_33fa_62f2,
+            0x0c6f_0de4_3fdb_971d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6e23_4404_9793_ef67,
+            0x7cd5_90e5_4c92_3c41,
+            0x27dc_0ed1_1611_45fe,
+            0x1ce0_4ef4_cfb4_c9b1,
+        ]),
+        pallas::Base::from_raw([
+            0xfd5b_9f8f_ddcf_d367,
+            0x6a5d_c6bd_9379_c9c2,
+            0xc297_9ece_527b_63b8,
+            0x323d_873d_580f_2a72,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x44f9_82c7_c31d_7a89,
+            0x9846_e859_178d_60b5,
+            0xa50a_5197_85d6_70ac,
+            0x0777_8711_9138_56b7,
+        ]),
+        pallas::Base::from_raw([
+            0x8fa1_5093_7040_054c,
+            0xe0af_8de4_84a8_b394,
+            0x6ed9_fa7f_468f_261d,
+            0x26e0_8f4c_2f70_048a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1610_366a_bf41_9b15,
+            0x5495_33a5_f504_49cf,
+            0xff03_7486_34b9_7494,
+            0x2ccd_de83_e509_6a23,
+        ]),
+        pallas::Base::from_raw([
+            0x9724_c725_1ffe_d7b2,
+            0x014a_a2d1_b3b7_bba7,
+            0xed28_d6ab_01bd_03b9,
+            0x04d8_9a55_3cc8_37fd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5053_2dc7_a8cb_ce3d,
+            0x9332_681a_8979_6c93,
+            0x1b1c_f355_e7aa_959f,
+            0x0b04_c461_9897_ec8b,
+        ]),
+        pallas::Base::from_raw([
+            0x91c0_9815_eac2_6003,
+            0xdf44_c95a_8b52_8f05,
+            0xfb9d_53b9_32a2_96c5,
+            0x05f7_a7c0_514d_9481,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe9e8_2ebd_f36a_c3aa,
+            0xd63c_3aba_dde3_84c6,
+            0xa065_4794_bbd5_57d2,
+            0x2af1_74e3_b8eb_6bb4,
+        ]),
+        pallas::Base::from_raw([
+            0xc1b7_ec28_b61c_bc1c,
+            0xa6df_1fd9_3b44_ada5,
+            0x41b4_1fbd_54b7_40e1,
+            0x07b6_b7b5_6200_d6ae,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf809_14b1_c60c_7c25,
+            0xc96e_9d7a_d9d2_0bbb,
+            0x9bf1_14b6_065a_6090,
+            0x07f3_c075_3999_631c,
+        ]),
+        pallas::Base::from_raw([
+            0x6d84_a970_41fb_fe71,
+            0x7367_f8cc_4832_6aed,
+            0x9fa4_b09a_b998_980d,
+            0x10b5_51f4_4081_9d9b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x13b2_211f_8488_06eb,
+            0x8761_a8e5_68bd_a93f,
+            0xfe79_18b0_b2c7_bedb,
+            0x0eb8_9428_e7fa_66e6,
+        ]),
+        pallas::Base::from_raw([
+            0xa4ae_5cd1_74dd_020f,
+            0x0a36_7483_d7bc_ebd5,
+            0x02ee_e479_a589_b49f,
+            0x381f_443f_f703_3d02,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbfe9_7299_65ea_ab6c,
+            0x91d7_c643_d196_223e,
+            0xc1c4_1ee0_2fba_0ee2,
+            0x0391_a582_eed5_9211,
+        ]),
+        pallas::Base::from_raw([
+            0xf6f5_ac50_5fbe_870a,
+            0x4532_ce4f_a3a9_10b7,
+            0x2e04_95dc_076f_edfc,
+            0x2566_6899_b070_c78e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x59d3_31f8_f73a_4699,
+            0xb89e_a133_6b3e_ec84,
+            0x67bb_8592_e68f_95da,
+            0x0917_436e_03ed_fafc,
+        ]),
+        pallas::Base::from_raw([
+            0x2728_c13f_7768_6f7e,
+            0x2615_d6e8_f42a_f8eb,
+            0x5cc5_df77_1ffb_5726,
+            0x00a0_eb9f_912d_b497,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x45a5_12f7_5fc1_61de,
+            0x0fc6_e344_3c96_5554,
+            0x4fea_37c5_2155_ebd0,
+            0x07c2_cfac_599f_e891,
+        ]),
+        pallas::Base::from_raw([
+            0xd32a_935d_3c0c_02bb,
+            0x6263_1e68_432b_5e9c,
+            0x072c_bed2_1f3d_b393,
+            0x28ed_e749_83dc_4b16,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x06de_4839_8da8_baee,
+            0x68cc_20a7_0293_f4e0,
+            0xde3f_a9e2_2477_7654,
+            0x3fd6_fa54_176a_beb5,
+        ]),
+        pallas::Base::from_raw([
+            0x5353_f59f_e5a7_9799,
+            0x1782_1d05_f83b_d46d,
+            0x426d_078d_a05e_5fc3,
+            0x278e_e806_7443_d6e7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc062_01cb_8329_3f63,
+            0x2612_bb03_e6c3_5ca8,
+            0x6cf4_e8c9_485f_b2b2,
+            0x1df7_2e99_3570_d89e,
+        ]),
+        pallas::Base::from_raw([
+            0x78a4_d3c2_1b6d_70a7,
+            0x14d8_c82f_b0c1_2f69,
+            0xf678_2daa_4988_4ae3,
+            0x35d2_eef4_df12_fd4f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb4ae_fdcc_23b0_19ed,
+            0xac89_a1b7_c189_9999,
+            0x3c5b_8165_4f7a_0a2d,
+            0x0ab3_7d69_1765_1d3f,
+        ]),
+        pallas::Base::from_raw([
+            0xa130_f549_d03d_7b10,
+            0xfe3e_fba5_af76_b8c7,
+            0x479c_b292_d515_4d68,
+            0x08ed_b127_7cd1_5737,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7250_3581_4ad1_9e66,
+            0x9fad_6a01_94a2_09c1,
+            0xea98_3f3f_0138_1a13,
+            0x17b3_e97c_781f_885b,
+        ]),
+        pallas::Base::from_raw([
+            0x871a_12ed_525d_b6df,
+            0xadc2_9db0_5909_a3d7,
+            0x9807_df73_70cc_dace,
+            0x31cc_cbe8_16e8_1804,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x42b6_c7a3_8516_301a,
+            0x6485_544d_58aa_3fec,
+            0xe105_5ca4_0c25_2a01,
+            0x3ced_acc5_ade8_6885,
+        ]),
+        pallas::Base::from_raw([
+            0x4de5_edcc_e563_c20c,
+            0x0879_53b7_6a36_36ea,
+            0x1eda_cf9c_e6ca_a3a3,
+            0x3f82_b415_4198_b3b1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2781_6103_15f5_7658,
+            0xfcc0_b779_a51d_a582,
+            0x99df_bff3_92f2_e1d7,
+            0x1e09_2f1e_a84d_ae01,
+        ]),
+        pallas::Base::from_raw([
+            0x1e6f_2bc5_8ea2_2080,
+            0x8ed9_b15d_0399_5f75,
+            0x727a_eba9_910e_20af,
+            0x38c6_dc55_925a_cbb1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x91fc_bc05_db22_2747,
+            0x25bc_36c1_336b_0c2c,
+            0x4df4_c949_dcfe_5263,
+            0x2eec_785b_ec90_be5a,
+        ]),
+        pallas::Base::from_raw([
+            0x4d7e_fc93_c1b1_5b65,
+            0x2def_facc_0fdc_986b,
+            0x1250_98ef_caa3_a74d,
+            0x0624_77fe_5983_41c1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb63d_7e66_55d5_e3ea,
+            0xfb16_b4cb_6165_cc87,
+            0x36d2_6c4d_6ae2_1690,
+            0x166a_c76c_81f8_449d,
+        ]),
+        pallas::Base::from_raw([
+            0x82e2_3968_9388_5c2b,
+            0x1b87_9d98_85df_6a30,
+            0x5407_156d_69ad_ce04,
+            0x0906_bd2d_e5cc_fafa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x737c_cc41_9796_7823,
+            0x1007_28e0_1f6f_ec97,
+            0xfc9b_08d3_ba9e_2d24,
+            0x06f5_aae5_2940_c965,
+        ]),
+        pallas::Base::from_raw([
+            0x28f1_62cd_2885_43be,
+            0x3f9e_680d_fcad_3865,
+            0x8661_0321_76b3_13ce,
+            0x14bd_d4cd_abb9_372f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6c25_b3d7_e74e_4edf,
+            0x67fb_ae65_2ead_0439,
+            0xc182_0837_bf0b_8a51,
+            0x3bc9_ce19_4df3_7d84,
+        ]),
+        pallas::Base::from_raw([
+            0x6a05_2e74_98de_40b8,
+            0xca78_a073_4c6d_7fc7,
+            0x5a0a_a126_7469_ec62,
+            0x2f17_851c_850f_c7ed,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3317_c03a_fd91_fc0d,
+            0x380d_9ecf_fea8_a93c,
+            0x7ecd_e1bc_3a9f_b86e,
+            0x1770_3f7b_98a4_afe3,
+        ]),
+        pallas::Base::from_raw([
+            0xc54b_5020_c9a0_f2c7,
+            0xc66b_05c3_adef_c98c,
+            0xf38d_a7ae_8e47_7d10,
+            0x3784_0c9a_9c1b_eff5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5093_7efe_a739_821e,
+            0x7ff8_6ca2_faa1_106e,
+            0x252a_974b_7e9d_2cf1,
+            0x1b69_d19c_d62b_b010,
+        ]),
+        pallas::Base::from_raw([
+            0xc16f_5a7f_12a2_844e,
+            0xae53_d0bb_8ead_5714,
+            0xa3c7_0af5_6666_4f67,
+            0x3ecb_b98a_9351_1276,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbdc5_4853_e848_f0e9,
+            0x1b28_67be_1e77_2485,
+            0xe0f5_1554_daca_9e94,
+            0x1186_da13_89c4_b670,
+        ]),
+        pallas::Base::from_raw([
+            0x1651_3d05_c776_2b00,
+            0x20b2_e3a4_b95f_872b,
+            0xbf7c_eb39_15fc_1332,
+            0x0423_5acc_ac90_496a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x01b0_7e5d_d856_259f,
+            0x7f43_208f_a155_b0c1,
+            0x8928_e815_2193_8b73,
+            0x178d_9714_a538_7eac,
+        ]),
+        pallas::Base::from_raw([
+            0xfcb4_658a_4c20_46bb,
+            0x6bc7_e482_a235_c77f,
+            0x44e8_f7b0_3fb7_88ff,
+            0x3ce7_7772_6e04_3742,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x55ee_eaa0_d43e_91da,
+            0xc90e_6024_78ca_5f27,
+            0x6c2a_ec40_cbb6_e051,
+            0x0bff_365c_4a48_be7c,
+        ]),
+        pallas::Base::from_raw([
+            0x145a_ef04_d8ea_8dc9,
+            0x2d56_9b48_e5c8_414d,
+            0x781c_943a_068f_fe73,
+            0x3361_9f38_967a_b97b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xacbe_71a5_7996_2bd4,
+            0x3a08_766b_9cb9_e72b,
+            0x1588_d82c_533d_b065,
+            0x30d6_c1d1_7767_c3e6,
+        ]),
+        pallas::Base::from_raw([
+            0x5d52_0dac_efe4_6e17,
+            0xd87a_651f_6eab_7d3f,
+            0x6a75_591f_324e_b6db,
+            0x1a5d_9a98_7774_d8e4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0225_72e9_ae01_ff6b,
+            0xce5a_1ad2_ef36_212b,
+            0x14c1_0f42_da3d_b3ad,
+            0x2267_625e_16a9_0f0e,
+        ]),
+        pallas::Base::from_raw([
+            0x7bf4_5dd3_d6d6_71ec,
+            0x01bb_0a02_1198_ccac,
+            0x15d0_34ca_24fa_48fa,
+            0x19a8_8c5b_dd76_c0e2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfdd9_7cc1_34fa_1e2d,
+            0x3714_b775_9ccf_8134,
+            0xb76b_7ae3_d982_6b77,
+            0x1ecb_f631_e1bd_91a2,
+        ]),
+        pallas::Base::from_raw([
+            0xb611_00ce_ead1_4ede,
+            0x9f64_dc5c_9bf7_633c,
+            0x315e_4d26_f06e_c2e6,
+            0x024a_535a_5088_6f26,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9c75_4f1e_74b6_2341,
+            0xc229_dbf2_cfa3_2ca1,
+            0x8012_a006_e1b9_9678,
+            0x289a_7df4_9f8e_2205,
+        ]),
+        pallas::Base::from_raw([
+            0xa292_86b7_14cc_854c,
+            0x63c0_5a80_bab8_b239,
+            0x77bc_a95b_3393_16df,
+            0x0aa1_78e8_67c4_6e06,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6983_e305_abeb_b0fc,
+            0x4047_8611_cde4_c624,
+            0xcdee_dbfe_557f_b7ed,
+            0x04e8_1c14_8e02_18d1,
+        ]),
+        pallas::Base::from_raw([
+            0xe556_8d33_21a8_0629,
+            0x97f8_66e9_f2bb_ae53,
+            0xcea5_b64e_5002_2bbb,
+            0x1a34_52e0_acea_f51a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3405_d717_8cc7_2c52,
+            0x28a7_a504_399a_1e1b,
+            0xf170_e239_f7e9_c844,
+            0x1cd3_6395_bb69_dc88,
+        ]),
+        pallas::Base::from_raw([
+            0x675b_0b51_04e6_8e2d,
+            0x187f_6ecc_1ded_2163,
+            0x1a53_421e_85e3_7079,
+            0x158a_e3c7_752b_7751,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5500_883e_12a9_cfd7,
+            0x9cd8_0402_12bd_4753,
+            0x1f75_8954_f62b_dad5,
+            0x0bbb_fa9c_c2fe_d2d0,
+        ]),
+        pallas::Base::from_raw([
+            0x19e6_d909_4824_a28d,
+            0x8cd6_c4c0_9883_3e51,
+            0xb646_194f_becc_6f59,
+            0x3420_e2ec_d734_13e5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x80a9_e5e3_1610_f69e,
+            0xdd9c_4a92_1056_8e20,
+            0xf86c_aeb6_c85c_4356,
+            0x31ad_dfcc_5e4b_700d,
+        ]),
+        pallas::Base::from_raw([
+            0xe9ab_d914_79e1_df04,
+            0xb7f0_23f3_36f6_74dc,
+            0xa9d2_3371_7f13_8bb6,
+            0x1f15_2617_cb34_976f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x960d_00a3_fb22_5078,
+            0x9988_7156_0e61_3f5f,
+            0xb2ba_af97_cca6_a3eb,
+            0x2e7f_19e7_c704_b5fd,
+        ]),
+        pallas::Base::from_raw([
+            0x57bb_469f_0dd9_b209,
+            0x9c40_8186_c84a_bd26,
+            0x5413_30b7_2445_9760,
+            0x3ea7_3777_ee4f_b850,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6241_5e2d_be88_0053,
+            0xe65d_815b_0595_5f7a,
+            0x6b5b_e7ed_43e0_5474,
+            0x29f9_ef3c_013d_20ff,
+        ]),
+        pallas::Base::from_raw([
+            0x645c_e074_cff0_711a,
+            0x9b08_6e5e_0ae6_30dc,
+            0x1765_5ee6_7ff2_68df,
+            0x2830_190f_e6ea_62a9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf9a6_568b_9c61_4281,
+            0x4bf3_f37b_d546_d5ce,
+            0x47fc_7710_3474_7b14,
+            0x3a46_2aa4_f76a_f9ef,
+        ]),
+        pallas::Base::from_raw([
+            0x480d_19d7_aeef_4c79,
+            0xab60_e175_aefb_931d,
+            0x4d55_85d0_c71f_a5b4,
+            0x0a96_8e62_97d5_9535,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe436_903f_24ac_9df9,
+            0x9300_ddf0_1da8_17a6,
+            0x123e_6839_b4bc_932a,
+            0x2718_8488_35fd_d77f,
+        ]),
+        pallas::Base::from_raw([
+            0x52e4_7abd_9b09_46bc,
+            0xc085_3ece_0feb_e4a5,
+            0xf3f8_35c8_347e_995d,
+            0x19de_e913_2cc0_a224,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa453_83a9_b4e6_a758,
+            0x9015_00b5_23c1_e447,
+            0xe85e_c0c8_8626_5736,
+            0x1461_a8e6_40c8_f85a,
+        ]),
+        pallas::Base::from_raw([
+            0x501d_08ea_fd72_b2c8,
+            0xeb63_ec79_4f6d_f403,
+            0xf1e3_f250_1c53_0d19,
+            0x062e_d759_693d_19d8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa2c4_a38d_b249_fc75,
+            0x8ae4_0721_77c7_8590,
+            0x03dc_4b04_8d5b_9ea5,
+            0x0d89_0d38_e803_317d,
+        ]),
+        pallas::Base::from_raw([
+            0x3e10_ee60_9358_ada7,
+            0x3509_48eb_0862_d70e,
+            0x75aa_80df_185a_8c1c,
+            0x37e7_c380_d027_a877,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaafd_a565_f09a_06cf,
+            0x91e9_f0c0_b668_00eb,
+            0xba89_4a61_9a9a_5deb,
+            0x35ab_6c2f_a72a_67a5,
+        ]),
+        pallas::Base::from_raw([
+            0xdd34_5830_bbc1_a26f,
+            0xc3d2_140c_6fc3_9747,
+            0x6580_4aaa_a4a3_f62c,
+            0x2c8a_da2b_1b04_9e5f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x641e_246a_98ad_630f,
+            0x72ab_91de_19b3_2e2c,
+            0x5c92_774b_2169_b661,
+            0x1e1a_c543_70ce_61cd,
+        ]),
+        pallas::Base::from_raw([
+            0x9cb2_3ff5_285b_8448,
+            0x9bb4_a42b_f331_6727,
+            0x62dd_a513_c86e_4720,
+            0x2138_a0f0_4fd0_ae85,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x05ff_8a30_31c8_c2c0,
+            0x320c_4e8a_b37d_13af,
+            0x5fe1_6192_7de0_0a62,
+            0x3239_6eec_c899_df01,
+        ]),
+        pallas::Base::from_raw([
+            0xf86a_5aa7_254c_db0b,
+            0xfff8_6343_7c50_4001,
+            0x907e_ce31_13c4_2834,
+            0x0083_9120_fef6_4f04,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0da3_5615_e80b_7105,
+            0xcd0d_35c7_83f5_ea68,
+            0x1956_8f17_fd14_c784,
+            0x3844_169d_8e21_5b80,
+        ]),
+        pallas::Base::from_raw([
+            0x1fcc_6ff4_1c9b_ed51,
+            0x34e5_9481_5dd7_ec6b,
+            0x0ba0_d316_7cad_7c5d,
+            0x3ec0_c83c_398a_638e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x30e3_dd2a_caa8_9e23,
+            0xca56_24c7_a921_34aa,
+            0x569a_4c5d_be62_0c0a,
+            0x0bb5_f435_f064_07e1,
+        ]),
+        pallas::Base::from_raw([
+            0xdfe8_e197_5e22_f53b,
+            0x8dfa_bec5_7137_b1fb,
+            0x01e1_9f98_b685_ae1a,
+            0x28c1_1490_0528_c2c1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3dcc_f7ce_0ad8_e4f8,
+            0x588e_312e_199e_763b,
+            0x8c6a_a52f_0325_558d,
+            0x29c4_ba69_c672_f4f3,
+        ]),
+        pallas::Base::from_raw([
+            0x19ec_f218_7171_52d7,
+            0x06ee_7a55_fa38_ba4e,
+            0xd8f0_a4f2_6c3c_fd95,
+            0x3ef7_61af_4dbb_7f0c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1f0f_baad_04bb_5f75,
+            0x4aef_02b6_56f4_e2f0,
+            0x4c89_9bff_b8a0_8ea4,
+            0x3f4e_7e2c_a1c7_708d,
+        ]),
+        pallas::Base::from_raw([
+            0x02f6_7a10_1c9c_9bbf,
+            0x05f3_0cdb_8ba2_8ad6,
+            0xc13a_c49a_1560_a8e2,
+            0x1534_bedb_9435_5918,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfa87_6dff_b810_be23,
+            0x72c7_0ce1_e075_2041,
+            0x07c8_bf38_511f_3cef,
+            0x1a6c_5f3e_ed1b_e25b,
+        ]),
+        pallas::Base::from_raw([
+            0x51dd_c0ae_85fa_65b0,
+            0x835b_4dca_4cc3_3f47,
+            0x1bd6_02bd_221a_6807,
+            0x32c2_3d1a_8a90_ae9f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0eed_532c_a114_960d,
+            0x6983_2d07_9745_030d,
+            0x0cb8_8c0e_c597_8792,
+            0x3ed4_46f3_babd_8fbc,
+        ]),
+        pallas::Base::from_raw([
+            0x2fa7_9562_7ce7_6ebb,
+            0x7e21_5019_7c86_5e0b,
+            0x6d0e_6986_0b16_2609,
+            0x17ed_a803_03d2_9dbd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5add_f07f_2875_4f6e,
+            0xded2_1019_ce38_6e69,
+            0xba11_5d0e_d146_4546,
+            0x1cb8_adf5_6bf7_d57b,
+        ]),
+        pallas::Base::from_raw([
+            0x74b3_43e7_3067_5c9f,
+            0xaabe_1a6c_c038_250c,
+            0x8ef9_5802_7c5c_eb68,
+            0x26f7_2308_b634_cbf3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe697_9cd0_2e2a_09a3,
+            0xbfb4_1ab4_b141_08b6,
+            0x290d_dd81_2cb0_5761,
+            0x2a6c_642d_8d10_e582,
+        ]),
+        pallas::Base::from_raw([
+            0x8536_8a2a_e13e_84a4,
+            0x9ece_6cb2_499e_86d2,
+            0xa6d1_0304_1f4e_6811,
+            0x1749_3586_294f_c00b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd000_f933_b288_c9ec,
+            0x0008_fa27_b1fc_f86c,
+            0x77b8_dc36_5ede_0af6,
+            0x289d_ea2d_59eb_3f26,
+        ]),
+        pallas::Base::from_raw([
+            0x6ee9_9aad_2b6e_4dfc,
+            0xa357_f9fb_63b5_5c8d,
+            0xb99d_03c4_98a8_d710,
+            0x2cfd_b980_9dc3_4f19,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4a3f_f24b_fabd_5cdf,
+            0x7415_5bb3_3633_20e8,
+            0xf605_add9_99a6_a3b6,
+            0x0365_39f1_3da5_3f58,
+        ]),
+        pallas::Base::from_raw([
+            0x4aa5_e910_0459_c408,
+            0xe4df_d4e4_dbfc_3099,
+            0xece4_6d1e_47e1_8bae,
+            0x2571_fbf8_3aaf_0f52,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc08b_755a_6fa6_56f0,
+            0xac17_cbd2_3558_19a6,
+            0x0e1d_63a9_76de_d59f,
+            0x0f0d_bacc_068f_cd71,
+        ]),
+        pallas::Base::from_raw([
+            0x9ab6_8817_d366_c236,
+            0x7ada_4276_3f88_5fd7,
+            0x083d_de4f_9fe3_44ec,
+            0x33de_e193_caf7_4d09,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3595_8bfd_2887_b46e,
+            0x5f38_9101_f1be_4e28,
+            0xf9d1_acba_99ed_08d5,
+            0x34ae_a666_fa73_373e,
+        ]),
+        pallas::Base::from_raw([
+            0x8550_386d_b269_6cc2,
+            0xace0_f26f_8504_9ec0,
+            0x8e1e_d46d_9d3d_5454,
+            0x0978_82d8_5b44_aeee,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1337_19a0_5435_a760,
+            0xeb59_3ab7_0fce_fad0,
+            0x066b_89a8_bf0d_853a,
+            0x1a05_df20_1bf7_016e,
+        ]),
+        pallas::Base::from_raw([
+            0x69f0_568a_7e88_6ac6,
+            0x90d1_fb1a_ccb8_880d,
+            0x81f3_cb9b_0f87_03f4,
+            0x28e5_0389_a936_6ecf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x50bb_3f29_64dd_d715,
+            0xd5aa_f9a6_dc3f_7706,
+            0x6e6d_1433_c49c_3c3d,
+            0x1a87_0e90_b006_4440,
+        ]),
+        pallas::Base::from_raw([
+            0x8f4a_8f0d_9ffe_2a67,
+            0x3df7_ff37_8b3d_e8b2,
+            0xe200_ac50_b2e5_224a,
+            0x2ea8_be75_625f_19d6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9352_f3ae_79df_84a6,
+            0xd821_c76a_b91e_7cd2,
+            0x1516_8b7d_afe5_369b,
+            0x39b2_d1b3_ed5f_2801,
+        ]),
+        pallas::Base::from_raw([
+            0xe3c1_c8d3_4ac0_cded,
+            0x2467_48bb_7fb8_12b2,
+            0xf18d_46f6_9a23_e9ca,
+            0x12b1_73bf_3cbd_5773,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d92_cb07_476a_c74d,
+            0x9179_b82a_91e5_9ea2,
+            0xd5fc_3ab3_d692_f5e0,
+            0x3dee_efd0_00c3_3a50,
+        ]),
+        pallas::Base::from_raw([
+            0xce37_7044_fa32_43cd,
+            0x23ea_04ca_a975_a183,
+            0x3aa3_b02e_ec62_b871,
+            0x04a9_2111_c558_8ef0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdc97_a102_7da5_665f,
+            0xa1bb_5b5d_cefd_5818,
+            0x7b4e_1a76_62cd_3571,
+            0x3aa3_d99b_5276_2d70,
+        ]),
+        pallas::Base::from_raw([
+            0x94bd_7936_fec3_7759,
+            0x7216_4b55_232e_5a3c,
+            0x756b_e2a2_52bd_b271,
+            0x33f2_bb74_d656_6f3b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc8fd_7256_d6dc_d9b9,
+            0xca03_c9d8_7f65_7f5e,
+            0xfd39_43fa_2bf6_46db,
+            0x22c1_594f_6399_a591,
+        ]),
+        pallas::Base::from_raw([
+            0xa3d3_1b89_58be_066c,
+            0x3776_df4c_4371_d751,
+            0x6b4f_1dcd_0000_7a87,
+            0x3a6d_83e9_a433_e219,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2bac_92ca_749d_8ca1,
+            0xcdff_b76a_d983_64c1,
+            0x4a71_9e43_074b_e266,
+            0x211d_199f_4af1_3d31,
+        ]),
+        pallas::Base::from_raw([
+            0x615c_f375_7d8a_3f72,
+            0xe271_0a4e_2b25_e0cf,
+            0xe07e_62f8_a9e1_180f,
+            0x3668_5169_d28f_4663,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5026_b92b_a025_7211,
+            0x0f61_be9a_2a03_558b,
+            0x6eb5_4fce_c558_57ce,
+            0x3193_20a0_380e_6bd7,
+        ]),
+        pallas::Base::from_raw([
+            0x6fe5_1d43_554a_f6a8,
+            0x6ff0_48c0_b9c9_f972,
+            0xb6f3_7bca_07a3_0477,
+            0x01b4_080c_f397_6ea1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0c85_14b2_21c5_bf83,
+            0x6a65_f7f8_f786_f1e3,
+            0x3c45_3a2c_865b_f046,
+            0x18e2_8c3f_fbc1_e707,
+        ]),
+        pallas::Base::from_raw([
+            0xb311_7e90_19e0_60bd,
+            0x682c_b029_85d5_f279,
+            0x2d07_1839_acf3_3c80,
+            0x24fb_be5a_09e4_252a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3f38_1349_fd30_13dd,
+            0x50a3_3f2c_64f9_acc4,
+            0xbdfc_c29a_eaae_4852,
+            0x08cd_e7f1_737e_4d1f,
+        ]),
+        pallas::Base::from_raw([
+            0xc9eb_95f1_0d2e_cff9,
+            0x2e16_091e_e8fa_7cb8,
+            0x2338_d545_b2b1_87df,
+            0x2f9c_01cd_934a_39a5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2f4f_2486_fa98_dd32,
+            0x5ab3_50b9_9429_ab02,
+            0x4d00_5b08_67f9_fb09,
+            0x3779_1b28_6244_fb4c,
+        ]),
+        pallas::Base::from_raw([
+            0xf37a_1b41_ad70_19ed,
+            0x3d58_6291_0404_eff3,
+            0x3710_9d64_690b_7131,
+            0x323d_fe2b_648a_0a01,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2c99_1b63_424c_90ac,
+            0xcde0_e148_9201_19b1,
+            0x6b0a_cdcd_a94e_23dd,
+            0x0a83_ec85_5467_a25b,
+        ]),
+        pallas::Base::from_raw([
+            0xe2ae_b456_e029_5ff5,
+            0xbbf2_157e_95d4_0f9e,
+            0xfcf3_8385_5286_2123,
+            0x09d4_c6b8_6321_1860,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5a98_269b_b68a_dd6a,
+            0x1efe_b941_4639_b22a,
+            0x3571_1c04_46ae_622b,
+            0x0724_0c4e_61e2_c404,
+        ]),
+        pallas::Base::from_raw([
+            0x4ef2_32c5_b9e0_bf79,
+            0x2849_2c6d_82b9_4679,
+            0x6dc9_c162_d595_5ace,
+            0x23a1_46c9_cb46_7e4b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0ea6_e467_1688_5744,
+            0xd73a_c7a9_3c06_0f51,
+            0x1b46_3eef_0911_0ff0,
+            0x25f5_1a1b_8b2b_15b0,
+        ]),
+        pallas::Base::from_raw([
+            0x0e94_24d7_d847_cff0,
+            0x9eca_1c26_c8d3_4d22,
+            0x3e7c_44f4_a071_358a,
+            0x02e0_3e55_9e85_2acc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfaf6_e963_4f72_548c,
+            0x75ba_6678_06cb_3018,
+            0xdd5c_4dc1_f6a6_1ed0,
+            0x358a_aa4a_969c_7d11,
+        ]),
+        pallas::Base::from_raw([
+            0x7192_b88c_0b41_26f7,
+            0xdcbf_5faa_5173_d672,
+            0x2844_3f7b_d7c5_386b,
+            0x0326_622d_0d54_8882,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf31d_8620_1649_f08d,
+            0x1fc2_50c9_c62e_1cdb,
+            0x3fa2_7d7f_c12a_308b,
+            0x087a_7698_3f2b_40d6,
+        ]),
+        pallas::Base::from_raw([
+            0x1dfe_55f8_f11a_cf1f,
+            0xee33_c9fd_9995_34ef,
+            0xc306_776a_68aa_2318,
+            0x2ac3_5afb_37f0_64ac,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3ade_cfe8_e5e3_3497,
+            0x6c41_930f_374a_cbed,
+            0x12b0_f864_c7a8_8ad8,
+            0x370f_dfb0_97f4_2558,
+        ]),
+        pallas::Base::from_raw([
+            0x7220_b1e4_1ab5_cf99,
+            0x1632_92de_779c_623c,
+            0xb034_0022_4b4a_86e7,
+            0x309b_afa2_6ef2_925b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3406_5012_f9c0_5127,
+            0xc828_f419_9900_4b75,
+            0xf6d7_a11d_f480_e3f3,
+            0x2d33_2d46_fc42_f207,
+        ]),
+        pallas::Base::from_raw([
+            0x2e46_6250_9e68_6ee3,
+            0xabfd_de7c_df9e_5e25,
+            0xfd57_0e95_4b02_75d5,
+            0x2477_ef02_28ea_9a13,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbc3e_e22f_76ca_58be,
+            0x3ea8_77d8_d59b_c50b,
+            0xa88b_9b65_778b_d746,
+            0x3ac6_7681_a682_1563,
+        ]),
+        pallas::Base::from_raw([
+            0x012d_26a1_75a2_a60c,
+            0xd293_1675_5b9e_520e,
+            0x7bb3_81b2_f90a_0804,
+            0x33a1_bb0d_70de_7a89,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb0ca_c9ca_8444_ee90,
+            0x968e_19ad_ff27_1d61,
+            0x3f26_3e09_835a_f66b,
+            0x05bd_71f7_da1c_0c64,
+        ]),
+        pallas::Base::from_raw([
+            0x61e9_dece_6f85_2582,
+            0xe5d1_17ee_5df5_c9f5,
+            0xa3d6_5b5f_bc5d_8147,
+            0x3b58_829c_1b3c_754e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x39e8_9116_b59c_ef80,
+            0xe8ee_3f15_868d_9a99,
+            0x4b32_6add_a5d5_8444,
+            0x14fe_9402_9ff7_9f66,
+        ]),
+        pallas::Base::from_raw([
+            0x8f66_4020_0012_b5cb,
+            0x6fcc_c979_1537_fa13,
+            0xd19e_3ecc_386a_8282,
+            0x162c_c785_6d5c_74dd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdcc0_2e8e_07fe_88af,
+            0xbd3b_2a17_ffae_f834,
+            0x0c6f_3298_640b_78d5,
+            0x34a4_a683_e010_cf56,
+        ]),
+        pallas::Base::from_raw([
+            0x63f3_abee_7273_ea33,
+            0x0537_702e_040b_92a5,
+            0x547d_6ec3_8dd6_3bc9,
+            0x0064_5b12_758a_1545,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xee8e_7e91_b30f_5175,
+            0x9118_328b_98b1_2a4f,
+            0x0c6b_7d43_ce19_2ef5,
+            0x2683_6545_f707_77c2,
+        ]),
+        pallas::Base::from_raw([
+            0xd798_780b_8fd5_f829,
+            0xc468_a05e_0278_eba4,
+            0xb7fa_f13c_0064_7ac1,
+            0x322a_6aee_3ba4_d176,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1e3b_4dd6_6189_13dd,
+            0x248b_f2dd_da95_8f94,
+            0x8216_4826_97e1_1826,
+            0x21ac_9398_a5e7_dcec,
+        ]),
+        pallas::Base::from_raw([
+            0x772d_8d75_5b4c_3ff4,
+            0x7677_d0f9_ffdf_bce3,
+            0x10a3_b808_a28e_401f,
+            0x3f6e_5b46_b349_c86e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5585_d887_f1be_367c,
+            0xaf07_cc5a_a53a_b659,
+            0x923e_92e1_35a8_1746,
+            0x3bf2_268c_f24d_f183,
+        ]),
+        pallas::Base::from_raw([
+            0x6fe6_0473_5e78_a74d,
+            0x39a1_9091_b746_8447,
+            0xa594_c45e_b7ed_cbeb,
+            0x0bc9_13da_4cca_ecc3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1dd4_2c2c_c537_4903,
+            0xa6cd_7de7_d439_ae61,
+            0x15db_897f_3b7a_4b07,
+            0x385c_81f8_ce51_3dd7,
+        ]),
+        pallas::Base::from_raw([
+            0x0ed8_0b1c_199e_8dc9,
+            0x79e2_6722_5b1d_39ed,
+            0x8b04_7941_6c0b_072f,
+            0x1507_a637_5325_d934,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaf31_86eb_84ad_4635,
+            0xa779_6331_ccd3_0336,
+            0xf128_6ce2_c67c_671f,
+            0x00c1_b469_5cb2_7c0a,
+        ]),
+        pallas::Base::from_raw([
+            0x7c4f_be0e_1cae_a3da,
+            0xc17b_1bad_0248_be18,
+            0xbddd_f903_c50f_6c61,
+            0x2f3f_845e_eaa9_03e7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7338_6610_264b_147f,
+            0xe78a_eae6_e018_7005,
+            0x909e_4f4d_6e92_b8fc,
+            0x20ec_33c4_98b4_3f28,
+        ]),
+        pallas::Base::from_raw([
+            0x29a8_eaa1_5507_3eea,
+            0x729d_227c_2a31_1b0f,
+            0xb154_9c99_6dee_651b,
+            0x3060_2ac3_8a24_17f5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3fa1_0f32_fc38_d1e7,
+            0x1130_716c_d00c_2e12,
+            0x8b7b_e7ee_bb9c_cf07,
+            0x03dc_0d4e_7c25_b4c8,
+        ]),
+        pallas::Base::from_raw([
+            0xcc37_2d2f_1cf0_494e,
+            0xf281_1971_693f_a7cb,
+            0x71c8_5723_0112_d789,
+            0x0b3a_4062_de68_d35a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2e57_965d_8fe6_3cf5,
+            0x1e7d_0375_96cf_b42f,
+            0xe4eb_acfa_e071_f221,
+            0x18c8_30aa_25a9_b96b,
+        ]),
+        pallas::Base::from_raw([
+            0x1e35_c955_b145_dba5,
+            0x38bf_a239_4c66_8c55,
+            0x2b79_b6c0_0ae1_44e5,
+            0x3306_70f2_2a1a_de18,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0337_c17d_8089_522c,
+            0x8cf3_b7f9_e509_1e93,
+            0x30c2_0095_5bf9_2882,
+            0x1803_6e94_3474_308f,
+        ]),
+        pallas::Base::from_raw([
+            0x83ac_e960_14ab_f3bb,
+            0x39e9_4c89_6758_a248,
+            0x3b82_4eaf_babb_2278,
+            0x05fc_dc8a_770e_abbe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d15_af9f_a6dc_11ec,
+            0x9688_b4f7_fa83_b756,
+            0xa900_9592_c556_2c12,
+            0x3131_f9b2_c23e_76a9,
+        ]),
+        pallas::Base::from_raw([
+            0x6377_bc0b_418d_17d1,
+            0xbdc7_c62f_a1a8_205e,
+            0xb808_e58c_dc75_27e1,
+            0x3ce3_9a6a_42ea_0aa0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x919c_3661_1b95_aae0,
+            0x21c0_adf5_8570_1f29,
+            0x15d8_a824_0a43_7e95,
+            0x2487_0e7f_975b_e250,
+        ]),
+        pallas::Base::from_raw([
+            0x2b8a_f942_d325_4f8f,
+            0xb8bf_f293_9d0e_2803,
+            0x2b36_1401_fde5_3611,
+            0x095f_973d_1e25_6fe0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x25b5_ca69_afd7_aff7,
+            0x5731_761b_b667_965f,
+            0xf0db_8000_e078_d5f6,
+            0x105f_d651_9a6f_486c,
+        ]),
+        pallas::Base::from_raw([
+            0xf6ed_7c18_4edf_3a25,
+            0xf716_d2fc_b54c_26c1,
+            0x8303_3072_def8_c70a,
+            0x3c72_43cc_c6f9_d8a8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd29a_f540_a1af_2913,
+            0x86f8_1775_ed00_f09a,
+            0xc978_728d_7996_fcb6,
+            0x15aa_c4cf_5c52_2bcf,
+        ]),
+        pallas::Base::from_raw([
+            0xccad_8b65_5bf6_65a2,
+            0x197e_4429_fe3d_8a0a,
+            0xbc26_5a82_cbc8_f7ef,
+            0x0963_7be9_0c33_cc7a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x75dc_37ce_9ca5_f163,
+            0x3ce4_4f1c_f801_0d67,
+            0x1933_916f_d304_ae70,
+            0x09c9_2882_3da7_3ed0,
+        ]),
+        pallas::Base::from_raw([
+            0x141a_785b_eb35_8d29,
+            0x10a1_7521_6bb8_ca36,
+            0xcd51_d77e_9964_8226,
+            0x1d96_15b1_2538_b56c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7c71_c1bd_6f57_54d3,
+            0xc9a0_533d_95df_b16c,
+            0xc945_1160_48eb_86c6,
+            0x05a8_f8f3_8c44_0d2e,
+        ]),
+        pallas::Base::from_raw([
+            0x11d8_5995_cf88_f460,
+            0x44eb_7f8a_f7bb_3f42,
+            0xbe8c_bb43_79ee_ea5b,
+            0x02dc_b98f_ed50_2f86,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4aa2_aebe_4d5d_a915,
+            0x3425_6cb2_b933_62ec,
+            0xd229_ad1e_6a44_6607,
+            0x35fd_e2b2_e65f_cbf8,
+        ]),
+        pallas::Base::from_raw([
+            0x9a36_e5cc_e10a_7cc0,
+            0x7d41_adbf_6442_8e9e,
+            0xc64a_aab0_e77d_ddc3,
+            0x28b6_ce44_dd17_b086,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1729_f03e_c757_de09,
+            0x8714_d598_3cae_ddd6,
+            0x46bc_981b_76f8_5cbe,
+            0x1b7c_7a5d_98d4_34b6,
+        ]),
+        pallas::Base::from_raw([
+            0xfb61_8881_0f97_fafc,
+            0x769e_1253_4744_7d00,
+            0xe166_94e5_6b37_ac66,
+            0x0e0d_592c_aaa4_40d6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb477_691c_7b9a_4e74,
+            0x1c61_eaa0_b273_998a,
+            0x9295_2b04_a869_8738,
+            0x18ae_d1c7_f94d_31cb,
+        ]),
+        pallas::Base::from_raw([
+            0x63b4_a102_91a0_3aa0,
+            0x8456_6a59_cd00_e2e8,
+            0xd9ac_8f76_f4fb_99ea,
+            0x249a_c33c_1f19_006c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa611_c5c5_9dd9_c129,
+            0xb449_431e_460c_3b9a,
+            0x8aca_28de_50ac_6407,
+            0x2be1_f2a6_a7a7_ef47,
+        ]),
+        pallas::Base::from_raw([
+            0xa14c_46c9_87ca_1f52,
+            0x40fd_f4bb_a4f9_9362,
+            0x99f2_8ce2_fff0_5d47,
+            0x2339_e672_20fd_6223,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb07e_39ee_d553_19df,
+            0x2e2e_a2b6_cd63_7b9e,
+            0xb230_1c5c_5876_4d85,
+            0x3101_8876_853f_6e11,
+        ]),
+        pallas::Base::from_raw([
+            0x6d1c_01bb_fd88_f740,
+            0xac45_ec78_810e_f0f9,
+            0x9178_89e7_5ed9_7c53,
+            0x2e02_e772_12fb_a864,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x482b_ce95_a904_fbd8,
+            0x099f_45ef_d9d4_df4e,
+            0x6e70_1656_036c_32a5,
+            0x0a38_cfd7_47d5_12df,
+        ]),
+        pallas::Base::from_raw([
+            0x570e_1101_ac76_4879,
+            0x99d6_ff14_205e_e41a,
+            0xc0cb_4ce1_8364_ca7d,
+            0x3f21_3a0f_2127_88ab,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd491_d705_998e_3189,
+            0x7bbe_badc_663c_142a,
+            0x1d71_9890_63cb_18bf,
+            0x24f8_a1c5_2bcc_e57b,
+        ]),
+        pallas::Base::from_raw([
+            0x1052_3fab_b946_6f52,
+            0x4621_6150_6b1b_7617,
+            0xe22b_b133_5f66_15bb,
+            0x00f7_be2e_c34c_d4e3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9b7c_bac0_1918_11a9,
+            0xe14a_1c33_bf27_13cd,
+            0x9c34_676f_4ed5_0771,
+            0x3bc3_b8f9_e4c7_cbdf,
+        ]),
+        pallas::Base::from_raw([
+            0xc0c3_e7a5_3a19_2bbe,
+            0x9697_bec0_d8a8_605b,
+            0xf832_dc8b_d08d_48b0,
+            0x0ad3_7d64_7a36_db47,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1a49_dcca_d569_77a0,
+            0x2769_7440_2b48_e461,
+            0x7635_b7b2_f6c1_424a,
+            0x2be6_10f4_a289_b89f,
+        ]),
+        pallas::Base::from_raw([
+            0x3e61_c167_3ef3_fc04,
+            0x704f_268b_ce47_f0ed,
+            0x1445_3f5f_d2de_d836,
+            0x2cc9_d834_4ecd_1dd8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x11be_a2a7_7c43_e243,
+            0xaecc_1a58_bb49_1e6a,
+            0xad18_3b6c_844b_4f3e,
+            0x3af2_29a8_1e78_8c01,
+        ]),
+        pallas::Base::from_raw([
+            0xe5c9_8811_3857_46dd,
+            0x18a2_37a6_3f4b_065b,
+            0x95eb_77a3_8a4f_506e,
+            0x0f19_e7b4_bb81_9e9f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4289_8695_120d_ccc9,
+            0x7c47_76b5_b28f_500d,
+            0x7387_a0f6_6257_0e43,
+            0x3e0a_1a75_0403_726f,
+        ]),
+        pallas::Base::from_raw([
+            0xa4b8_617f_f5a5_e2d0,
+            0xbf01_7517_8dc0_be8f,
+            0x3e12_8a0f_5763_aace,
+            0x1019_05b6_1b1b_c5f2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6a1c_6336_c37a_69b0,
+            0xab01_b8f5_4c9c_c938,
+            0x4b70_77c2_8858_0ff1,
+            0x219d_9462_2657_9313,
+        ]),
+        pallas::Base::from_raw([
+            0xf0ca_ec54_481d_b8b4,
+            0x9caa_706e_8ced_f819,
+            0x892e_4cf8_342d_d927,
+            0x241c_1980_c2a8_9519,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2257_583e_eb36_4cc3,
+            0x2729_3e7e_d528_5088,
+            0x7eca_1457_60f9_6fcd,
+            0x366d_41fd_d540_9bb6,
+        ]),
+        pallas::Base::from_raw([
+            0x8bfe_2959_1e82_19f9,
+            0xbbcf_1722_efec_e216,
+            0x9560_fd43_03ee_a5fe,
+            0x01a2_ccf4_056f_faa8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf4b5_ad0b_5218_a94c,
+            0x3a24_9090_dd6d_9354,
+            0x98dc_0f69_de87_c57c,
+            0x3dda_357c_5ff1_403e,
+        ]),
+        pallas::Base::from_raw([
+            0x5119_459b_c85d_b13a,
+            0x2bfc_720c_90b0_7f40,
+            0x8537_0f1d_f88b_d581,
+            0x37db_226e_c00e_a298,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x63b3_23a9_39a1_77d2,
+            0xe62f_9748_713d_01cc,
+            0x2508_9050_a0a1_59bf,
+            0x3d7c_7c78_e9b8_851d,
+        ]),
+        pallas::Base::from_raw([
+            0x3984_54cb_b4b2_6fce,
+            0xc06e_f1b1_b11f_d4b9,
+            0x4456_781c_e7d7_a297,
+            0x04cd_8194_f1b8_f453,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1848_83cb_b617_7af4,
+            0x2d57_546c_a4fe_c3d5,
+            0x984d_e3a8_9232_dc0a,
+            0x0fe5_7d7a_b313_f576,
+        ]),
+        pallas::Base::from_raw([
+            0x675f_4ab1_700e_2db7,
+            0xb044_6bdd_3a0d_7127,
+            0x8d66_c6a3_c174_8080,
+            0x339e_ae89_0552_92fb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x28c6_46e7_5497_b6ce,
+            0xa3fa_753a_0908_d101,
+            0x1f09_d0f5_065d_2adc,
+            0x178a_d1dd_216e_1573,
+        ]),
+        pallas::Base::from_raw([
+            0x030e_a306_b041_1e57,
+            0x762a_03ec_df28_bda9,
+            0xa2c1_f35a_ecc9_b51c,
+            0x037f_7114_803f_e131,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x59ea_b5bb_9453_8366,
+            0x5fd1_07f8_c2f0_3024,
+            0x491f_9e0a_77a0_85f2,
+            0x1948_5bba_5ad6_3346,
+        ]),
+        pallas::Base::from_raw([
+            0xe07d_8570_5ff6_f740,
+            0xa7eb_9f4b_f78f_ebfb,
+            0x4ec7_d8d5_ba74_87e2,
+            0x152f_bf0c_1ad3_a448,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8951_a4b7_b88a_e304,
+            0xfbba_f494_63d6_2de5,
+            0x52dc_f4cf_46fb_b604,
+            0x3867_61af_f0a2_8253,
+        ]),
+        pallas::Base::from_raw([
+            0xa79e_a333_0c3d_f255,
+            0x98c0_1806_eff3_7bfa,
+            0xce04_7c7b_36b8_bcd6,
+            0x3c8b_a7f4_c363_edea,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaf3d_f661_71ab_0aef,
+            0xf42a_df27_feb7_ccb0,
+            0xf652_096a_95e0_714e,
+            0x12d2_2f2e_bb9f_dc00,
+        ]),
+        pallas::Base::from_raw([
+            0x2bd3_e13b_745c_7e1a,
+            0x30d5_8bed_1c3b_4731,
+            0x4fe9_de60_156d_0e6c,
+            0x1e75_82ca_046c_a5e1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4b26_3b3a_2d30_be4e,
+            0xa303_e1b5_ef9e_9c4e,
+            0x1a0c_d3c7_1f78_d34d,
+            0x0bc6_cbe2_2b93_1a09,
+        ]),
+        pallas::Base::from_raw([
+            0x5ef8_540a_c950_78e6,
+            0x5d90_b70b_8565_5e85,
+            0xed53_c717_36e6_4c78,
+            0x1686_468a_3079_9166,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d0d_dd14_b731_9e48,
+            0x712e_bc82_5391_3fdc,
+            0x5fcf_dda4_b51e_08ba,
+            0x2f3d_06eb_2d44_fe78,
+        ]),
+        pallas::Base::from_raw([
+            0xa569_8634_a0b3_f32d,
+            0xc8a6_e6d0_0d30_9550,
+            0x89e7_8274_9620_9f58,
+            0x05b3_f104_5b90_6405,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6556_9fab_c93f_5ef1,
+            0x8c77_fb45_e5b0_3ff0,
+            0x1462_4404_a661_0d5d,
+            0x1431_fd82_8c12_8ca9,
+        ]),
+        pallas::Base::from_raw([
+            0xe0f4_ffe0_7a81_532a,
+            0x6254_e069_7645_e573,
+            0x3642_fa4b_19fd_822a,
+            0x2485_d135_0391_bb52,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5768_e306_b266_4925,
+            0xd2ef_fda1_e729_f652,
+            0x21c6_d47c_319c_a9c0,
+            0x2401_0c36_e54d_b3ee,
+        ]),
+        pallas::Base::from_raw([
+            0x4951_90fc_eb1b_0b80,
+            0xf0c2_c315_ee04_91f2,
+            0x61bc_9d08_1307_b3d6,
+            0x024a_b73e_3607_a264,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x107f_387e_54f4_ef3f,
+            0x290a_32da_0a43_f56b,
+            0x8b9f_8656_4e83_0909,
+            0x277f_0f45_b6ae_6203,
+        ]),
+        pallas::Base::from_raw([
+            0x546b_2865_f5cc_4c0e,
+            0x8270_55d6_07bf_0010,
+            0x3f7e_68bd_fe61_0371,
+            0x1687_eb45_0f4d_7235,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x78a6_4eac_316d_2648,
+            0x753e_2521_a67f_50aa,
+            0x6e78_79a5_f11f_46fd,
+            0x05d9_18ff_b1da_6eb7,
+        ]),
+        pallas::Base::from_raw([
+            0xbab9_5863_9bc9_3ae9,
+            0xc37b_3f46_04cf_5755,
+            0x7de4_ae79_9f29_d2df,
+            0x047b_e1a6_060c_00a3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x49c8_71c2_61df_7cb6,
+            0x5380_ca6c_e9ea_0b1a,
+            0xd05a_4403_41b8_fe0e,
+            0x080c_d18c_035f_3d1c,
+        ]),
+        pallas::Base::from_raw([
+            0x5274_e1b3_a894_244a,
+            0xdedc_74af_a21e_7fb2,
+            0xefb1_5f0d_99ee_54b4,
+            0x164c_3262_4eb6_dbf6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x720a_ab53_d588_6877,
+            0xceaa_5cf8_1671_dfae,
+            0x6d4b_9e16_5405_52e7,
+            0x1c6c_47fa_233f_06be,
+        ]),
+        pallas::Base::from_raw([
+            0x61f5_3c0a_f4a4_aa3f,
+            0x5258_2334_b4f0_389a,
+            0xc8a1_db30_50aa_f8fe,
+            0x26dc_db34_c46c_475c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3208_2970_3840_3e89,
+            0x90a1_593b_19f1_4fe3,
+            0x09f3_ee71_e6d7_1be4,
+            0x0e1f_8f25_134a_535e,
+        ]),
+        pallas::Base::from_raw([
+            0xd519_b8f9_b1ac_7612,
+            0x91f7_850e_9074_5846,
+            0x8846_3611_08cf_2b28,
+            0x13ea_a62b_73e0_0d4c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4f39_a353_445a_c66f,
+            0xb59d_a767_e1ba_84b7,
+            0x3717_9c04_0954_afa8,
+            0x2fcf_f236_d66a_b6d8,
+        ]),
+        pallas::Base::from_raw([
+            0x681a_f295_0d6a_597b,
+            0x5642_9cae_6025_720a,
+            0x8a44_998d_765c_574d,
+            0x12ee_e67e_1017_6ed2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa310_66f1_af04_bfee,
+            0x2537_ea36_fb79_6590,
+            0xb3a7_25f6_64e1_75b9,
+            0x0788_937e_9e35_d05e,
+        ]),
+        pallas::Base::from_raw([
+            0xb54e_df7e_8f9f_a0a2,
+            0xe362_2000_9b73_a921,
+            0xf8db_8c46_cd4f_aefb,
+            0x2519_43ee_b590_deda,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa88e_2b82_de18_77cb,
+            0x8b94_f5d7_e46c_d059,
+            0x87a7_0381_3254_1fda,
+            0x22b7_728f_f5f3_2e91,
+        ]),
+        pallas::Base::from_raw([
+            0x673d_7869_fa50_f997,
+            0x9719_2499_f4d2_51a3,
+            0x1c21_1da8_cfc7_b1d3,
+            0x2bcb_9b60_77ac_9937,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa685_8e35_0e91_aeb6,
+            0x97a5_6a16_423e_dae8,
+            0xf9d3_8da2_28a0_0e54,
+            0x1e9b_88fb_12aa_573a,
+        ]),
+        pallas::Base::from_raw([
+            0x9be1_63b7_2d0c_c322,
+            0x6650_4cd4_3970_8ced,
+            0xd3b1_ffca_c43e_ab37,
+            0x1146_b28a_9f97_60fe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdada_d29e_a8b1_8934,
+            0x1250_940f_3606_539b,
+            0xde2b_b139_6cf1_8876,
+            0x11e8_cf63_9f28_6365,
+        ]),
+        pallas::Base::from_raw([
+            0x5015_5f8c_2102_5aa6,
+            0xa1a1_d888_4567_1dfb,
+            0x4927_0835_d236_0fb2,
+            0x2753_5582_b996_b87b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8cc5_e492_e0b4_ca8f,
+            0xb28f_29f7_b0c6_3c48,
+            0x7e38_ef10_32a2_771e,
+            0x3313_c543_e637_32ad,
+        ]),
+        pallas::Base::from_raw([
+            0x7669_4d57_eb2c_730c,
+            0x0574_9ec0_b3f7_fe08,
+            0x20a7_2453_e449_f1a4,
+            0x2070_c656_4f60_8012,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7ec2_1a43_236a_004c,
+            0xa075_0e43_5d13_56db,
+            0xf3fe_38de_a0d9_767d,
+            0x0337_f093_b562_0110,
+        ]),
+        pallas::Base::from_raw([
+            0x62ce_7184_7406_5d24,
+            0x6bbb_c9a5_81d5_55af,
+            0xfa2d_4ee6_6018_beea,
+            0x280b_c654_e7e7_dca0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb0e1_913d_b0c2_44fb,
+            0xaaa4_d9c4_218e_5938,
+            0x3546_9b6b_5fd6_28c6,
+            0x2395_9107_43d3_b222,
+        ]),
+        pallas::Base::from_raw([
+            0x5caa_129b_4b4c_e99e,
+            0xef45_ecaa_5313_85ec,
+            0x9c0f_a2cc_c8c2_fb2b,
+            0x189c_8131_f518_b80a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x032c_426c_b013_a4dd,
+            0xe11b_5e5a_3317_d9a0,
+            0x1492_b9fd_830d_3b80,
+            0x05f1_9d94_cf5c_55d4,
+        ]),
+        pallas::Base::from_raw([
+            0x2c4c_4704_673d_d003,
+            0xc48e_29af_97d8_8d07,
+            0xd127_dd3d_91d8_53df,
+            0x0d94_c052_f2d8_6405,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0281_7bc9_d4b9_3609,
+            0xfd46_6a0d_2dd4_a592,
+            0xd7bf_d5ad_053c_c494,
+            0x3e23_096d_c906_06f6,
+        ]),
+        pallas::Base::from_raw([
+            0xca1b_a2ad_cf48_d0bb,
+            0x4888_2a9e_e612_5ebd,
+            0xa857_f300_33cd_faaa,
+            0x0c0d_d8b5_2910_9f77,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x63aa_2c76_cd16_571b,
+            0x6708_27ee_f35d_9eee,
+            0xf732_370c_ed30_8f28,
+            0x2ce7_690f_9c45_b228,
+        ]),
+        pallas::Base::from_raw([
+            0xcf08_8fe5_d2da_2200,
+            0x6b75_35a5_3b79_5a4a,
+            0x6cdd_78c6_35eb_3d58,
+            0x088b_da57_e794_bed4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4f92_90f2_3582_04fa,
+            0xbc25_9bd5_ce7a_6e0f,
+            0xe944_7dba_fd99_596a,
+            0x2151_a369_bbea_a627,
+        ]),
+        pallas::Base::from_raw([
+            0xc11e_3f08_4d99_83d1,
+            0x3a2d_880e_3a7b_619b,
+            0xa9ce_df46_75f2_11fc,
+            0x153b_e140_8a41_79a8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x16b4_ed0b_32aa_4e15,
+            0x5d02_9826_e003_163e,
+            0xa674_90a0_12f9_fec2,
+            0x13b1_0df3_13d4_e0de,
+        ]),
+        pallas::Base::from_raw([
+            0xfac3_5814_0dbf_6fc9,
+            0x8d97_dbe3_f3dd_64d8,
+            0xf604_80c5_b973_198e,
+            0x0e44_6ba1_c4c7_30fe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x53e5_02ce_d667_b3fc,
+            0xbd6f_f292_2d35_b631,
+            0x511e_7681_0c78_b289,
+            0x35d9_b968_f2eb_c3a6,
+        ]),
+        pallas::Base::from_raw([
+            0x4b3b_f3a7_1759_3f8d,
+            0x4820_7638_9976_7ebf,
+            0x1549_6703_964e_4f60,
+            0x153d_81a1_43f0_33f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x31ba_52fc_3de5_ff01,
+            0x376a_2b41_b9d1_ece2,
+            0x62fc_8331_dce8_2da0,
+            0x118f_5744_f6ac_a780,
+        ]),
+        pallas::Base::from_raw([
+            0xb1e6_df68_1ea7_f7a0,
+            0x40ad_d363_1deb_f495,
+            0x41bc_dabb_085f_cb8b,
+            0x364f_f020_42c1_2247,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x36b4_1638_0c9e_d00e,
+            0x51e0_bfdc_10a4_d1db,
+            0x913c_5835_4ab5_aeab,
+            0x0fab_7d64_6a29_1389,
+        ]),
+        pallas::Base::from_raw([
+            0x3321_18a5_c438_99ab,
+            0xaf16_ef69_ec9a_ffa2,
+            0xc1b2_59aa_af0b_d100,
+            0x0575_6607_ef7c_7347,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x74e0_0818_faa1_9834,
+            0xfb98_2b7c_6bed_60fd,
+            0xdde3_235a_2ebd_4674,
+            0x215a_5274_fda3_f4b6,
+        ]),
+        pallas::Base::from_raw([
+            0x106c_9783_c54d_cdce,
+            0xe128_7246_1a71_5454,
+            0xd4f3_6b85_c93a_1dc3,
+            0x0c6e_92c5_d9f9_4b70,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1b65_d726_c0c0_4615,
+            0xbf8b_e863_197b_7eda,
+            0xaad7_e0b1_2452_bfd1,
+            0x3511_415c_a5d8_9c89,
+        ]),
+        pallas::Base::from_raw([
+            0xd833_0a78_4996_6f63,
+            0x30e1_6447_4b6b_f6d4,
+            0xcaff_7c50_1359_107c,
+            0x0952_ff5e_91f1_5c61,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d03_79de_a34a_e974,
+            0xcc94_561f_8673_d71a,
+            0x131a_c0e3_d11b_fdbf,
+            0x25f8_c019_6ac7_41d8,
+        ]),
+        pallas::Base::from_raw([
+            0xc14d_3404_894d_304e,
+            0x1683_69a9_6ab3_16e9,
+            0x3735_bc70_cd9c_eda8,
+            0x37b4_443a_f523_48a5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9956_1c6e_192e_7568,
+            0x65e7_be87_d79a_44a8,
+            0xc477_1369_88f7_cfa5,
+            0x2e08_d2d1_1f6a_f91f,
+        ]),
+        pallas::Base::from_raw([
+            0x8a16_6878_cf4d_afeb,
+            0xabb3_04d6_e705_de6c,
+            0x0859_c814_89dc_15a7,
+            0x274d_0775_a079_b46f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdb3d_11a8_4fa8_eb13,
+            0xea3a_7ea8_9ad3_d6af,
+            0x9981_af35_3af1_4cae,
+            0x2b38_c01e_7ae8_dfd9,
+        ]),
+        pallas::Base::from_raw([
+            0x830d_dec0_3c06_8077,
+            0x422d_fa90_51e2_eb38,
+            0xb8f7_0d0d_d10c_76bc,
+            0x059f_5d67_0e51_88ac,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd910_97f8_e2bd_e10e,
+            0x2f49_4c52_8f28_53a0,
+            0x18ce_d481_b3ab_923b,
+            0x25d9_e3db_a718_8482,
+        ]),
+        pallas::Base::from_raw([
+            0xd5a7_8005_ba95_0986,
+            0xcaff_2367_d76d_2556,
+            0xfd49_0e15_d2f5_1094,
+            0x04ec_51a9_732e_c101,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9f75_b055_2d08_c237,
+            0x8f7b_40f6_b94b_551f,
+            0xff0a_1d65_6512_02d4,
+            0x3259_3507_44ad_2a0e,
+        ]),
+        pallas::Base::from_raw([
+            0xc3b0_007b_5635_87fc,
+            0x67fe_664c_1556_008b,
+            0x3933_d14e_7c90_a14b,
+            0x08dc_b066_37f5_9ef5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x66d6_5691_d7f4_6f1e,
+            0x5774_25e4_a039_ed7a,
+            0xfe27_c3f5_c7dd_098b,
+            0x1daf_b77a_22f1_a231,
+        ]),
+        pallas::Base::from_raw([
+            0xa3bf_e610_9f9d_ac9b,
+            0xa538_e6f2_5314_865c,
+            0xd48c_5619_13f2_6135,
+            0x267d_66bd_ebc3_5567,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x22c0_55b7_005a_fd9a,
+            0xfbe9_5fb4_544d_dfc1,
+            0x48d5_2641_43d1_c6cc,
+            0x37c3_a72a_ea7a_3c08,
+        ]),
+        pallas::Base::from_raw([
+            0x77e1_afd5_eb2f_d2a4,
+            0xbfcf_76bf_248c_529c,
+            0x8589_07aa_9ffa_a44a,
+            0x288a_b3ad_a23d_9811,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x847f_2f2e_b09a_a283,
+            0x2874_cbee_5fec_a088,
+            0x34d9_fc8d_9af2_8672,
+            0x3e01_114f_d579_ff35,
+        ]),
+        pallas::Base::from_raw([
+            0x5504_d237_2254_c60b,
+            0x8f8f_14cd_6ba7_b727,
+            0x7539_9f3f_1180_d507,
+            0x1977_5697_8320_c24b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x21d8_677d_a4ef_3754,
+            0x970f_79ca_c4fe_71cc,
+            0x9202_5638_93e7_a2f0,
+            0x276c_3165_597d_8172,
+        ]),
+        pallas::Base::from_raw([
+            0xcddb_83d9_a9a1_4fee,
+            0x05fa_2b1e_95df_ce2c,
+            0xd58c_11ef_e1b6_7c84,
+            0x01c7_cbc6_23e0_fde1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5dc4_11b7_be41_9bf8,
+            0x6102_61de_71fd_509e,
+            0x93df_5fe5_4b6f_15c1,
+            0x2b17_a62a_ef55_fc8c,
+        ]),
+        pallas::Base::from_raw([
+            0x13e9_27e7_5428_fe43,
+            0x3d07_6e3a_5358_d948,
+            0x321d_9085_07a0_7394,
+            0x2648_17bc_3f85_f5f9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xda55_668c_c5c9_544a,
+            0x7dd5_42c2_06f1_4ae9,
+            0xb88a_afeb_3d1c_ee22,
+            0x1a12_25c2_42a6_d6dc,
+        ]),
+        pallas::Base::from_raw([
+            0xd8d8_02d6_7061_f4e7,
+            0x1a21_e3e6_ed3e_e0e2,
+            0xcbe5_9238_89e5_856b,
+            0x0390_44ab_2e17_bd89,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3ae8_41df_e3b7_290b,
+            0xf13f_ecde_fd80_6170,
+            0xac39_a24e_4ce5_3f97,
+            0x26ce_75c5_b2d5_e122,
+        ]),
+        pallas::Base::from_raw([
+            0xe473_f056_dc79_115d,
+            0x76e3_15a5_ad62_0dae,
+            0xa313_6c1e_483c_9721,
+            0x3e6d_83ea_86d5_d926,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xae2f_741a_d983_16f1,
+            0x382d_5858_cf9d_44bd,
+            0x384e_98ab_f72d_0fbe,
+            0x30f3_d34b_406d_3804,
+        ]),
+        pallas::Base::from_raw([
+            0xc245_5362_2247_8063,
+            0x3e17_2608_60b4_bb4b,
+            0xb86d_dafc_c500_27d6,
+            0x2fe8_4841_5f29_2c18,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7b6a_1128_3c3c_80fa,
+            0x9ca2_b9c2_dff3_f3b4,
+            0x340f_f261_7ed1_3780,
+            0x3e0c_e5ac_ec7d_2bec,
+        ]),
+        pallas::Base::from_raw([
+            0xd741_2e2b_3d37_fb89,
+            0x6247_866a_c8b1_fed8,
+            0x6f6b_0239_2805_590c,
+            0x0ced_382c_9268_f3f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf517_dcec_62e9_e3ab,
+            0xef0f_7eeb_1b0c_6735,
+            0x8b97_f27c_70f9_37cf,
+            0x3b8f_7d37_f83c_eefc,
+        ]),
+        pallas::Base::from_raw([
+            0xc89c_a8e6_7126_cae0,
+            0xbb34_8af9_7905_e208,
+            0x454a_e56d_15e2_6ff5,
+            0x1e45_8d1f_2c82_bdf4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8f21_d255_acaa_5b90,
+            0xe729_e5a0_0840_e7fb,
+            0x56c6_9b75_0b63_eb5d,
+            0x1eaa_c9b9_4cc3_82f7,
+        ]),
+        pallas::Base::from_raw([
+            0xa370_d467_d4f0_adf4,
+            0x5ec1_c5cf_197c_0be2,
+            0xc1cf_51f4_f03f_6d42,
+            0x09fb_0444_4edc_27ff,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb12c_0d2f_205c_31fe,
+            0xeea6_f71c_6bfb_1591,
+            0x67af_0a9c_f750_03b2,
+            0x0398_bc66_1d37_47e7,
+        ]),
+        pallas::Base::from_raw([
+            0xcfcb_c59b_a71c_e886,
+            0x13c5_dcea_abed_f8e3,
+            0x94cc_f92b_e337_137f,
+            0x0684_13f8_7199_260e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf82d_26f7_308d_982b,
+            0xa463_f795_5164_d737,
+            0x943b_0cdb_2a01_2793,
+            0x36dc_43c7_d977_77d2,
+        ]),
+        pallas::Base::from_raw([
+            0x28d0_729c_c900_9cd4,
+            0x95ce_751e_83b7_6438,
+            0x7f75_8d0c_1ee4_d82f,
+            0x0484_975c_8703_23b2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x573b_6407_c295_bc03,
+            0x3d81_4362_3653_b276,
+            0x715a_5538_1619_6299,
+            0x1a2d_544c_2924_13dd,
+        ]),
+        pallas::Base::from_raw([
+            0x35eb_0d37_a82a_ebb9,
+            0xc43b_bf74_7668_ff2b,
+            0xb086_e27f_cabe_e36f,
+            0x2aa3_498b_0d5e_e868,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbdc2_bfad_362e_4e45,
+            0xe6a5_1dc4_a99d_9290,
+            0x7a7b_06f1_60f6_7d5d,
+            0x19cd_8877_65a7_d9d8,
+        ]),
+        pallas::Base::from_raw([
+            0x8d51_6305_64ff_936f,
+            0xfadb_c64d_5013_97ef,
+            0xc69f_7c0f_10e4_e5bc,
+            0x2d2a_dbea_d1b6_989d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x583a_b4b1_cd55_7263,
+            0xaae4_f810_312f_8c56,
+            0x2f23_2a1d_07d9_df4d,
+            0x2fba_b5a3_c4c6_773a,
+        ]),
+        pallas::Base::from_raw([
+            0x73e5_4412_d35d_bef2,
+            0x3ece_87a1_67ec_e5a8,
+            0x9223_f63f_59e9_6781,
+            0x0ee5_e010_f598_055d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2969_6dcf_d0f2_45a4,
+            0x8277_fcbf_73c3_66a0,
+            0x6841_c274_1f99_74cf,
+            0x3709_2e4c_18e6_289b,
+        ]),
+        pallas::Base::from_raw([
+            0x838f_2b53_2d37_f282,
+            0x81dd_5e60_c4b0_6016,
+            0xfc7c_b034_4511_4e5d,
+            0x32ff_9c63_4da9_341f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9ff0_ae31_0044_5d6d,
+            0x7cd8_e22c_968c_f64e,
+            0x6ec7_7099_fd3f_bc2d,
+            0x03ed_d409_4ace_757a,
+        ]),
+        pallas::Base::from_raw([
+            0xb949_d0f4_aa7d_daab,
+            0x9579_75a6_e421_ce51,
+            0xe387_f7c9_68d4_199a,
+            0x1076_83d8_acc2_378c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7c36_ca16_0d02_f992,
+            0xb3c4_7744_bd2a_cf1b,
+            0xd4fa_877a_2a8e_237d,
+            0x1394_a3da_f7c5_819a,
+        ]),
+        pallas::Base::from_raw([
+            0xb613_5e52_1b63_455a,
+            0x4bf9_1fa0_ac38_e15a,
+            0x81d9_9f64_1be8_55b6,
+            0x2224_1b8b_d75d_1421,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xceb4_5f69_b989_fe1b,
+            0xb7e7_93ed_c797_8d45,
+            0x3b07_5a63_4103_0c39,
+            0x2d76_b68f_6c00_d2e6,
+        ]),
+        pallas::Base::from_raw([
+            0x3ac8_1f11_ce1f_0c3e,
+            0x5065_af29_2ab5_050c,
+            0x8ac1_305a_a9ba_43f1,
+            0x1697_81ba_e7d9_3067,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x20fe_f089_d835_a48f,
+            0xcb23_7766_d607_2a64,
+            0x18ef_0b57_dd7c_3b7c,
+            0x1a3d_5f57_8f57_a4a0,
+        ]),
+        pallas::Base::from_raw([
+            0x2574_2597_3e32_c989,
+            0xde95_cb1a_38b5_9aee,
+            0x5e69_c45a_328e_ae08,
+            0x12fa_3870_5145_9017,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x54cc_b71d_b115_00f3,
+            0xeae2_7b08_c955_4e07,
+            0xd7ac_a091_6e33_815d,
+            0x0924_e273_11dd_a853,
+        ]),
+        pallas::Base::from_raw([
+            0x6d61_f93c_cce9_942a,
+            0x2d9e_5dd1_7e83_e833,
+            0x8410_7aea_6d67_f750,
+            0x3cbe_6e62_757c_a1a5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7496_11d0_b797_7376,
+            0x91ee_1646_4ccd_ec34,
+            0xa71a_ee11_a82a_121a,
+            0x0b9f_4bbf_d185_de95,
+        ]),
+        pallas::Base::from_raw([
+            0xd157_72cc_ea7e_a26d,
+            0xd171_58db_8708_6d27,
+            0x6093_1fae_1eea_2b4d,
+            0x34dc_4613_b828_dd99,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1fbd_03d8_1ee5_f96f,
+            0x371c_9782_b691_077a,
+            0xf52d_f5a7_19bf_5ce5,
+            0x02d6_cab2_451d_9d53,
+        ]),
+        pallas::Base::from_raw([
+            0x19b8_5371_5e90_f9c3,
+            0x6e1e_109e_62b7_e02b,
+            0x4302_b72c_1d4a_5b35,
+            0x10b0_be6d_e221_46f8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x24cf_34c7_81aa_7322,
+            0x3247_bd2e_b1c4_5ee3,
+            0xf9ae_4378_0413_ea39,
+            0x0d16_dcb8_7865_78a6,
+        ]),
+        pallas::Base::from_raw([
+            0x9d41_e502_3ba7_b1c8,
+            0xfe5e_2c86_fc66_1a81,
+            0xe729_c0d6_427e_0fc3,
+            0x05f3_05ca_4971_05cb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1afa_a868_252f_7b9d,
+            0x9e19_617b_52e9_b42c,
+            0xd5f4_449d_e9e3_f183,
+            0x322a_0e11_63ce_20e8,
+        ]),
+        pallas::Base::from_raw([
+            0xb391_cb0a_6351_bf73,
+            0x610b_1f7b_4f5a_6acd,
+            0x3a76_9f31_cd20_aa26,
+            0x3ce3_28a2_561b_bf67,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x30c7_9e39_fd40_3fb2,
+            0x1d82_1256_916f_f504,
+            0xfe73_efde_65d6_2b6b,
+            0x2994_4742_c6a3_4de2,
+        ]),
+        pallas::Base::from_raw([
+            0xaa6e_9941_b2a5_4d17,
+            0x50e2_4496_1b34_d4ca,
+            0x6b06_42c4_a199_cb45,
+            0x01f3_609d_eefd_a00c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4bab_06a5_e077_4a9e,
+            0xa330_3b42_52bd_5399,
+            0x4bb4_1f7b_e729_9520,
+            0x3e21_edef_d0eb_fab4,
+        ]),
+        pallas::Base::from_raw([
+            0x464c_145f_cb64_99e5,
+            0xdf35_61b7_1aca_4810,
+            0x04bc_58fc_3756_5635,
+            0x1c58_279a_6bbf_5750,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x99f4_f0fe_9dc0_ca44,
+            0x02fb_d682_b042_1702,
+            0x2efe_f131_2968_d890,
+            0x15e2_222e_6db1_4410,
+        ]),
+        pallas::Base::from_raw([
+            0x67a0_83e2_c99a_0667,
+            0x23ab_d14a_6bd2_87fb,
+            0xabdd_eb1e_2a5d_fdb0,
+            0x0b60_960a_be90_667e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc740_684e_ba5a_4faf,
+            0x4c22_ce95_137c_c36c,
+            0x281a_a42b_c45a_2b1a,
+            0x376b_146b_97e0_9a59,
+        ]),
+        pallas::Base::from_raw([
+            0xc4ef_bdb0_982a_e289,
+            0xf554_a7b6_564c_83fc,
+            0x8a67_d20f_be31_f8df,
+            0x2c37_9f03_4178_6df6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2ab6_2fa8_4b1f_8e4f,
+            0x5604_7652_51e0_d7d4,
+            0x861d_2eb4_6261_0b9b,
+            0x31c4_e0bd_450e_6e50,
+        ]),
+        pallas::Base::from_raw([
+            0xd8d3_3e9e_f72a_be1e,
+            0xb803_ee7b_7f4a_6cef,
+            0x9a3c_b438_0c39_4da6,
+            0x1228_8e27_13b3_b5f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1d8c_119e_1fea_0f3e,
+            0xcf48_8423_afc0_a753,
+            0x0b6e_dc85_421d_1af4,
+            0x261f_f1dd_ff1f_5d8e,
+        ]),
+        pallas::Base::from_raw([
+            0x0199_5750_d19e_6caa,
+            0xad1d_82df_b749_8ed4,
+            0x247b_d709_b691_31b7,
+            0x2539_b879_15a5_f780,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7589_fb80_f8e8_939a,
+            0x9ebd_0810_d45a_bccd,
+            0xfdba_79ca_0ccc_9b44,
+            0x1aa0_1aea_8f5d_c980,
+        ]),
+        pallas::Base::from_raw([
+            0xa555_fa27_6b83_e30b,
+            0x578f_1dd3_8ca4_8a1b,
+            0x1df7_d102_f86b_370d,
+            0x394a_4663_4e33_5391,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x20a6_ffb4_b2a0_6005,
+            0x92eb_8f71_fb24_c4e2,
+            0xaa8d_0967_96f7_84f8,
+            0x16e3_1607_8d0e_330d,
+        ]),
+        pallas::Base::from_raw([
+            0xdd44_1a60_d432_5070,
+            0x4b11_771a_1b21_7b5b,
+            0xcd9b_504e_26da_2f48,
+            0x300a_ebe3_2a72_477e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x744f_4c87_d1d4_508c,
+            0xb3ec_6058_d948_a573,
+            0xc4cc_b479_43b9_9fea,
+            0x292e_928f_7ceb_3ff2,
+        ]),
+        pallas::Base::from_raw([
+            0x87ce_4476_03d0_27ad,
+            0x9bb9_90ca_e688_0b20,
+            0xc92d_41da_e465_745a,
+            0x0223_81f5_2d29_279c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0762_3807_30d6_1de3,
+            0x1edd_e3f3_3771_cc05,
+            0x1b7f_051c_c2b6_4ab3,
+            0x0453_ef02_8a0a_0e93,
+        ]),
+        pallas::Base::from_raw([
+            0x4af4_208c_5106_b83f,
+            0xa12f_0bb8_1911_e9b2,
+            0x8d23_55e3_13ca_6284,
+            0x199a_c626_77dd_e42d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5d5_078b_65a5_31cb,
+            0xd6d4_d396_40a8_dead,
+            0x7395_10a3_2e84_194a,
+            0x0746_7e7f_2d24_b2da,
+        ]),
+        pallas::Base::from_raw([
+            0x2aca_d55d_1851_65e5,
+            0x0fb2_146a_77c9_c7ad,
+            0x4a21_f9c7_5a25_793d,
+            0x051f_b653_7e5c_669a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5c77_2c3e_2739_e3fc,
+            0xfef3_5127_c5dc_20fd,
+            0x93d1_092b_43f0_b004,
+            0x3610_1ab4_3a30_2e81,
+        ]),
+        pallas::Base::from_raw([
+            0xa206_2c8a_6927_2961,
+            0x95ae_1eda_33fe_553c,
+            0x0c55_8ed6_13c3_1d9f,
+            0x2679_b3ad_0bb1_f518,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4c99_4a2d_9356_6587,
+            0xdeeb_0d82_95d1_2d60,
+            0xe1c2_2593_45ec_8dc4,
+            0x2a35_d2f2_3772_88eb,
+        ]),
+        pallas::Base::from_raw([
+            0xdd98_203f_af9d_ee4d,
+            0x5c66_2c8c_c521_19b8,
+            0xa63e_cdcb_8480_514e,
+            0x18da_f4d5_332a_1baa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd84c_d0ad_ccfa_70c3,
+            0x007c_d209_cc31_09a0,
+            0x78ed_585e_3225_fa0f,
+            0x039e_aa43_428a_bea0,
+        ]),
+        pallas::Base::from_raw([
+            0xb8f7_04f9_aa61_c65c,
+            0xb502_1eee_d781_1fd1,
+            0x5e3a_d1e1_0641_c3b6,
+            0x286d_2d99_97fb_09c8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2f16_78b3_f543_9c73,
+            0x9f1b_1cdd_d30a_111b,
+            0x1601_479f_9b32_834d,
+            0x17c1_c1b6_9420_721b,
+        ]),
+        pallas::Base::from_raw([
+            0x5b68_0b72_90c2_201a,
+            0xf9f9_cb4d_b01a_bc23,
+            0x1d4e_6bd4_f26a_e504,
+            0x389d_e069_5988_822f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb1cc_a546_a26c_bd86,
+            0xd581_36f0_8d48_7530,
+            0xc022_5c61_93c4_2f07,
+            0x3900_59d2_1cdc_6bd4,
+        ]),
+        pallas::Base::from_raw([
+            0x6b0c_72de_318e_22d4,
+            0xc25b_9e3a_542f_b6b6,
+            0xa7a8_06e6_da9f_7440,
+            0x3c2a_71ce_4326_8d4d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x50e1_11a2_0489_f122,
+            0x07db_1ada_fd5f_8ecb,
+            0xf6a6_51ee_1f90_02b9,
+            0x25dc_8f85_41ca_57ca,
+        ]),
+        pallas::Base::from_raw([
+            0x8241_e6e0_c4ed_eedc,
+            0xe1db_5a05_57a0_5392,
+            0x4b07_d4a1_6ee5_32a3,
+            0x1d1a_0c97_70ed_f432,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb26b_68f6_0086_71f4,
+            0x75db_a00b_0b9e_4307,
+            0xd9a7_65b7_c82f_711f,
+            0x2765_f4c0_27cb_e853,
+        ]),
+        pallas::Base::from_raw([
+            0xb2a7_d024_e97a_b65b,
+            0x1df5_ee26_7727_2a6d,
+            0x6c0e_4551_c789_273d,
+            0x27a1_7d99_2875_639d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdb10_fcfe_4260_d68d,
+            0x7154_7c95_a7be_2663,
+            0x1258_286a_d0ce_a1a3,
+            0x27df_52ac_88e9_47ea,
+        ]),
+        pallas::Base::from_raw([
+            0x3d4e_5b53_00c3_0fb7,
+            0x93f6_bee4_3688_6e32,
+            0xbce4_cf1c_bdd9_555d,
+            0x2046_32cf_c355_10e2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8b7c_28f8_d7ec_c2a6,
+            0x3484_bab7_04d2_2a17,
+            0x68eb_5538_e6d8_bfcd,
+            0x0408_8d25_0509_fd2f,
+        ]),
+        pallas::Base::from_raw([
+            0x57f8_018e_752e_b908,
+            0xc709_94e2_3360_b3e9,
+            0x31b5_e0c5_969a_1364,
+            0x241d_3b9c_b64c_1c51,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x070f_a907_6332_8b37,
+            0x80b7_7fc9_f7d1_454e,
+            0xa851_ba95_b01c_9b9f,
+            0x104f_1754_7220_df3c,
+        ]),
+        pallas::Base::from_raw([
+            0x7dc8_7e53_05e7_19fb,
+            0x338f_f6d5_fbd5_8b87,
+            0xf8c5_e720_14f7_325f,
+            0x0309_fefc_0c51_fe88,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb33e_8147_9cf8_1580,
+            0x3d43_f778_431a_39d8,
+            0xca34_2567_f8af_16d1,
+            0x3113_430a_214b_0cdb,
+        ]),
+        pallas::Base::from_raw([
+            0x13c9_5973_0b4f_4399,
+            0xe534_1a6e_c65c_a2b0,
+            0xcb52_a623_3314_e4d3,
+            0x2ced_c552_f9fc_da21,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe2f2_d321_bc0b_2ca7,
+            0xb252_6d8b_b9f2_415b,
+            0xbf60_2a8f_52fe_1001,
+            0x3d68_f289_95eb_8ebc,
+        ]),
+        pallas::Base::from_raw([
+            0x15bc_988c_f260_e0ae,
+            0xd3fe_7253_a715_73b4,
+            0x5d6e_a086_5a30_55b9,
+            0x08ef_9afd_ec67_40fe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4fa6_d6c3_91be_c514,
+            0xb5a8_3229_b864_ecb8,
+            0x3559_3f27_4198_2167,
+            0x1402_abd3_64b4_91e4,
+        ]),
+        pallas::Base::from_raw([
+            0xad4f_91b5_5f82_9cbf,
+            0x6078_24ce_bd17_46c1,
+            0x8941_5aad_ad35_5caf,
+            0x1e1d_54b1_8e31_aa02,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf268_ffe3_ff17_92f0,
+            0xd30d_826d_c124_7ab7,
+            0xd835_dea8_0451_546a,
+            0x07f3_787f_5b1b_6728,
+        ]),
+        pallas::Base::from_raw([
+            0x06be_7c30_22da_5b48,
+            0x6119_b0af_e57e_eece,
+            0xffb2_ef93_3bd0_ebed,
+            0x0169_f72c_db1b_2fcb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe456_2834_294b_888d,
+            0xbcfd_513b_64f2_5684,
+            0xf08e_b8fb_c4ab_d423,
+            0x0fb6_00e3_c86b_b49f,
+        ]),
+        pallas::Base::from_raw([
+            0xe7bc_fc0e_3b3f_f8de,
+            0xbea6_5eea_f9ae_d71e,
+            0x70df_ec85_cd8a_1b58,
+            0x19f6_5367_896c_d8a6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x34fa_bfcf_3c22_1b33,
+            0x044b_883c_d5c6_097b,
+            0xbfb0_715a_00cc_0c7c,
+            0x0679_54d0_2044_c9f5,
+        ]),
+        pallas::Base::from_raw([
+            0xd919_1bda_61df_8d07,
+            0x6d2a_a446_a685_4475,
+            0x92bc_bfbb_a58a_db13,
+            0x065a_ecfb_ba1c_4f39,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x86c3_eb48_7c88_bd57,
+            0xdb8b_d4d0_11d2_f88e,
+            0xfad8_69ea_a7e4_4dcf,
+            0x3022_30ed_6e9c_6e28,
+        ]),
+        pallas::Base::from_raw([
+            0x0fbe_eda5_bba2_91f6,
+            0x92ea_6a64_ab91_359a,
+            0x2e65_7270_4b8b_8373,
+            0x30fd_7673_e584_02f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xea84_2eab_a955_bf3a,
+            0xa20d_8ca2_651d_19b9,
+            0xab2e_3150_8ceb_fb7a,
+            0x3aca_f491_8373_e853,
+        ]),
+        pallas::Base::from_raw([
+            0x44ca_a4f6_92ec_ca97,
+            0x2b2e_4b9a_22ac_d3d3,
+            0xbc30_279e_ff7b_e6aa,
+            0x3b91_6c71_845b_1715,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1202_b03b_21d1_d047,
+            0x03ae_5752_aa54_b5be,
+            0xc925_4108_2eaf_2a3c,
+            0x13ad_e51c_5d29_0b7a,
+        ]),
+        pallas::Base::from_raw([
+            0x8041_8cdc_5c36_974c,
+            0xd604_0473_1a81_c29f,
+            0x23a2_ba06_9389_1b6d,
+            0x266f_9adc_4b16_36a1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9afd_aa5e_40ca_0c02,
+            0xa358_984d_a414_8a51,
+            0xacd4_cc7c_9942_0f78,
+            0x2187_c185_232c_318b,
+        ]),
+        pallas::Base::from_raw([
+            0x8a81_3d5d_499f_4580,
+            0xa513_113e_dfa2_d826,
+            0xeb8d_fef7_f22d_f466,
+            0x2031_fd3b_4359_99d0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x038e_6561_3318_309a,
+            0xfbbc_cc98_6867_1618,
+            0xc078_f45f_0b90_87ed,
+            0x30f2_e8ef_849c_bdbb,
+        ]),
+        pallas::Base::from_raw([
+            0xa36b_5a01_49ef_da91,
+            0x7a95_de96_1b20_9374,
+            0xecca_06aa_0f3b_5ab8,
+            0x31dd_63b8_64cb_de15,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4796_b297_f98e_93b3,
+            0xf493_b341_1ed9_021e,
+            0x1959_49f0_5a11_c922,
+            0x35c5_a032_4cc5_8786,
+        ]),
+        pallas::Base::from_raw([
+            0xfe71_cea7_2663_1804,
+            0x3b35_545d_e5bb_07ed,
+            0x1e0c_8c02_6408_9be0,
+            0x24b2_4b27_139e_827e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf33d_521e_4818_701b,
+            0x0ed0_6b9b_4fb1_12eb,
+            0xd38d_f6b1_d568_5738,
+            0x2f83_54a3_e364_1f2d,
+        ]),
+        pallas::Base::from_raw([
+            0x2f57_b58b_8e5d_489c,
+            0x88b1_ab17_4dc3_61c5,
+            0xfffe_6160_1707_a091,
+            0x0797_75d9_3fd9_4026,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7d09_4b08_9f06_34e0,
+            0x3260_4273_2097_b4f3,
+            0x2d95_5d56_8f05_4ae3,
+            0x2094_83e1_a0b0_a837,
+        ]),
+        pallas::Base::from_raw([
+            0x7432_cb32_c68b_2165,
+            0x7bd9_2165_7fb0_2d3f,
+            0x0f8e_cd9e_6143_ed8a,
+            0x1e80_5fa9_b94a_ec49,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5113_896c_8344_ca04,
+            0x3ef8_8140_14dc_b062,
+            0x4412_402a_64e3_8636,
+            0x2ca2_c0ca_7fdf_3aab,
+        ]),
+        pallas::Base::from_raw([
+            0xaed4_11b6_dd39_334e,
+            0xacbf_64e8_3c88_59f5,
+            0xc68a_900f_bbf1_8b0f,
+            0x35c2_a197_59b7_ad1c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3d3e_18af_68d8_62fa,
+            0xe3d5_0649_7f05_6b13,
+            0x4e45_faad_be7b_7fd3,
+            0x1859_da3e_20cd_e957,
+        ]),
+        pallas::Base::from_raw([
+            0x645d_a090_f36a_e749,
+            0xd41d_b3b2_a046_2af1,
+            0xa96d_2c5e_6597_3c58,
+            0x141e_1418_8f51_e0d0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdabb_00be_7a67_fef0,
+            0x5c7b_cf1c_6ad7_edda,
+            0x936c_f456_316c_55a1,
+            0x0d3a_6bba_e167_7f06,
+        ]),
+        pallas::Base::from_raw([
+            0xd39b_8075_0060_baa3,
+            0xe8e3_40fa_3051_61af,
+            0x195d_c44b_0585_652d,
+            0x00d3_796b_0ba9_07d1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0f72_b95e_c033_1d81,
+            0xc509_70b4_8e36_3af0,
+            0x8d67_3023_a716_fcc4,
+            0x012d_485d_fb24_6814,
+        ]),
+        pallas::Base::from_raw([
+            0xed91_6bb8_2624_17de,
+            0x426d_028d_0170_49d3,
+            0x398f_1550_b9e3_0d8c,
+            0x0918_c246_acb5_fdee,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1293_b9c9_0725_4044,
+            0x4088_0cdf_1a2f_acdc,
+            0x4de3_cd80_f405_03be,
+            0x21c9_dc8c_e021_5c1d,
+        ]),
+        pallas::Base::from_raw([
+            0x2a0b_32e0_23d9_a3bb,
+            0x8dfd_3300_2c4d_a85d,
+            0x90fa_fa54_eadc_032c,
+            0x2b22_e6b4_d976_bb94,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7f67_fb22_3643_6df5,
+            0x8cb7_a940_6905_bff4,
+            0x0700_85c6_481f_f20a,
+            0x2c67_6bf1_c4b8_6158,
+        ]),
+        pallas::Base::from_raw([
+            0x7cf1_8c00_4a9c_1a9e,
+            0xf931_e68f_a15f_b06c,
+            0x4b5a_0021_677e_9587,
+            0x2fb0_f64a_a35e_6c60,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x980c_1135_0270_595f,
+            0xda07_a0c2_5480_8a60,
+            0xb0aa_67e1_dd15_8881,
+            0x2075_e446_9ffc_c6fb,
+        ]),
+        pallas::Base::from_raw([
+            0x44d0_d6f6_aa0a_1932,
+            0x862b_52b6_f304_e01b,
+            0x690d_6e48_b517_135e,
+            0x22e5_932c_6392_e33f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf261_d24d_d55e_fa46,
+            0xe3a2_8ce1_2ece_2d1d,
+            0xb6c3_ed0f_5de4_1a3c,
+            0x1cb0_da91_1a87_cfa0,
+        ]),
+        pallas::Base::from_raw([
+            0x5442_5655_5336_1f42,
+            0x089b_c245_a048_38f5,
+            0x8dcc_4e66_7941_5a9e,
+            0x34c6_80fb_1dd7_661b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2d65_9072_d56e_5b18,
+            0x7987_24b4_22bd_dbf3,
+            0xa346_5bd1_1778_6f23,
+            0x3961_400e_4b13_e385,
+        ]),
+        pallas::Base::from_raw([
+            0xfd5e_6292_aed2_5d3c,
+            0x4875_16bc_b3cb_783f,
+            0x8e9f_fe18_293c_5856,
+            0x257e_cda9_99c3_d0cf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8313_e47e_aa56_0f12,
+            0xa288_d1ce_19d0_c1ce,
+            0x0de7_47c8_24b5_d9ce,
+            0x1ef9_17f6_6050_f9b8,
+        ]),
+        pallas::Base::from_raw([
+            0x51b3_c417_aae3_d512,
+            0x308c_26cb_3ef9_b520,
+            0x9e24_fee2_0510_c124,
+            0x10c4_5920_4a45_09fa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5354_70f6_26b1_1d0b,
+            0x366e_2b98_c3f8_51b4,
+            0xc02a_1aef_b019_705e,
+            0x0ef2_f878_dec4_3a29,
+        ]),
+        pallas::Base::from_raw([
+            0xbbe1_eafd_c8f8_d6fb,
+            0xba82_354a_c062_0fc1,
+            0x4984_289a_d39b_917c,
+            0x32b0_046e_bbd5_1e14,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe5af_e709_3216_cf73,
+            0xce7c_ea62_2592_e580,
+            0x073b_be3d_9d7b_463d,
+            0x0205_976f_e9c1_b9d7,
+        ]),
+        pallas::Base::from_raw([
+            0x1eef_2946_b9ab_16dc,
+            0x5513_ea0e_5cab_a5c4,
+            0x0174_f38f_88f9_1425,
+            0x16b7_f6c6_6548_4de9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x07cb_2e9c_7762_5c85,
+            0x33f6_d324_7351_1aec,
+            0xf7f0_ac0e_f1f1_e7ae,
+            0x3e3f_c594_4e97_90ef,
+        ]),
+        pallas::Base::from_raw([
+            0xf286_21ff_e28c_23ad,
+            0x44e4_45d2_2eb5_fae6,
+            0xddc6_91ad_5bdf_57f0,
+            0x36bf_156f_395d_dca9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd524_a165_4426_7d9a,
+            0x1f66_2e96_84b2_aeab,
+            0x2c89_6845_13b1_47ef,
+            0x38c9_c6de_31d0_54f1,
+        ]),
+        pallas::Base::from_raw([
+            0x05ac_032b_5a68_e21d,
+            0x13bb_ddc0_606c_20ab,
+            0x3026_8ada_227c_8b3a,
+            0x2d5b_3fbe_7b71_ff46,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x11b6_85e3_842e_c92b,
+            0x9944_f4db_a624_498b,
+            0x9fc0_d641_b040_6a97,
+            0x1647_4f51_124c_377f,
+        ]),
+        pallas::Base::from_raw([
+            0x1168_60f3_af34_2dae,
+            0x7805_c248_f3c3_fcc5,
+            0x4813_d152_d1d3_098a,
+            0x208f_c6df_823b_e5f9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc169_7a99_835e_be3e,
+            0x5ef1_b7bb_3199_1aca,
+            0x423b_d93b_fab8_c937,
+            0x2967_35a3_0418_0bdd,
+        ]),
+        pallas::Base::from_raw([
+            0xbdb7_c009_07a2_d1da,
+            0x368c_8c5b_b543_e0a1,
+            0xc213_9520_868c_748e,
+            0x0f8a_171f_46c2_fe7c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6adb_fb16_aac0_e0c1,
+            0xe670_9f7f_a329_f25c,
+            0x0345_3350_36cd_ada1,
+            0x067c_220e_1a5d_efb7,
+        ]),
+        pallas::Base::from_raw([
+            0xeffb_7a08_1fd4_52ca,
+            0x91c5_539e_3995_fa41,
+            0x949f_e270_b209_2bc2,
+            0x0c94_eb80_956c_63f5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x76ce_f08f_c4b9_3ce9,
+            0xcd65_00bb_d889_d19b,
+            0xcb76_bc91_e514_c0ba,
+            0x2676_b3ed_f17f_cc35,
+        ]),
+        pallas::Base::from_raw([
+            0xa6ee_7cfc_440d_3bb1,
+            0xf9f0_fa37_559f_b568,
+            0x5c75_9922_987b_e0fd,
+            0x18ba_9b25_9fb9_1ecc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x88aa_9070_b7aa_f1e5,
+            0xed19_124a_2b33_bb67,
+            0xe56e_e569_c5d2_f813,
+            0x3c6d_3d48_689c_6545,
+        ]),
+        pallas::Base::from_raw([
+            0x2dd3_3c98_6d92_2737,
+            0x4a38_67c9_cc68_d3c5,
+            0x0dd8_104b_2350_8489,
+            0x1220_a703_5129_d555,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf34f_b7dc_c29e_e3f6,
+            0x68ff_419f_787f_d6b4,
+            0xe113_6044_b650_fd24,
+            0x0f07_bb4e_3f0a_06bb,
+        ]),
+        pallas::Base::from_raw([
+            0xaf2f_3c9b_30d6_4868,
+            0xb876_d0bd_eebc_8d41,
+            0xd5e1_cfea_a531_971d,
+            0x049f_733f_9545_e7b0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0730_f7ca_1dba_2634,
+            0x229c_c86c_ac49_a95d,
+            0x299f_5487_67f0_5bff,
+            0x1ff0_6c6f_bbc9_7265,
+        ]),
+        pallas::Base::from_raw([
+            0x42d4_85b3_c343_fb9e,
+            0xa6a0_b509_d7f4_32ed,
+            0xea60_7525_3e54_c341,
+            0x2c00_143d_8e9b_261e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8fda_58ae_2efc_f247,
+            0xee35_0022_54f7_e10e,
+            0x736e_f067_a1d8_6854,
+            0x171b_73f6_f381_7bdb,
+        ]),
+        pallas::Base::from_raw([
+            0xc34f_b482_2878_1165,
+            0xf1a5_16af_a161_fc8f,
+            0x98c7_8cbd_6d9f_f721,
+            0x3b38_7dd3_b99f_11c1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf52c_8ddc_ff5b_01c2,
+            0x523d_70df_bd93_ca28,
+            0x9c29_d3a5_c4c1_3774,
+            0x31cd_fecb_38de_73c3,
+        ]),
+        pallas::Base::from_raw([
+            0xc68c_3f28_26b1_9cb8,
+            0xfa8b_7593_0610_fe60,
+            0xdef2_d495_2f51_9984,
+            0x2221_6cb6_ddad_b185,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6bed_8edf_f3c0_d24e,
+            0x99ef_37b9_cdba_a0d4,
+            0xaf57_7449_65fd_54db,
+            0x2704_ec4e_2419_ca44,
+        ]),
+        pallas::Base::from_raw([
+            0x8cdf_2bd0_b67e_b1c2,
+            0x58f8_a33d_b426_e86b,
+            0x653b_af62_fe66_967f,
+            0x2326_7f58_4dce_4708,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6312_f284_adb7_2234,
+            0x774f_0aa2_fa1c_ab96,
+            0x7b2f_4ce7_137c_5695,
+            0x0864_b203_83da_e0d2,
+        ]),
+        pallas::Base::from_raw([
+            0x731d_3ed1_53fe_b76c,
+            0xcaf0_32bc_d5c9_4c3e,
+            0xc4b6_0b28_83b2_aac6,
+            0x2125_d63c_b9cf_c0b5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x53e9_3f17_a1d9_9759,
+            0x5bbd_c73e_e01b_a020,
+            0xacf7_bba6_f9d3_2f75,
+            0x1952_c1c8_1635_6a75,
+        ]),
+        pallas::Base::from_raw([
+            0x66ec_f0b6_1af3_d4e0,
+            0x571c_0924_ed6e_1a90,
+            0x7705_b5de_1fc0_14c0,
+            0x1fd7_5a22_f673_ea80,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x51e1_ea40_8c91_aad6,
+            0x9db3_dc4a_6dd7_5da3,
+            0x565d_5a06_e81f_9a96,
+            0x0b2a_fb0f_ed99_5390,
+        ]),
+        pallas::Base::from_raw([
+            0xcb85_e6f7_24eb_eaa3,
+            0x0ae7_3db8_9527_b9dc,
+            0xcbe3_28e1_951c_7a68,
+            0x2e2f_ae1a_239e_1571,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf958_eaa2_64c1_89d5,
+            0xfd66_b7d1_121c_4ff7,
+            0x34b3_6c0c_e96d_541b,
+            0x0e73_8609_6c3b_0025,
+        ]),
+        pallas::Base::from_raw([
+            0x2cbd_19de_7f3b_b8ec,
+            0x049d_9874_0dc9_177f,
+            0xdc76_e494_dc8b_6c50,
+            0x3c16_ea6c_a968_ab1a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x915a_adcc_89b7_daf3,
+            0x2909_ff1c_0e1f_9785,
+            0xd5bd_a128_019a_7ef2,
+            0x3d37_fb8f_9eea_8d51,
+        ]),
+        pallas::Base::from_raw([
+            0x09be_e328_a080_f138,
+            0xe673_5890_07fe_2120,
+            0x2113_15e1_5d7c_9110,
+            0x190f_69f4_eefd_5477,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9887_d028_c814_459b,
+            0x0bfe_9714_c977_9a7d,
+            0x09bc_a123_a070_2c37,
+            0x2ab5_d63f_55f9_33ef,
+        ]),
+        pallas::Base::from_raw([
+            0x7704_3175_669a_cbaa,
+            0xd2d9_3256_279c_aaaf,
+            0x163b_f414_992e_0d03,
+            0x2dd3_ad25_0723_378a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaa70_af4d_2c62_1ee1,
+            0x82bf_76f9_a44f_e16a,
+            0xd823_dfb3_28e9_1bf4,
+            0x0e2e_86a7_8fef_50ce,
+        ]),
+        pallas::Base::from_raw([
+            0x96df_97dd_95e6_9e90,
+            0xa340_7d75_e959_bcd6,
+            0x8806_08c5_d89f_9255,
+            0x2de3_b3e1_6dc1_2b33,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0c96_2934_58ec_b2cb,
+            0x0d7d_864d_7d1e_560e,
+            0xec28_d3a6_3cdd_c555,
+            0x0de0_eb00_0263_741a,
+        ]),
+        pallas::Base::from_raw([
+            0x1cc8_207d_937b_6f0e,
+            0x9797_e7ee_dc7e_c8c6,
+            0x2286_088a_e441_e77a,
+            0x242f_4811_c54f_c5a4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x02e6_08b8_b421_3091,
+            0x04f9_d82c_26af_83fb,
+            0x4d9c_e544_ba2f_2525,
+            0x3f8e_e248_4851_a53b,
+        ]),
+        pallas::Base::from_raw([
+            0x9dac_0a3c_f93d_2ab4,
+            0x7ed7_5569_f31b_ed67,
+            0xb530_b73f_14e7_8731,
+            0x320a_6858_c7ef_b1d8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf1c7_9c73_c18c_5bef,
+            0xb4dc_fb27_be5d_af33,
+            0x00fb_3437_a413_9ab8,
+            0x27a9_6926_feb8_4658,
+        ]),
+        pallas::Base::from_raw([
+            0xf94f_9504_a805_5901,
+            0xd816_70b5_5f8c_c186,
+            0xd80a_41c9_3fca_d44c,
+            0x35fb_6dfa_6996_faf9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbad4_1cc8_8afd_dd08,
+            0x49d2_bda3_3181_eb27,
+            0x6bd9_a42e_e764_f287,
+            0x1bf9_7fbc_aad6_3dd3,
+        ]),
+        pallas::Base::from_raw([
+            0x9e70_14b6_b93f_3479,
+            0x2ecd_3acc_85d9_0a8e,
+            0x9adc_da24_387e_73bf,
+            0x1e46_208e_ee13_e6a1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbefc_4b37_32e2_12e7,
+            0x7994_0a4e_1943_82c7,
+            0x31b5_2141_ba54_76cb,
+            0x0dd7_b8d9_11c6_097e,
+        ]),
+        pallas::Base::from_raw([
+            0x878f_37be_45a6_24f7,
+            0x9e03_f710_b58d_290e,
+            0x9deb_aec0_79ca_08f8,
+            0x00c9_3eac_1500_b8bd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd808_eb89_0309_42fb,
+            0xbcff_47e4_811f_e691,
+            0x48a7_d2b6_7422_9156,
+            0x228e_a752_e00e_fdbf,
+        ]),
+        pallas::Base::from_raw([
+            0xf199_ca0a_c24c_d4ca,
+            0x6b0f_07a7_0752_8621,
+            0x8d45_6536_032d_db36,
+            0x0288_3b48_40b1_3378,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe693_43b4_9f9e_5b1b,
+            0x89d5_ce6a_32fd_13c7,
+            0x9ed7_6f5c_5aa1_9a97,
+            0x2ec4_33c9_00e1_bbd1,
+        ]),
+        pallas::Base::from_raw([
+            0xeac3_ed86_403e_abe1,
+            0xf6fe_9a5e_dfb8_8a4e,
+            0x8f6a_6351_97b0_db20,
+            0x1e2c_043d_0511_cfa2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9ab7_f215_baa3_94d4,
+            0x1d8f_3e16_e38f_a26f,
+            0x4159_fc19_7738_7456,
+            0x00ab_08a1_f3c0_25db,
+        ]),
+        pallas::Base::from_raw([
+            0x7127_4247_2253_84aa,
+            0xbb16_d239_fc1e_a68b,
+            0x0e3b_b7c2_0be4_3570,
+            0x100e_d9d7_3b76_9c8e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x42c3_aec9_48e9_24ff,
+            0x9b63_1a8f_ca4b_f414,
+            0x9ef2_f7fe_060e_a416,
+            0x25b4_8d9f_f095_81d1,
+        ]),
+        pallas::Base::from_raw([
+            0x8ae4_2d3a_35a0_766e,
+            0x104d_f6d8_e9cd_72d6,
+            0x71df_5cb2_0423_2963,
+            0x0899_58d7_7854_6236,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5dc_0bad_a65b_67bf,
+            0xf29f_e8a2_2244_b057,
+            0x5511_3eee_8db8_b190,
+            0x1210_c119_2f7b_d485,
+        ]),
+        pallas::Base::from_raw([
+            0x4b62_e8e5_60e9_df23,
+            0xe625_32a0_2269_5edb,
+            0x4afe_a317_bfa2_f9e4,
+            0x0134_67f6_1d26_4b88,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd1d5_3c8c_9f78_209d,
+            0x9713_2e54_9dc7_f6d1,
+            0x9999_feb6_19e2_ce8f,
+            0x1827_19c1_45b2_ad83,
+        ]),
+        pallas::Base::from_raw([
+            0x6440_07e8_0d1b_ebca,
+            0xb59a_b45a_21c2_c8aa,
+            0x37cd_166a_131b_bde9,
+            0x3e88_79f1_0539_11ae,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2128_47a7_80b3_afd1,
+            0xd62d_98a3_729d_147b,
+            0xac76_cd5b_7780_e455,
+            0x1371_d855_6493_7957,
+        ]),
+        pallas::Base::from_raw([
+            0x03c5_35ac_7821_d861,
+            0x1897_7fb8_d4d3_21ff,
+            0x57ec_5e9d_09d2_d94c,
+            0x2933_8896_3d25_c33d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4c64_9009_4f5b_b733,
+            0x2f25_149e_b638_123d,
+            0x583b_d5e6_3c07_fe56,
+            0x38d0_e3be_cf9a_d8fc,
+        ]),
+        pallas::Base::from_raw([
+            0x9482_7610_0282_f357,
+            0x9035_4a5d_fd55_d474,
+            0xdf90_065f_46d7_3461,
+            0x1ee2_e8e9_a7f7_1162,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc2cf_20da_8325_f9f6,
+            0x4158_322b_3ab5_e06c,
+            0x55ea_0370_e75f_deaf,
+            0x0491_5155_2307_b345,
+        ]),
+        pallas::Base::from_raw([
+            0x3a6c_b7c7_58d2_1156,
+            0x3ee5_aca9_420a_c8d4,
+            0x824e_78fc_93b0_042b,
+            0x2300_ec5f_8679_d667,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4534_4de7_cd4a_1286,
+            0x7000_9fbe_d545_bd95,
+            0x56f3_45dc_329c_fe4d,
+            0x1b11_0f10_4c22_8670,
+        ]),
+        pallas::Base::from_raw([
+            0x587e_67ee_4d03_0b13,
+            0x26d6_4ee0_cfa1_e3fd,
+            0x31a4_3dbc_e45b_3166,
+            0x384c_1a74_cf99_7d87,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa739_b815_03af_5bde,
+            0xfe73_4fc3_5916_3751,
+            0x87ae_e2ab_a571_0f68,
+            0x2880_7f09_fbdb_6069,
+        ]),
+        pallas::Base::from_raw([
+            0x959a_ef52_08c3_91fe,
+            0x9283_4894_b296_c35c,
+            0x4a5c_c47f_99f0_5f73,
+            0x04a5_23d4_9550_e5f2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbbaa_a155_8473_a2f0,
+            0x848d_48dd_594a_7097,
+            0xe3dc_ec5c_faee_ddc1,
+            0x3a8c_2c5a_d7c4_d92e,
+        ]),
+        pallas::Base::from_raw([
+            0x3bbc_7750_d4fe_2be1,
+            0x70ba_0c48_e53b_baff,
+            0xa804_5683_c10d_6804,
+            0x1094_6631_c67f_0dfe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3602_21c5_3677_ccd7,
+            0x9de8_46d9_609e_11b3,
+            0xc600_0f59_0fc5_e51e,
+            0x12e5_6f18_ba2a_83f3,
+        ]),
+        pallas::Base::from_raw([
+            0xb472_c933_636e_7cfd,
+            0x747b_505e_b1f1_252b,
+            0x944f_8b8b_0fbe_9e69,
+            0x081b_05b2_cc35_1fcd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf69f_2736_a2e6_02cc,
+            0x40b6_25b7_d5c4_621f,
+            0x09ba_e2a7_4bc9_bc80,
+            0x19b0_3942_3298_a1b4,
+        ]),
+        pallas::Base::from_raw([
+            0xab25_9c06_92dd_6ddd,
+            0x8930_0e85_715a_2677,
+            0x1518_4d35_6d96_7b91,
+            0x1afc_017e_c025_f777,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbd9c_a11d_c9d1_47c4,
+            0xa729_70e7_74ea_f665,
+            0x4ab2_7f51_e350_8d9b,
+            0x1b80_855f_52e2_65f1,
+        ]),
+        pallas::Base::from_raw([
+            0x47cd_3ef3_25be_4c31,
+            0xe4c1_3895_f52a_ad9b,
+            0x3533_9da3_9399_7f27,
+            0x2388_7e28_f45a_cf6f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0863_f044_e1a6_11e2,
+            0x79e4_5575_8e7a_78f8,
+            0xc8fc_9c15_0f54_30d6,
+            0x3a7a_8e36_84de_274d,
+        ]),
+        pallas::Base::from_raw([
+            0x03a3_2fb5_bab3_3a4d,
+            0x0bd2_34a6_5c64_7867,
+            0x972b_19ad_d013_d7c1,
+            0x1612_2c94_e22e_f260,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdf78_184d_c553_f8fb,
+            0x95e8_ea38_3755_2814,
+            0x1603_092f_6d39_db38,
+            0x2769_e6ea_c901_bb9f,
+        ]),
+        pallas::Base::from_raw([
+            0x6aae_1ad2_22b6_2d45,
+            0x8341_704f_980d_1ea9,
+            0x7317_b503_da60_23a6,
+            0x16b1_5baa_a77c_92e6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x35ad_694f_d3f3_93e5,
+            0xb977_6bab_ecc1_635d,
+            0x673e_2552_a80f_847f,
+            0x282a_562e_6ffd_6c2d,
+        ]),
+        pallas::Base::from_raw([
+            0xcd61_300f_af9b_7633,
+            0x5f78_7bdd_6fb9_767a,
+            0xf8e6_3e0b_a3cb_a82e,
+            0x3c29_8b6c_70f6_5826,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf978_920b_4033_85f0,
+            0x4741_dfed_87e7_f4ed,
+            0x9af7_9a50_a097_b040,
+            0x09f2_0401_7a7f_3d55,
+        ]),
+        pallas::Base::from_raw([
+            0x484c_a7c7_1e1d_cfde,
+            0x435e_fe17_c8a5_cbc1,
+            0xe981_12aa_7104_5057,
+            0x1d2c_9905_b8c5_8026,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8a4e_ddc1_e2a4_e687,
+            0x5bff_5ce2_018e_858f,
+            0xc6e5_662f_83a1_e56a,
+            0x02a2_000d_679b_2dba,
+        ]),
+        pallas::Base::from_raw([
+            0x2f6a_f6ea_7c76_b2a0,
+            0xb8c7_4bfa_9b69_4056,
+            0xfb79_16ad_496d_1e14,
+            0x1df4_ca05_f14d_04e2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6088_f6ef_e336_ea5c,
+            0x7497_110a_3ab5_54c8,
+            0xbb4a_8a7e_90ab_1b70,
+            0x16ca_05a8_a644_e307,
+        ]),
+        pallas::Base::from_raw([
+            0xbc6b_4bf6_eee0_03cf,
+            0x9497_c239_5d17_314c,
+            0xa528_8c4e_96df_57eb,
+            0x05ec_2cd2_70b2_c32f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1d4b_5aba_2d51_6844,
+            0x0ebb_e763_14ac_cff0,
+            0xcae2_52c3_1950_5947,
+            0x106f_7769_986b_58ec,
+        ]),
+        pallas::Base::from_raw([
+            0xec32_de24_bd53_2691,
+            0xaf82_b179_9fba_b8aa,
+            0xadf7_592d_33f3_4d51,
+            0x1dd7_ab82_5380_22db,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7701_5dcc_356c_94f9,
+            0xe75b_8f5f_f89f_73ab,
+            0x934a_7c89_81e2_4737,
+            0x0952_ea05_e704_9ee3,
+        ]),
+        pallas::Base::from_raw([
+            0x7bdb_c92d_9d50_75f7,
+            0x9985_21f0_5f28_9ed4,
+            0x920d_4ffe_7a28_6fb2,
+            0x19b4_edf6_4b69_3292,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2d93_48b7_18f9_b3ac,
+            0x1ee6_c3d8_07e9_cb72,
+            0x27f7_47e3_bd7b_0b59,
+            0x3344_264e_0e0f_39af,
+        ]),
+        pallas::Base::from_raw([
+            0x5392_14e5_9f27_7f85,
+            0xbab5_f15c_75c7_fa84,
+            0x5e92_a501_1bcb_a88a,
+            0x39be_7bc4_6e98_ebef,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xeffc_5cb8_5798_7d36,
+            0x4231_e383_e08a_1c06,
+            0x83f4_c3e7_99b4_5fe5,
+            0x1bc4_4ad9_628d_b324,
+        ]),
+        pallas::Base::from_raw([
+            0xb051_73ed_1a60_83bc,
+            0x5d3f_b49d_377c_550f,
+            0x9ec4_1f7e_c634_c956,
+            0x2ea2_a4bd_7949_e352,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xce11_b86d_18ab_15c5,
+            0xfdfd_58bb_e7cf_ebbd,
+            0x011a_1665_1ade_a741,
+            0x1867_7683_03fc_dcbe,
+        ]),
+        pallas::Base::from_raw([
+            0x8c65_a7b3_7436_63a6,
+            0x0895_f62c_82b4_bcca,
+            0x697f_2648_19e5_bf42,
+            0x1c9e_8a89_693a_c155,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x20f1_50c1_b583_d962,
+            0x5b7c_4fdd_6bf3_33a4,
+            0x6616_f214_6b56_0695,
+            0x3c09_152a_ae39_f9d7,
+        ]),
+        pallas::Base::from_raw([
+            0x8d4c_d15c_11e4_5f76,
+            0x3ee6_fba2_a365_7a95,
+            0x57df_944d_2990_ae68,
+            0x3e40_9606_dd7f_fcfd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0f1d_cbaa_c64e_207f,
+            0x24ce_0096_04e8_74af,
+            0x8206_a341_4f16_3b2b,
+            0x1841_ffa5_9560_5383,
+        ]),
+        pallas::Base::from_raw([
+            0x7445_4a84_172d_dfb7,
+            0x4e61_663d_e974_8c87,
+            0x49ac_c46f_7652_ae10,
+            0x35f9_eb31_2da0_3d40,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x71b2_cf29_e621_7cd2,
+            0x85fb_6de4_0cdc_c772,
+            0xfcb0_2d60_0a46_877a,
+            0x0dcd_cba8_2583_6234,
+        ]),
+        pallas::Base::from_raw([
+            0xa5e7_e058_d611_327b,
+            0x1f29_dadc_d446_02dd,
+            0x50d2_0616_22aa_60e5,
+            0x1bc1_4ad7_6911_5d28,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x76ad_98d4_ab3b_419f,
+            0xffad_8c50_6e25_97ff,
+            0x3a06_bbb6_43ea_1ebd,
+            0x3da3_b0f3_6ffb_c5f7,
+        ]),
+        pallas::Base::from_raw([
+            0xf747_ed0e_6bf0_296d,
+            0x08b5_9863_d358_93b0,
+            0xfec9_a301_a77f_064e,
+            0x18e9_b59e_d7dc_0386,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1965_7b9b_65a0_684f,
+            0x2138_8c2d_19c4_1b69,
+            0xae4f_210b_d783_87fa,
+            0x2e4a_f156_17f9_aa1b,
+        ]),
+        pallas::Base::from_raw([
+            0x7e5a_da88_7dbb_23ac,
+            0x076a_81da_aa1a_cea5,
+            0x46f5_2c4a_4629_12c7,
+            0x377c_3c47_a79a_cd00,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd9e6_9b4f_775a_8960,
+            0x3cf8_686d_3a8c_2253,
+            0x007c_16e7_38dd_f650,
+            0x275c_d87f_d1a9_affb,
+        ]),
+        pallas::Base::from_raw([
+            0x2eac_fae8_83be_39dc,
+            0xa147_cb90_545e_9792,
+            0xb894_660b_0ca5_2156,
+            0x102c_7bd5_54e6_2a1f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3d50_5225_818a_d743,
+            0x7610_a4da_2296_4451,
+            0x4ac1_dba3_15cd_e138,
+            0x2a63_e9ea_93b4_8b68,
+        ]),
+        pallas::Base::from_raw([
+            0x602f_7b8a_987c_a0ae,
+            0xf26d_d9ff_d12b_9ca2,
+            0x7434_3696_6cde_5174,
+            0x1d77_2b01_598d_98f6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9ee6_79fa_2503_f12d,
+            0xe3a0_67a8_ab7c_c1a7,
+            0x4a04_cfd6_a900_5d0d,
+            0x20b6_e71f_03ce_350e,
+        ]),
+        pallas::Base::from_raw([
+            0xff99_352e_01d9_e9c0,
+            0x1cff_eb28_f38b_918a,
+            0x3f5a_211d_6b2f_6a4b,
+            0x35fc_1ac5_b933_3f78,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfd29_ac30_0d2e_c13b,
+            0x6d86_8828_a090_269d,
+            0x617b_b4e3_df1d_6e3f,
+            0x1062_44bd_2099_3d22,
+        ]),
+        pallas::Base::from_raw([
+            0xba4b_6207_7d83_b053,
+            0x752b_22b3_0554_a5b4,
+            0x9399_8320_f3a0_12c4,
+            0x3e32_1295_f9a7_53f3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x21b0_2a13_67da_2df6,
+            0xd95e_f536_2abb_71e5,
+            0xc466_cf97_819a_bb8d,
+            0x0ac1_d2f5_a9ef_d18d,
+        ]),
+        pallas::Base::from_raw([
+            0x652c_72da_e56f_053d,
+            0x3e16_df3c_dd09_25f8,
+            0x4486_dc64_f0ae_ae8e,
+            0x1083_d1d6_afcc_3d28,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd66d_903f_1504_cb22,
+            0x7d74_1d95_24fd_f1a2,
+            0x0420_1142_5b05_701d,
+            0x2581_a1db_a4a6_28f9,
+        ]),
+        pallas::Base::from_raw([
+            0x31f5_3161_9435_04e8,
+            0x56b5_086a_e923_27ee,
+            0x0470_dba6_f453_d40b,
+            0x37b7_3cbb_6a46_8bc3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5a64_fae6_2a62_095a,
+            0x1a5d_b99a_a3cc_09e1,
+            0x5c87_bf4d_b4f1_d4cf,
+            0x3554_e145_5ac7_ce25,
+        ]),
+        pallas::Base::from_raw([
+            0x62fb_29aa_b259_653c,
+            0x1079_e028_f669_bf99,
+            0xc7b5_e1a2_b66a_56d3,
+            0x1da9_6c27_0679_663d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa38a_7597_05e4_c595,
+            0x93b5_16bf_3679_9104,
+            0xdcf3_617c_06b7_eca9,
+            0x1c04_9649_6246_d90a,
+        ]),
+        pallas::Base::from_raw([
+            0xcb9b_62de_2098_b010,
+            0x0b11_bddc_e6c4_3c5b,
+            0x0e06_9619_2171_a4b5,
+            0x0ca0_f9bd_545e_b563,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xabcc_ccbb_5ce1_d68c,
+            0x6f7c_af47_e50d_a282,
+            0xf36a_135e_abaa_806f,
+            0x0c6e_bade_1095_aae8,
+        ]),
+        pallas::Base::from_raw([
+            0x759c_cc9e_69e6_b3e2,
+            0xf9dd_54df_05a2_63bf,
+            0x89da_d73c_cf47_946b,
+            0x0312_d8af_2b83_bc52,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3d63_f419_3209_4084,
+            0xa82e_0939_a10d_d3bd,
+            0x09a4_2d48_e016_ca24,
+            0x22d5_2560_48fb_a5d6,
+        ]),
+        pallas::Base::from_raw([
+            0x205f_917b_e385_f08e,
+            0xe8ba_59ea_1582_96c5,
+            0x07db_5f05_1202_61f4,
+            0x1b27_fe10_cf0d_2d81,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc3c5_2026_c4c0_cdbc,
+            0xe5c9_a075_9804_c4f1,
+            0x333d_a34f_899b_6d01,
+            0x0893_9b6f_69ee_9ff1,
+        ]),
+        pallas::Base::from_raw([
+            0x5738_5c90_a60b_6a29,
+            0xcbfe_0af0_9889_9ee3,
+            0xe56c_4f49_ed05_94c2,
+            0x1a8c_87df_a7e4_fed0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9bcc_8617_524a_7052,
+            0x9ed1_bc3e_a53b_8039,
+            0xe83b_0a28_98c1_b3ae,
+            0x2156_b879_f378_005f,
+        ]),
+        pallas::Base::from_raw([
+            0xe445_4fd6_1a4c_0c03,
+            0xfd2d_77ee_9e45_d137,
+            0x364c_d7d1_beca_462e,
+            0x0454_61a0_6d06_0224,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa6dc_e40b_7742_c8df,
+            0x77f6_fb9f_2f5e_4cbb,
+            0x8971_a6f2_c8a1_01f6,
+            0x06f6_891d_e68d_557e,
+        ]),
+        pallas::Base::from_raw([
+            0xe136_eb32_f32c_9360,
+            0x43cc_807a_1583_94e3,
+            0xb883_68d8_bd3f_0e85,
+            0x39c7_f743_a3ff_d99b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d92_8024_dec5_a188,
+            0xc6fc_a92b_d386_353e,
+            0x5812_c85d_f51b_7666,
+            0x3622_96ae_b985_ad75,
+        ]),
+        pallas::Base::from_raw([
+            0xaf74_4347_0ebc_cc5b,
+            0x8664_df03_bd4f_e04e,
+            0xbb7c_dfe1_90ed_a6e1,
+            0x04b7_49f0_6ac1_8d6d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x47cb_7e3a_61e6_5d64,
+            0x2668_8f4b_611d_168b,
+            0x851e_b1c6_f081_270a,
+            0x0bcd_6577_07d9_c4d3,
+        ]),
+        pallas::Base::from_raw([
+            0xb8a7_9c1d_0164_6e59,
+            0xaca0_0a81_3cbe_8d14,
+            0x9be3_d622_a4d4_2261,
+            0x228f_44ec_ff21_0aaf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x01e8_32eb_32fc_77d8,
+            0xa37b_d49f_cf1e_6d1d,
+            0x4ade_7626_003a_6902,
+            0x2810_18ba_6873_285b,
+        ]),
+        pallas::Base::from_raw([
+            0x3b22_bd8c_3f6a_e0f7,
+            0x647a_d4e9_cc9e_9df9,
+            0x599f_264e_e5e2_861a,
+            0x1bc7_4dbb_c711_e11b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xea31_502c_f1b8_0e15,
+            0xc33d_5160_cd48_b428,
+            0xcc23_c910_de17_adec,
+            0x07de_f9ce_1aa5_9c47,
+        ]),
+        pallas::Base::from_raw([
+            0xa4ae_eeba_b464_5932,
+            0xb123_1450_1087_4d65,
+            0xd74f_2873_e2b3_fbd6,
+            0x37f7_28e5_56e4_462f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7e30_9f95_bb4b_c5b4,
+            0x6062_f47d_7261_c580,
+            0x8e3d_4f2a_6d15_8590,
+            0x01d5_e294_1638_a398,
+        ]),
+        pallas::Base::from_raw([
+            0x2d94_25e0_5176_6252,
+            0x661f_3a26_6d6d_2f2b,
+            0xe226_6037_2ff4_b8dd,
+            0x1217_12c3_778e_e4a5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8089_bc3e_77ce_6f7c,
+            0xa6b2_22eb_d80f_7fc0,
+            0xe9b8_b790_943e_8250,
+            0x1095_0660_66b4_15b1,
+        ]),
+        pallas::Base::from_raw([
+            0xecaf_5823_aa30_216c,
+            0x1bd3_7176_ae8c_c867,
+            0x6646_5d17_3a00_4c92,
+            0x1708_b8da_bbac_5fa2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0f5a_b3f4_1ed5_0406,
+            0x3ed6_b824_6b8e_8193,
+            0xefc8_17a7_c166_72ef,
+            0x03d9_e65c_55e0_6fed,
+        ]),
+        pallas::Base::from_raw([
+            0xd266_0a0a_3a15_efd9,
+            0x3158_3160_0238_603a,
+            0xd08a_576e_ef04_0407,
+            0x12b5_fc79_3386_02ad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xafb4_5038_861a_b261,
+            0x3336_2512_0ea2_ddef,
+            0xd0d2_1e8a_bde9_c3f0,
+            0x3142_5607_0f44_6667,
+        ]),
+        pallas::Base::from_raw([
+            0xd47d_2bf6_b0cd_9526,
+            0xdfb6_5162_03ea_5997,
+            0x6bc8_e93a_d9f1_3d86,
+            0x36e3_7b1e_879f_a3fe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9641_b725_3871_63f8,
+            0x2f14_e213_977d_fb89,
+            0x872e_0f0f_818e_2401,
+            0x2705_4742_9401_5255,
+        ]),
+        pallas::Base::from_raw([
+            0xe914_98e9_e277_bf3e,
+            0xbc1c_1336_46cc_0de8,
+            0x810d_265f_9dbb_24c2,
+            0x073c_4fa7_0c22_d417,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x72e0_8476_4f57_cbdb,
+            0xaade_43be_ed5a_ec74,
+            0x6b7a_19e7_38aa_efa8,
+            0x3fe1_03e4_b203_9c38,
+        ]),
+        pallas::Base::from_raw([
+            0xf7b0_a409_9047_5ffc,
+            0xf227_8b45_596c_d47f,
+            0x8e89_3c33_0061_9b20,
+            0x1e9a_0a12_9951_b344,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x273e_1d1d_25f4_def7,
+            0x2003_845a_3171_beb1,
+            0x6d17_8165_5f29_f2d4,
+            0x0870_5e7f_5d5b_29c0,
+        ]),
+        pallas::Base::from_raw([
+            0x5593_5829_fa5d_7cff,
+            0xf32a_41cd_f789_5d7e,
+            0x1bf2_ea43_d1a2_e73d,
+            0x020f_bf08_0453_d654,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc7cc_99c7_2db8_9a13,
+            0xe869_f872_1a3e_457f,
+            0xf8d5_9b75_f9e9_5e27,
+            0x2a3c_dfb9_b0ec_7221,
+        ]),
+        pallas::Base::from_raw([
+            0xda92_9b87_c8b3_43ae,
+            0xb33c_22e3_1aca_23f0,
+            0x7ef6_c020_43d5_029b,
+            0x0f16_75e5_fb1b_6016,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdaa7_c49c_581e_a8f5,
+            0x5e24_60df_0bf6_68a4,
+            0x04e2_ec29_9caf_6146,
+            0x2438_e7ee_c6b6_6289,
+        ]),
+        pallas::Base::from_raw([
+            0xd94c_c550_0990_5ce3,
+            0x9149_39c9_7c98_acbb,
+            0x90d6_a0d5_e69d_004f,
+            0x0e30_9799_430a_005e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x16d2_ba71_df3d_ba37,
+            0xf987_3a39_9072_46f3,
+            0x7309_0fc7_2e2c_8978,
+            0x3e6a_ca9f_7693_dbd8,
+        ]),
+        pallas::Base::from_raw([
+            0x14bb_c667_e12f_8242,
+            0xb8ab_dadf_64c7_ce8e,
+            0x1a94_5bc1_7bb2_ea2a,
+            0x012d_bbf6_af71_3aec,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x240d_00da_c9d7_36ac,
+            0x5e01_5424_1ed5_6054,
+            0xb77b_8e76_3e42_9cfb,
+            0x1443_95ec_38cd_baef,
+        ]),
+        pallas::Base::from_raw([
+            0xa1d5_463f_18ef_f4f8,
+            0xac13_6a2b_6eec_e912,
+            0x175b_2f1a_655b_abb6,
+            0x11f8_e577_8862_dc12,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x917d_91a5_1b8e_9f26,
+            0x96a7_d4b3_e2db_2ef9,
+            0x6467_2893_ebec_80a5,
+            0x0415_c72c_6add_a7ad,
+        ]),
+        pallas::Base::from_raw([
+            0x31fe_78e5_541c_b69d,
+            0x6fd0_a42e_a164_a907,
+            0x779b_fe38_59e7_a99d,
+            0x1502_f313_f9ea_cc53,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6299_68d0_f509_962c,
+            0x0fd8_546c_a5b9_a1e8,
+            0x4f71_7137_88ee_864d,
+            0x21be_39d7_bb78_98ff,
+        ]),
+        pallas::Base::from_raw([
+            0x2e30_597c_56a1_b4fa,
+            0x1a02_ad53_8381_07e1,
+            0x4d02_2a9e_1cfd_6d33,
+            0x1f3c_e37d_51aa_b4c1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd2e8_277a_9787_ad9b,
+            0x06b8_ef87_3d81_def3,
+            0xcb3f_a058_0cdc_9294,
+            0x3e0e_b866_b610_dad5,
+        ]),
+        pallas::Base::from_raw([
+            0x416f_988d_290b_fce1,
+            0xe99d_9c46_9eea_a7fc,
+            0xe826_d37c_968c_f31a,
+            0x303a_5065_2996_bc3e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x970d_c43d_b7f9_6596,
+            0x8bbe_a004_7bbe_b37a,
+            0xffbf_c07c_4f86_ff20,
+            0x2eb0_e870_2a5b_817b,
+        ]),
+        pallas::Base::from_raw([
+            0xcdec_df92_c73a_cf15,
+            0xa349_b8f4_4bc1_1a4b,
+            0x4ca2_5c82_1a35_0486,
+            0x0c35_a8ee_8f63_ce4e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3330_feff_82c5_909d,
+            0xa037_ccf5_1576_8f65,
+            0x04b4_e5bf_d165_ab7e,
+            0x3d8f_d30d_2e98_701f,
+        ]),
+        pallas::Base::from_raw([
+            0x76cf_354c_613f_6916,
+            0xb3ac_8cfc_ef68_b8e4,
+            0x121e_23ec_fb6d_3348,
+            0x049c_4676_6965_007e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd28b_5af8_208a_ad16,
+            0x85cc_0c01_2522_9ec1,
+            0x0010_00b7_fcba_b744,
+            0x2f16_3cb5_e159_50da,
+        ]),
+        pallas::Base::from_raw([
+            0x8204_a5a6_854c_8f0c,
+            0xaec2_50ed_9f9c_1bf3,
+            0xa678_973b_4ca8_cfba,
+            0x2060_78c2_1062_adf6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb572_bfa2_ae44_bae7,
+            0x4739_7be5_ed58_65d9,
+            0x12d8_2660_d7d5_cd9d,
+            0x3802_91b0_d0fb_11f4,
+        ]),
+        pallas::Base::from_raw([
+            0xda9e_f004_e34f_00ed,
+            0xd1c7_c9c5_f145_719e,
+            0x5d07_b071_e032_9c77,
+            0x111f_1bf3_5aca_cc6c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9d4e_fee9_dbec_f74b,
+            0x54b6_6b98_6ed1_1c40,
+            0xc69d_e967_1f2a_9277,
+            0x381e_f7c2_0901_6f19,
+        ]),
+        pallas::Base::from_raw([
+            0x78cd_6291_4c3d_4870,
+            0x969d_b03f_4366_a7c9,
+            0xc63f_edfc_ad98_8cca,
+            0x0871_c3f1_196c_ed39,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbf95_5ae0_cd25_88e4,
+            0x1a5d_be45_5bc1_85c6,
+            0x800f_fb1f_93e7_1b70,
+            0x0499_6852_1fa4_93b8,
+        ]),
+        pallas::Base::from_raw([
+            0x0888_a02b_46a4_447f,
+            0xbf4f_428f_9cb9_8c28,
+            0x8137_0703_14ff_9de2,
+            0x1387_9076_4310_b410,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd12e_b4c0_0f6b_07df,
+            0x4867_9cb7_f377_39f4,
+            0xd28d_9c85_b17d_4400,
+            0x0bd9_47e1_a875_e349,
+        ]),
+        pallas::Base::from_raw([
+            0xda62_8d27_e56c_e1ba,
+            0x3fb9_f8d5_96b8_9fd8,
+            0x5de3_b929_f658_6237,
+            0x1535_62a4_2638_2eb6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x36af_3b03_bde6_af5c,
+            0x4fa4_3315_d7f6_0dc6,
+            0x7067_a020_a491_9197,
+            0x1c32_47f1_b306_ddee,
+        ]),
+        pallas::Base::from_raw([
+            0xc652_bb5a_650f_f696,
+            0xf53e_890c_d2fe_64e1,
+            0x9dbd_c120_670e_ac51,
+            0x0786_cce0_4423_b08a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9b52_5a04_5c02_abe2,
+            0xab88_03cd_3c69_fc10,
+            0x4f5c_04e7_4967_f822,
+            0x3d7c_ba8b_8d24_c973,
+        ]),
+        pallas::Base::from_raw([
+            0xc36f_6da9_c20e_8ca7,
+            0x3ab8_0cd3_18c7_054d,
+            0xea00_c48b_f1fb_88d8,
+            0x2a85_cd4f_78e9_75d5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xac5b_f95e_d4b6_11a2,
+            0x136d_4d81_80c7_2c43,
+            0x1fb6_df88_d28c_8d4e,
+            0x246a_fe1b_17d5_6011,
+        ]),
+        pallas::Base::from_raw([
+            0x3668_7b33_4756_4972,
+            0x1467_dd2d_360d_bc64,
+            0x410c_df5f_93a9_6258,
+            0x3588_8b68_24c6_e8a0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5dc2_2a72_4a62_d492,
+            0x2660_9b2b_a750_8d8c,
+            0x5059_5ae6_1b53_8471,
+            0x266a_34b1_9765_cdff,
+        ]),
+        pallas::Base::from_raw([
+            0x7fbe_5bdb_d358_a2cb,
+            0x40a4_f7fd_1ca8_a76a,
+            0x491d_3273_a50e_004a,
+            0x3568_0e4a_dc4f_62ad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbfdb_990c_f977_fd4e,
+            0x6437_369d_ca6d_cc9e,
+            0xc7b5_d048_b550_51ee,
+            0x250b_73ec_71d5_4645,
+        ]),
+        pallas::Base::from_raw([
+            0x41ae_e46b_4412_b381,
+            0x9e9e_e500_6ddc_61fb,
+            0xec2f_6df5_bbce_cf94,
+            0x1793_e215_0b16_603d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6f88_6d79_770c_6247,
+            0x1500_0374_0fa1_e182,
+            0xf376_03b2_1769_2f82,
+            0x3d1f_7368_0af5_b7ec,
+        ]),
+        pallas::Base::from_raw([
+            0x81b6_a75a_e4f9_729e,
+            0xe735_aeaa_341f_ae17,
+            0x4eff_b7c5_e1aa_bb0a,
+            0x0223_c1d4_4c5d_c34a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x419d_f14d_7945_7532,
+            0xd780_283f_4e02_c512,
+            0xf0fc_47a1_756c_c536,
+            0x1ce3_0702_a06b_ed82,
+        ]),
+        pallas::Base::from_raw([
+            0xaa20_9753_1479_6860,
+            0xb77b_9671_d950_53a0,
+            0x804e_e63e_09dd_84ba,
+            0x09e1_711b_96dd_a806,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x607f_ba34_a589_c019,
+            0x79bd_bab6_5d82_5998,
+            0xcaca_a4bd_7fbb_d938,
+            0x3694_ca85_2cf8_e54d,
+        ]),
+        pallas::Base::from_raw([
+            0xf555_28c0_3fb3_7e54,
+            0x4a49_b781_11bb_66e4,
+            0x94e4_77e7_59c5_515b,
+            0x369b_a0f2_0b09_fe48,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa903_4843_3c41_e761,
+            0x334f_6c0e_07da_b2ae,
+            0xfa76_35b1_0775_e8e1,
+            0x1fdd_43d1_901d_1921,
+        ]),
+        pallas::Base::from_raw([
+            0xb042_af7e_11f5_e1a3,
+            0x72dc_c343_0584_0ada,
+            0xec1f_22f3_40a0_7a4a,
+            0x3d4d_cd14_0c46_afa7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6516_53a1_ad5a_b863,
+            0x3109_c5a4_3f3a_7299,
+            0x4a26_89fe_ac51_8cd9,
+            0x32cb_28e5_306f_4b25,
+        ]),
+        pallas::Base::from_raw([
+            0xce22_41f1_7770_0732,
+            0xe9c2_68bf_1477_f81a,
+            0xb643_c5f5_bed9_f57c,
+            0x1ab3_8e0c_8fed_3eaf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xad37_f47d_cf5b_c929,
+            0xfec4_68cb_3ca6_b620,
+            0x388c_5260_e2cd_625d,
+            0x3e14_2094_bf47_b461,
+        ]),
+        pallas::Base::from_raw([
+            0xe191_3bcc_b9c4_dbd6,
+            0xf56b_018e_cbd3_94fe,
+            0x7a84_d88b_b2d8_d148,
+            0x1095_d08b_31d1_571a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4c24_da73_a43b_18a4,
+            0x192f_ad49_886d_4f1c,
+            0xb9ca_2200_29b0_fd9e,
+            0x23c3_cd8e_910e_3f61,
+        ]),
+        pallas::Base::from_raw([
+            0x446a_7b2c_0c53_995b,
+            0xf640_9e82_f746_d6c6,
+            0xd49a_f1a5_d660_f046,
+            0x289f_6688_c8f7_a7da,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9322_2f89_f469_19ea,
+            0x23ca_ce6d_d52f_41af,
+            0x7b9f_0036_a0b5_b7ec,
+            0x36a9_0ecc_3af7_1bf8,
+        ]),
+        pallas::Base::from_raw([
+            0xac78_4d5a_2fed_e96e,
+            0x83c7_0ec2_e5cc_48a1,
+            0x623c_7acd_dabe_6588,
+            0x262e_4d3c_689f_55c2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc48b_b03e_d3dd_130e,
+            0xc8da_668d_e3e8_c4c0,
+            0x8496_8dfb_620e_4d78,
+            0x21d2_8b83_ef14_3a07,
+        ]),
+        pallas::Base::from_raw([
+            0xa607_41ba_7c9f_512b,
+            0xe9af_6b59_b23f_048f,
+            0xb49b_ffe3_9a97_dd6b,
+            0x073c_ef7a_eab5_e67c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbb8c_2ebd_02ef_5c02,
+            0x9f3e_fb6b_a8a3_d5e7,
+            0xdd5e_afd6_8224_7afd,
+            0x0a4d_0696_34c2_1d49,
+        ]),
+        pallas::Base::from_raw([
+            0xde8b_2693_7445_2117,
+            0x8827_3e13_9ac8_9175,
+            0xaf4d_3f11_60fa_ce22,
+            0x372e_f7de_420c_f5b0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x007a_3171_e694_ad4f,
+            0x0b63_7d43_b499_6483,
+            0x3f41_d9a4_71d9_e31e,
+            0x2304_4159_f767_5fe2,
+        ]),
+        pallas::Base::from_raw([
+            0xc689_d9d9_98f0_22c3,
+            0x3843_04a4_96ef_f3ea,
+            0xcdf7_07fb_a786_9698,
+            0x00ff_aa52_52f3_1075,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc7ed_5950_3bbd_ae0c,
+            0x0771_0a4e_f363_a8cf,
+            0xb854_a41d_2524_2222,
+            0x361c_d998_8c71_f7d1,
+        ]),
+        pallas::Base::from_raw([
+            0xd1c3_f5a8_e31d_e85e,
+            0x61f9_1fe1_a2ed_72f5,
+            0xd02a_3047_b442_7a6b,
+            0x28a9_2ac8_140a_7f61,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe69b_8ff5_68db_09ef,
+            0xa955_a884_45b6_1b1d,
+            0x0181_0ff8_0bc0_0a37,
+            0x3f77_7487_2da1_b634,
+        ]),
+        pallas::Base::from_raw([
+            0xbafc_6197_5f58_119e,
+            0x8ec8_6817_94cf_4a02,
+            0xf79d_b4f7_ef61_586b,
+            0x1ecb_0eff_dee9_b332,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2e7c_1b51_5d9a_6b02,
+            0x6db8_5ed9_bc41_5b63,
+            0x9e61_c761_f278_31e1,
+            0x1d63_7f07_1de7_68c5,
+        ]),
+        pallas::Base::from_raw([
+            0xb695_013b_a88a_e8fc,
+            0x6087_861a_5652_9bf5,
+            0x37e4_54e2_449e_c3d0,
+            0x32f1_ac34_a889_a6b1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x45c6_e979_95c8_8f9d,
+            0x9177_13bd_364f_3511,
+            0x18b5_d48a_f737_4cec,
+            0x1acb_50aa_82bc_21f3,
+        ]),
+        pallas::Base::from_raw([
+            0xa0b5_ac1e_0e73_137c,
+            0xe9cc_3b69_7c2a_33dd,
+            0x3843_fbd6_837f_46b9,
+            0x3af2_c307_dabd_f022,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf320_517d_b185_80af,
+            0x4ee4_765d_dab8_aefa,
+            0x6b87_9ec8_cb2c_34ec,
+            0x1804_0e61_d02c_9aa7,
+        ]),
+        pallas::Base::from_raw([
+            0x7799_9a31_ca66_44d5,
+            0x5c57_40bb_df52_8c37,
+            0x3c6f_fa5b_9973_5cc2,
+            0x2d42_7fcb_2de3_02b2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb702_1f4e_248b_d314,
+            0x45a6_d47d_1e77_fc6f,
+            0x71de_177e_9447_c0b3,
+            0x2c36_6f8e_fc81_8295,
+        ]),
+        pallas::Base::from_raw([
+            0xd417_641c_3ef7_59be,
+            0x46f0_a493_376d_27ea,
+            0xcc58_89f3_a398_3e94,
+            0x24ca_8204_9524_6a0c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d41_08a1_fdf9_022d,
+            0x445b_c1f6_ff38_ab2a,
+            0x2c34_468f_08c5_67cd,
+            0x27c9_224e_b005_f2fb,
+        ]),
+        pallas::Base::from_raw([
+            0xb67f_e386_3ad8_5858,
+            0x35e7_89c1_3270_0ae0,
+            0xaf43_ea8e_be9c_72c2,
+            0x35ff_b97b_a593_0142,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x679c_9c77_fa3e_adea,
+            0x050c_617e_c159_e9dd,
+            0xe4d0_ad0b_279e_5d53,
+            0x1c13_85a7_acca_d2d0,
+        ]),
+        pallas::Base::from_raw([
+            0xa605_758c_76d8_f99e,
+            0x245c_09b6_233e_c109,
+            0x9951_123f_fade_c94f,
+            0x0e06_cb32_e11a_db9e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdda6_c646_97fa_e3a1,
+            0x57f4_3e80_51b9_d2bc,
+            0x05ac_1626_2bfa_455d,
+            0x27e6_b214_c46d_b4ea,
+        ]),
+        pallas::Base::from_raw([
+            0xe0df_3924_7265_cae4,
+            0x09c0_1eb2_c3d4_7a5b,
+            0x4b07_d6dd_a718_dc3c,
+            0x046e_e6b1_16a4_d680,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8827_884a_0d84_93fb,
+            0xb641_d4be_17e5_2a25,
+            0xd1bb_d65e_ca13_f1e5,
+            0x14e6_8375_9dbd_f9b7,
+        ]),
+        pallas::Base::from_raw([
+            0xc5bc_27f2_043e_09d6,
+            0x4383_1bd8_740d_18bc,
+            0x4d28_b951_db51_646c,
+            0x2ff2_925c_ae35_4106,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd2ab_b8ea_a809_c065,
+            0xa526_4c4f_d558_42f7,
+            0x36bd_6833_52ed_686a,
+            0x3e03_a120_a2d9_028e,
+        ]),
+        pallas::Base::from_raw([
+            0xadcd_15a2_2b64_bcff,
+            0x8b41_fbcf_fa41_1d4e,
+            0x6275_e729_aac4_1718,
+            0x05f4_d1dd_a528_76ca,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x259f_45df_db18_4292,
+            0x85a3_9f21_bd27_88a2,
+            0x7741_d050_9d2b_a469,
+            0x3628_e48a_fad3_7caf,
+        ]),
+        pallas::Base::from_raw([
+            0xf38c_a509_52c2_edd4,
+            0xdbc8_3dce_fa5d_964f,
+            0x67e5_1358_704a_dc0d,
+            0x2dd7_037f_7772_b72a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xde93_38bd_92bb_3d57,
+            0x944b_7238_c860_9441,
+            0xe03d_5bc0_6ceb_4255,
+            0x2889_0bf6_1603_be43,
+        ]),
+        pallas::Base::from_raw([
+            0x598d_dfbe_ff5b_91c4,
+            0x9017_7d24_b040_66d8,
+            0x29fe_24aa_ca62_9592,
+            0x0e1b_b56d_d00f_ee5d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x80f2_b1d9_cd31_a2c3,
+            0xfeca_8134_5364_e82b,
+            0x667e_8405_4786_7826,
+            0x196a_2aa5_dfcc_2404,
+        ]),
+        pallas::Base::from_raw([
+            0x44f2_ea4e_50cb_7b22,
+            0xa203_aca9_842b_2587,
+            0x9c3f_525e_e03f_487d,
+            0x1dbb_0fc6_d624_36c8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd9f8_f81d_1726_2ea7,
+            0x48c2_218d_3eba_8bbc,
+            0x6a31_acc9_902a_abeb,
+            0x1086_be57_c6c6_9382,
+        ]),
+        pallas::Base::from_raw([
+            0x9b21_c4ee_4438_3fb0,
+            0xffbb_187c_d2c6_7113,
+            0xbbdf_86a0_0d9c_9df9,
+            0x1900_0dbd_6915_ef39,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb87e_e6a1_7150_f083,
+            0x1dd3_172a_c7ca_bb4c,
+            0x450d_6085_7553_2aa7,
+            0x0e87_4af5_a4ea_bea9,
+        ]),
+        pallas::Base::from_raw([
+            0x27d9_3005_6a39_bdf0,
+            0xaffc_ea8f_faac_2475,
+            0x27ce_f92b_ac1e_26d1,
+            0x1dce_ecf2_93f2_e855,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xec32_f124_f67c_b6a6,
+            0xe76f_c0a9_bb04_6fc7,
+            0x08c9_2fb9_a869_9d4b,
+            0x0aa4_f0ca_3613_1f19,
+        ]),
+        pallas::Base::from_raw([
+            0xc77a_383a_f5f9_298c,
+            0x6c2a_0c57_8f61_7a6a,
+            0xa8fb_83f4_8769_5723,
+            0x0dac_9338_2fb1_7d74,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa4ae_ed26_9bd7_f7af,
+            0xcf45_5590_be79_8165,
+            0xbb66_a5c2_ca07_ba02,
+            0x2f71_97fb_33e0_2f3b,
+        ]),
+        pallas::Base::from_raw([
+            0xc6f5_fa79_26dc_55ff,
+            0xb1d7_1d00_792c_b875,
+            0x4300_1b82_b34b_fc81,
+            0x2585_89f9_249d_35ff,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xca86_6954_84ea_c326,
+            0x64d8_b454_7605_528f,
+            0x47a1_1398_f1c8_6914,
+            0x0626_f333_6694_8b96,
+        ]),
+        pallas::Base::from_raw([
+            0xcb9a_c695_8cdf_ac1a,
+            0x51a2_395d_f28c_5a56,
+            0x2982_997a_0143_8762,
+            0x20a0_3634_e587_cdea,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4a22_3815_ad6a_af87,
+            0xb23d_c239_fe51_f114,
+            0xe744_6fbc_1d76_71f9,
+            0x008f_b3c4_f277_6241,
+        ]),
+        pallas::Base::from_raw([
+            0xef35_ffbc_38cf_2be1,
+            0x6406_1067_6e4b_152a,
+            0xcd39_1b65_f743_55ca,
+            0x33a9_ac54_8faa_2dc4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb43e_6160_16b7_ac1a,
+            0x2d17_45fa_33dd_dbbe,
+            0xfcf2_c7dc_158c_b996,
+            0x222d_d6b4_22f5_41da,
+        ]),
+        pallas::Base::from_raw([
+            0xd15f_8eb6_6b9a_1971,
+            0x735e_b437_8b76_de8c,
+            0x7a9e_fd09_e21c_cb2f,
+            0x2605_6891_36d0_47e3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa728_670e_b27d_0c27,
+            0x0ffa_859b_d86e_09f4,
+            0xfc12_1ddd_5bca_1d3e,
+            0x3ed5_f5ac_9270_3915,
+        ]),
+        pallas::Base::from_raw([
+            0x2d66_ad9c_f3b0_9eb5,
+            0x0f76_4a1b_3975_493f,
+            0x311c_7d39_de6c_80e4,
+            0x10c5_a910_538e_2161,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd8ef_2e55_08fe_449e,
+            0x9795_f0b4_9b38_21dc,
+            0x436d_3359_1956_ff92,
+            0x2ef0_c2a1_ff67_562f,
+        ]),
+        pallas::Base::from_raw([
+            0xea61_5ac0_2396_252c,
+            0xd3c3_e572_248f_f4ec,
+            0x0891_5193_35ef_15f8,
+            0x0e0b_7ddf_c509_d053,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x595f_7475_529b_3ad1,
+            0xc202_93a2_e114_ef1a,
+            0xa318_7931_4b87_03f2,
+            0x25b5_defe_56df_8131,
+        ]),
+        pallas::Base::from_raw([
+            0x3207_683d_ce75_c89a,
+            0x0aa3_95cc_ee66_6a3e,
+            0x1d75_0d4b_db70_3a63,
+            0x21a8_8c14_6d5d_50f2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf1a0_a157_fe44_54d0,
+            0xe58f_ea83_b9a1_8e48,
+            0xe75f_1ebe_b321_bd75,
+            0x2ff0_cde1_263d_eb99,
+        ]),
+        pallas::Base::from_raw([
+            0x78ad_13cb_3871_d58b,
+            0xd70b_f90a_dedf_4a15,
+            0xce59_469b_4a86_1855,
+            0x07d0_b9f2_d8b0_f8b3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1186_5fc8_3d94_8160,
+            0xef33_cdf6_7d9d_f8ac,
+            0x77fe_c81f_1b87_0816,
+            0x33e4_5c8e_81bc_f208,
+        ]),
+        pallas::Base::from_raw([
+            0xa79c_f57d_5f8f_8039,
+            0x46bd_dbab_182f_1e8d,
+            0x121e_1e62_c3e6_2d1b,
+            0x2aab_8626_7a08_126b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7309_5f4e_9257_4e26,
+            0x800a_92c5_65c6_d0ab,
+            0x959b_7396_8c33_df3e,
+            0x1712_0abc_db9a_666e,
+        ]),
+        pallas::Base::from_raw([
+            0xa4ce_db71_dcbf_dda4,
+            0x23a9_bb12_cc45_7125,
+            0x4984_6598_5044_5012,
+            0x15b9_a823_452d_151a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1881_58c9_d4f8_37b3,
+            0x35e1_f53a_12ea_d4bf,
+            0x43b0_1080_7105_9672,
+            0x12a1_bb18_f6ae_aff4,
+        ]),
+        pallas::Base::from_raw([
+            0xd0c9_3a8c_6405_aeff,
+            0x7c79_db4b_21ed_b868,
+            0xfe64_ab4d_3285_580d,
+            0x21f2_6e9b_4e96_4ad6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5ead_7427_d8bc_93be,
+            0x1074_df9b_a240_dc10,
+            0x5e02_f458_b883_e475,
+            0x1658_9488_1a71_48ba,
+        ]),
+        pallas::Base::from_raw([
+            0xcf20_d6a3_30b6_e493,
+            0xc050_fc5b_3e2a_b5ca,
+            0xcad1_ca64_521c_4b4d,
+            0x2d9b_99eb_4fa9_4da9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbf05_9e52_20ab_1fc0,
+            0x8a7d_612b_8a1e_0e3a,
+            0xeade_4244_f4cd_b38c,
+            0x3331_7f8e_8124_54f2,
+        ]),
+        pallas::Base::from_raw([
+            0xc888_9b91_0593_4c5e,
+            0xe569_c70e_0a7c_97f6,
+            0x44d5_b9c8_f891_48f4,
+            0x2312_5a5b_68f5_c72f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x94e4_bf9b_f2a6_1428,
+            0xa590_5768_df89_f310,
+            0x5f26_eac4_e6d7_bf48,
+            0x1777_8461_3a31_42ef,
+        ]),
+        pallas::Base::from_raw([
+            0xd4c5_a93d_01a9_e944,
+            0x00f3_0bb3_f382_1ab4,
+            0x3e30_b05e_9001_115c,
+            0x13aa_867d_0d62_d501,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d77_6ee6_83d5_6884,
+            0xc690_3133_0cb0_7fad,
+            0x03f9_fa71_d83c_b6ac,
+            0x385b_2c3f_69f2_2e4e,
+        ]),
+        pallas::Base::from_raw([
+            0xe52a_da77_f926_479c,
+            0x4032_18dd_a3f9_f7d5,
+            0x698a_ca67_0fe0_3b63,
+            0x1be6_e46f_45a9_0d73,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb54f_2488_b34c_23f3,
+            0x20f7_4d0f_dcf3_556c,
+            0xb629_c46b_87ca_5183,
+            0x3e05_1b07_97e5_4d7d,
+        ]),
+        pallas::Base::from_raw([
+            0x2845_df6b_a7f4_c4a9,
+            0x01d8_7bb3_efc5_3212,
+            0x7438_846f_f0c3_68eb,
+            0x054c_4ccd_9568_783e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0e03_2b41_edf2_601e,
+            0xca56_6380_2656_a1ab,
+            0xa9c1_73f4_5b36_4aba,
+            0x370b_f6a4_76fe_98c7,
+        ]),
+        pallas::Base::from_raw([
+            0xe83a_b9c8_7073_23c8,
+            0x68cb_12fc_922c_e463,
+            0x1d58_cba7_aae2_cd1d,
+            0x1641_dcbe_d773_85ac,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x33d9_50b2_0786_8cb1,
+            0x5546_4d24_79b0_1881,
+            0xcef8_ae63_70b3_e7cf,
+            0x1edd_0d6f_5654_df9f,
+        ]),
+        pallas::Base::from_raw([
+            0xca19_5fd2_3bf8_6d7d,
+            0xd888_778b_481d_0c87,
+            0x7718_4cb6_9a9c_a004,
+            0x18cd_8422_c539_1785,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd3d0_061d_3c40_38a9,
+            0x35d2_ba6f_b33a_337d,
+            0x2b5a_ccd0_a048_8c8c,
+            0x3177_51f9_70f0_55c8,
+        ]),
+        pallas::Base::from_raw([
+            0x7da0_2d46_e5dc_cf44,
+            0x1948_7204_00fd_ac87,
+            0xd35d_2f05_7952_09ed,
+            0x067b_66e4_8fd4_40ae,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbe67_f5c1_c53b_6219,
+            0x0c4d_d3eb_49dc_5141,
+            0x1985_6e06_c83d_dc72,
+            0x0580_4e34_6c60_f39d,
+        ]),
+        pallas::Base::from_raw([
+            0xd970_b5f8_e84e_2eca,
+            0x8dee_bae7_6faa_0b0a,
+            0xce36_460d_4c75_cfdd,
+            0x0c0b_30a8_4eb6_c2ff,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd211_b3b4_85da_f337,
+            0x7caf_c1c9_d176_8b9b,
+            0x4f29_6d08_6aa0_6691,
+            0x1469_1756_396e_e450,
+        ]),
+        pallas::Base::from_raw([
+            0x908c_5ebe_6cb7_9318,
+            0x485e_123c_8a7a_1993,
+            0xba9c_8297_dc30_544d,
+            0x0b1b_b3c8_67ad_579f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfdbb_126a_9c89_8e38,
+            0xeeb0_b9e3_24c7_e16a,
+            0x2a63_649b_a4bd_3976,
+            0x2cbe_8ae3_38cf_2e67,
+        ]),
+        pallas::Base::from_raw([
+            0x02c8_e297_4287_df10,
+            0xfd4b_303a_ffcb_5e36,
+            0xfe24_5d64_99c2_2680,
+            0x2ad4_f003_ac6a_0942,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6366_45e4_5cf2_472e,
+            0x581b_fa20_8c70_06f3,
+            0x7f42_fc2f_a68c_53b6,
+            0x3e5f_5c59_a596_3e85,
+        ]),
+        pallas::Base::from_raw([
+            0x3fae_7cd7_1795_7498,
+            0x1897_f70d_330f_17cd,
+            0x08bc_c4a8_93be_9624,
+            0x16b6_5a70_880a_1196,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xecb8_a34e_6cfa_6400,
+            0x872b_a68d_1737_b069,
+            0x692b_8b56_4d30_00d6,
+            0x1ac8_6b32_c2bd_28f7,
+        ]),
+        pallas::Base::from_raw([
+            0xcd15_73d7_4ab8_ecb6,
+            0x10d8_d456_d06f_8959,
+            0xc4d7_94db_40b8_a6a6,
+            0x0fc4_1405_f622_01e8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb13c_4e21_fb86_cc29,
+            0x6dd4_2256_220b_a841,
+            0x485d_d357_9109_44f6,
+            0x13e6_37f3_e85c_6236,
+        ]),
+        pallas::Base::from_raw([
+            0x393e_d2d6_d195_2520,
+            0x8714_20e0_7d4d_41d9,
+            0x4f97_e4c9_1b4d_d5a0,
+            0x0ee1_6e26_9356_7999,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x18f0_e818_b67f_78c4,
+            0xc78e_8276_5cfe_52d7,
+            0x1029_108e_3372_5249,
+            0x1ce7_779f_3e32_15bb,
+        ]),
+        pallas::Base::from_raw([
+            0x0a3c_2c79_69f4_7def,
+            0x924a_5bd3_c10a_b277,
+            0xa684_5102_3fda_00de,
+            0x2848_c67f_8b86_351e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x785a_0070_6ef4_0a19,
+            0xfc9e_e16d_1e79_450c,
+            0x21b0_be13_8f13_ee31,
+            0x205a_6e79_eb30_e515,
+        ]),
+        pallas::Base::from_raw([
+            0x109b_7b36_54cd_ff92,
+            0xe219_fd76_bb44_d664,
+            0x26dc_47f5_a4c6_cfd4,
+            0x1396_0022_9638_8e73,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x284f_eee3_dedb_7e0a,
+            0xeba3_d6d6_ab74_8634,
+            0x206d_133e_7387_88b3,
+            0x06e2_9444_0819_67d2,
+        ]),
+        pallas::Base::from_raw([
+            0x32f2_7745_dd5d_fa26,
+            0x61b9_ff69_431d_6c7e,
+            0x7b5e_c381_d868_ecdd,
+            0x396d_b442_1b1f_998e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf09f_2925_09b3_435a,
+            0x5dd8_7f72_700e_6289,
+            0x428f_036b_3027_e4e7,
+            0x3ba1_38ab_852a_c4c2,
+        ]),
+        pallas::Base::from_raw([
+            0x31eb_6ef7_e3a6_63c9,
+            0x66fb_a519_222a_5eef,
+            0xf056_ea85_d9a5_5f2d,
+            0x0f9d_1a6e_42c7_af7b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2ed8_b60f_5a7d_5c4d,
+            0x3c41_ec81_bb2b_0bd4,
+            0x5162_51c1_cfd3_cc57,
+            0x1628_f847_8492_257a,
+        ]),
+        pallas::Base::from_raw([
+            0x1028_dea0_df49_3ad2,
+            0x9f64_8ee0_54ba_1f5d,
+            0xa5c3_00a6_334b_5071,
+            0x22ec_d647_4c9d_8dcb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xba78_884f_a618_b4c9,
+            0x2490_cfbd_ef1c_b8de,
+            0x6262_4555_49b8_a7cf,
+            0x22de_6c00_52d8_822e,
+        ]),
+        pallas::Base::from_raw([
+            0xb574_d8b6_4eb4_f13b,
+            0x3ae5_7da8_c6fd_7491,
+            0xd951_849a_c56a_d2eb,
+            0x3d95_2743_8af5_bb67,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x423b_21c9_a9ae_e502,
+            0xb560_584f_a159_372a,
+            0xbde3_a652_e154_27f3,
+            0x13e9_25ee_106a_6648,
+        ]),
+        pallas::Base::from_raw([
+            0x21c0_83c5_f051_3cd4,
+            0x1aa4_9c06_bbfb_670f,
+            0x003e_2620_a935_dec4,
+            0x06d0_2c9b_fefc_d300,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1bac_349a_3968_df9d,
+            0x4f7a_9588_dd94_8cf4,
+            0x9c25_b2b9_425b_41da,
+            0x34bc_c380_6706_0422,
+        ]),
+        pallas::Base::from_raw([
+            0x2e43_e508_767d_ab6a,
+            0x8f2e_1357_30de_d522,
+            0x1e5d_425e_7b9c_b97b,
+            0x3b61_c068_3a4c_a1d1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2f22_1515_dc8d_33b3,
+            0x8744_45d2_f4cf_5744,
+            0xd439_9e9c_7a24_704b,
+            0x0a48_d0cd_b7aa_cb6d,
+        ]),
+        pallas::Base::from_raw([
+            0x3265_a994_76ed_b4f8,
+            0xad35_4f4c_83db_34fb,
+            0x8c76_979a_0183_f56b,
+            0x24c0_3c4a_383c_f34b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0264_48de_6bde_8f36,
+            0x47df_c98c_065b_94cc,
+            0x1bae_0086_8f7b_65d4,
+            0x3725_ede4_49fa_fc27,
+        ]),
+        pallas::Base::from_raw([
+            0x0784_2c74_c2a0_abad,
+            0x98b0_6931_a1fa_c65c,
+            0xa0a2_f3f5_c5a0_d649,
+            0x34e4_0ab4_f07a_f6aa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc04a_82a5_985a_802d,
+            0xf0dc_11c2_0ff2_f8e3,
+            0xf99c_8842_c343_ab5b,
+            0x1efe_d560_4943_bc1e,
+        ]),
+        pallas::Base::from_raw([
+            0x2b73_38af_72b1_7c87,
+            0x7a76_3e90_131f_458a,
+            0xf558_1a8c_ede7_797e,
+            0x2160_887f_54e5_5248,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa806_7929_bd78_8219,
+            0x4502_b7c2_0868_4ba6,
+            0x1824_a713_12fa_8662,
+            0x1d5f_eb68_ec9c_82c0,
+        ]),
+        pallas::Base::from_raw([
+            0xb50c_6fd8_a0ff_197e,
+            0x1ecb_67c8_1a98_17ef,
+            0x3802_668e_c3e2_e9ad,
+            0x171f_bfe8_b8ea_bdc5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3804_32cb_1aa3_0b20,
+            0x7206_9e76_128a_dbf5,
+            0xfe30_6281_13f9_413e,
+            0x3d95_faf6_a3c0_a23d,
+        ]),
+        pallas::Base::from_raw([
+            0x5c91_686d_7b70_5f0c,
+            0xa432_25ab_ab76_f79a,
+            0x1534_bae8_b052_0e10,
+            0x1351_24f7_7d93_8a2d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd8a5_d43e_0733_a49a,
+            0x59fc_166c_4df8_685b,
+            0x6b2c_730b_481e_d580,
+            0x0b74_b4c9_b3a5_8739,
+        ]),
+        pallas::Base::from_raw([
+            0xf7c3_af4c_034b_e968,
+            0x280b_4dd1_da46_b742,
+            0x817c_6343_92a5_2bf1,
+            0x20c6_7219_0fa4_fd21,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9b9a_5d85_cc8c_cea9,
+            0x8a3a_db6c_635f_69e0,
+            0xd9e9_bb8c_1560_1184,
+            0x1dcc_4260_292a_b5ee,
+        ]),
+        pallas::Base::from_raw([
+            0x1291_c646_f66d_6966,
+            0xd0b2_d860_6baf_fadc,
+            0x5fe4_42f8_21f2_398e,
+            0x1b97_d042_35eb_620c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9111_47ed_8621_b0cb,
+            0x15d9_a0c5_9075_13d4,
+            0x55b6_8241_f6b5_5714,
+            0x388f_21cd_bdba_18a8,
+        ]),
+        pallas::Base::from_raw([
+            0xd7f4_b6ed_57dd_0be9,
+            0xc659_dca1_c72f_718f,
+            0x673b_b001_0480_c230,
+            0x089f_3734_b014_2b1d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3fef_e211_66f0_64d3,
+            0xab1e_a692_2b23_fe74,
+            0xabcc_16b8_5b13_edd3,
+            0x2f1e_5892_5bfd_9702,
+        ]),
+        pallas::Base::from_raw([
+            0xe111_5ff5_cd6b_6e0c,
+            0x3b8e_6060_6a62_c9d3,
+            0x2a71_2c0a_2329_962a,
+            0x398a_1f1d_e5c2_a3b5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb1f7_5faf_516c_5527,
+            0x1834_e411_a954_5d74,
+            0x5a3d_8f22_5192_48e5,
+            0x0c9b_5c3b_99e5_e2e4,
+        ]),
+        pallas::Base::from_raw([
+            0xc519_1b97_cd4c_9178,
+            0x3d1f_2cfd_ec1d_9f37,
+            0x77ea_1ab5_a674_9b12,
+            0x1c54_7537_1a50_9219,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xeb48_bb7c_bdf0_eca3,
+            0x3818_af8f_3f8a_23f9,
+            0x1225_2bc6_8251_52c2,
+            0x20f2_231c_6b91_756b,
+        ]),
+        pallas::Base::from_raw([
+            0xe56c_b770_41bc_64df,
+            0x6507_3efb_ec7c_88eb,
+            0x4db8_fc10_e0e3_e9a3,
+            0x25f5_aa8d_7ed0_e37a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x989d_1174_c5b5_1592,
+            0xbc22_de23_d318_4f3d,
+            0x0d74_e3e1_c30c_9216,
+            0x3c9f_46e6_9974_ef0e,
+        ]),
+        pallas::Base::from_raw([
+            0xca71_bc9f_274e_a68f,
+            0xda0a_f4d4_b787_77b0,
+            0xe011_197f_5425_5452,
+            0x02bc_1f24_5fad_07ce,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf66e_e106_a081_b017,
+            0xbda0_9fb9_141a_ed66,
+            0x8d9b_85d3_a5b2_218f,
+            0x3368_44df_9aa0_5205,
+        ]),
+        pallas::Base::from_raw([
+            0x21cb_9ec2_7a50_283e,
+            0x6526_eb8d_8a98_355e,
+            0x4625_6651_5a5b_5bd2,
+            0x0dcc_cfa2_eabb_31aa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdf01_ebdc_d5d5_1078,
+            0xdce7_4ffe_4597_40a9,
+            0xec30_c721_88d4_926f,
+            0x25f4_e3ba_66d0_0bd2,
+        ]),
+        pallas::Base::from_raw([
+            0x1aa4_cf28_305d_bd48,
+            0xf1ac_ed41_29c5_2fce,
+            0x6a79_ae99_419d_2023,
+            0x287a_ccc2_aba7_dda2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf6c9_67b1_61e4_3701,
+            0xba59_4171_cf75_314a,
+            0x2366_fd0c_9845_d326,
+            0x07ea_75ef_2e55_1043,
+        ]),
+        pallas::Base::from_raw([
+            0x5f6a_b363_1d50_02b3,
+            0x42a7_f1d3_8df7_1886,
+            0xb175_5fda_e244_41b1,
+            0x06d8_b881_47e9_e884,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7760_0ee1_2469_f797,
+            0x9d28_9411_63cf_2100,
+            0x94f5_d9bc_1e38_d7ac,
+            0x0d9d_a8ed_2348_f1d8,
+        ]),
+        pallas::Base::from_raw([
+            0x9dcb_1045_7ef9_4381,
+            0xf26f_888e_41de_250d,
+            0x4db4_569e_a5be_98ff,
+            0x2c6e_26fe_e783_b1b6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8252_2117_8b68_e77e,
+            0x62b6_4c04_daaf_0edb,
+            0x56fc_ef6a_c5ce_9b21,
+            0x0060_2183_26a9_b20f,
+        ]),
+        pallas::Base::from_raw([
+            0x9381_f756_c758_57be,
+            0x2c64_8722_e9b2_aad0,
+            0xd21d_fa97_22b7_899f,
+            0x37b3_34ab_36d1_3b97,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1dca_d2a7_c9ac_257e,
+            0xf481_bd41_dfde_561e,
+            0x7fb9_5d59_e14f_9ba1,
+            0x164f_e5ae_3a75_5ff1,
+        ]),
+        pallas::Base::from_raw([
+            0xd85d_2380_04ed_04b9,
+            0xf0a2_f4ca_240b_67be,
+            0x328d_6539_b137_e8c0,
+            0x1f91_7ad2_3c72_2938,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7c1a_1f69_511d_ddc8,
+            0xafef_22d0_8a93_c6bb,
+            0x6b7d_de6e_5dfb_8e86,
+            0x0418_14fb_9b1b_1fdf,
+        ]),
+        pallas::Base::from_raw([
+            0xc232_8d8d_5ade_ee19,
+            0xfccd_233e_1faa_328c,
+            0xb74a_eb62_bfd2_085d,
+            0x349b_497a_e2da_b674,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xee76_492e_de05_8c40,
+            0x9667_cea9_6321_0dfd,
+            0x9ffb_dfe7_bbaf_4d78,
+            0x024a_7f47_bbf2_edfb,
+        ]),
+        pallas::Base::from_raw([
+            0x2798_9453_54c0_b6a6,
+            0x0258_04f1_e97c_9306,
+            0xa589_745b_f70f_31f8,
+            0x2980_753e_d2a0_1bd5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc217_79ea_fb8d_cf1f,
+            0xc7d4_3d68_74e8_1a99,
+            0xdf4e_e87a_3da7_0225,
+            0x2674_6664_7ec0_66ec,
+        ]),
+        pallas::Base::from_raw([
+            0x9a08_438d_3e66_71ff,
+            0x2597_f5fd_7ef0_e033,
+            0x3490_d2b3_16e4_336b,
+            0x0af1_68b8_2ce5_50d0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9ee7_3ace_ad81_d7b9,
+            0x7f7d_4d51_c420_2287,
+            0x7ea4_8cda_f72c_21d5,
+            0x3ba5_ab89_7c05_9262,
+        ]),
+        pallas::Base::from_raw([
+            0x65a7_2df6_e7af_1f62,
+            0x5018_7079_ed87_6e01,
+            0xdd49_7bac_b2f8_f533,
+            0x2305_b1e1_10ca_8348,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7bb8_856e_6f81_0866,
+            0x2910_87a6_3558_342c,
+            0x0197_f6a1_a5ec_2aee,
+            0x2e3f_0e84_be82_a936,
+        ]),
+        pallas::Base::from_raw([
+            0x24d2_4f23_defe_d26e,
+            0xa6a3_fdcb_e123_531f,
+            0xf554_544f_9059_9b7a,
+            0x1b2b_2c74_2c05_d788,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x77aa_8cc5_e75f_61b7,
+            0x7ab0_d22c_2c7a_225d,
+            0x261a_0bae_d904_6233,
+            0x23ca_5427_dfe6_fe96,
+        ]),
+        pallas::Base::from_raw([
+            0x3965_f126_8be5_f4f1,
+            0xfbbc_f05d_19e0_4468,
+            0xcf20_7a1a_dda3_da90,
+            0x2dc1_38b3_e758_ae9f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe4cd_d4bb_51f1_3a97,
+            0x0ae0_b307_d947_f166,
+            0x95c1_0d80_9554_61dd,
+            0x2663_0dcd_f58c_a26b,
+        ]),
+        pallas::Base::from_raw([
+            0xec69_76ce_7f25_e7fb,
+            0x21f1_ef67_603e_b2b9,
+            0xb538_45ae_65dc_d7ef,
+            0x006b_e5d2_3475_d4f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd937_daf5_c74d_37b5,
+            0x7b6f_ad60_d7b0_78d4,
+            0xeaa2_48f9_cc19_2e8e,
+            0x1bff_9849_3f9c_61f3,
+        ]),
+        pallas::Base::from_raw([
+            0x1eb4_de71_6993_79b8,
+            0x1631_ada7_84b0_c628,
+            0x00af_5200_06fa_74cc,
+            0x1497_0f48_9ac5_2a83,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x585d_8ca2_b07b_c36c,
+            0x6a0e_125b_b3fb_3153,
+            0x1656_99d8_a31c_48e5,
+            0x0c90_2843_2d3d_2ecd,
+        ]),
+        pallas::Base::from_raw([
+            0x37b6_c3aa_0a9f_0553,
+            0xe75f_7c83_3b31_0906,
+            0x0b28_1359_fedd_80f0,
+            0x2aea_f21d_78e4_2ae7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf905_b492_f098_abbb,
+            0x91e7_32ad_153d_fbb9,
+            0x23b7_9b3d_c26f_956e,
+            0x30a8_6999_b4de_0802,
+        ]),
+        pallas::Base::from_raw([
+            0xab98_1e4a_ef1a_ce80,
+            0x3e6a_1ab7_cc7f_76f7,
+            0xfcfc_ac90_b0a9_24bd,
+            0x290c_7b1a_b364_d9f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x89d2_5903_1495_2310,
+            0xb8f6_4793_e3fe_9b02,
+            0x1298_314c_1048_dded,
+            0x35f6_6aef_3f87_5f47,
+        ]),
+        pallas::Base::from_raw([
+            0x7f09_c9ec_4e0b_9a00,
+            0x02e5_58a8_8b63_c5e8,
+            0xdff2_a2ab_eb34_d24d,
+            0x182a_04c6_61a5_3ea5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7749_9a48_5a8d_c3c0,
+            0x7301_8bb7_d60b_54a8,
+            0xbd74_5aec_e134_f4d3,
+            0x0ce6_4340_9896_9f25,
+        ]),
+        pallas::Base::from_raw([
+            0xb214_a94a_a5e8_5ac9,
+            0x3a7b_00db_2c5b_71bf,
+            0x1f1f_97e9_4a95_3ea7,
+            0x0fdc_1f13_90f2_bdc3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfd7b_3712_3634_9249,
+            0xb29c_31f6_a23e_e901,
+            0x428c_09b7_ab6a_19b0,
+            0x3edb_6eac_7f4a_7fc3,
+        ]),
+        pallas::Base::from_raw([
+            0x41ae_5f62_33d0_39fe,
+            0x351b_2fad_6a83_3fae,
+            0xb027_de87_dc3c_abd6,
+            0x1c3c_6b89_8ff4_fbe6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8579_eab4_36d7_7379,
+            0x6976_f60e_a7ad_6a4f,
+            0x4d44_0486_bd7f_82e0,
+            0x33df_087b_d169_6b33,
+        ]),
+        pallas::Base::from_raw([
+            0xd8ae_253e_7704_e1b1,
+            0x6c80_3c98_5ca9_cb72,
+            0x4f76_0a94_7173_e72a,
+            0x1749_3c2a_a576_b53e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d8d_9ce3_bee5_d2a8,
+            0x3b11_1e32_1416_7ec7,
+            0x866a_5644_f7bc_2429,
+            0x2f53_e65c_d670_6b69,
+        ]),
+        pallas::Base::from_raw([
+            0xc9bc_a98d_5327_54b9,
+            0x1c20_0a22_3360_ac52,
+            0x8fd1_441f_3249_5f67,
+            0x0891_e7a6_7b7a_a04c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x33ac_b0c2_3336_e65e,
+            0xe9bd_f7b7_365f_b280,
+            0x3fdb_301c_b124_359c,
+            0x225c_f8a4_48fb_0bfc,
+        ]),
+        pallas::Base::from_raw([
+            0x7bd0_525c_7c01_37f5,
+            0x25cc_2e9e_5ef5_3cac,
+            0x0abf_86e7_33f6_5865,
+            0x25ec_f837_9bd5_34fd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1959_74df_433a_0d39,
+            0xf92a_d555_fe66_45c1,
+            0xde22_fe69_6b67_05a3,
+            0x30c6_33cd_5289_cf7f,
+        ]),
+        pallas::Base::from_raw([
+            0x2de2_06ae_215b_cdb9,
+            0x1dba_733a_5d1c_f06f,
+            0x7795_0562_7c29_07b6,
+            0x2e05_a443_58f8_295f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8c8d_3e5a_0e9e_27e2,
+            0x33a7_ac34_3383_9ad5,
+            0x813a_ef88_67ca_27f2,
+            0x0351_82c5_aa57_93ea,
+        ]),
+        pallas::Base::from_raw([
+            0xe37a_d328_0519_9e75,
+            0x9492_ecb8_7225_4d8f,
+            0xe440_0d58_32d9_3b4f,
+            0x23d7_f634_31de_0e04,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xed93_fc4d_8b7c_d2c7,
+            0x2ff9_e82a_2813_1039,
+            0x9b41_402f_8edd_7482,
+            0x2de8_408a_e87c_5526,
+        ]),
+        pallas::Base::from_raw([
+            0x8482_7aee_9078_6f5b,
+            0xfca5_1acc_7aa9_8a6f,
+            0x3b26_c0d8_1fb1_7641,
+            0x1e97_cfa5_3430_ce4f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x28d8_3f6f_dd30_2e4b,
+            0x8b33_1616_df48_b162,
+            0xeb66_7f0b_abbe_d5c6,
+            0x1bb4_9f7d_2f00_992d,
+        ]),
+        pallas::Base::from_raw([
+            0x8f1b_2585_5975_5b8f,
+            0x992a_5645_ac44_49a4,
+            0xc7f8_a778_378a_878e,
+            0x2388_d495_aa9a_2f14,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb3ee_832b_cca6_e15c,
+            0x302e_0976_d09c_f5b0,
+            0x3b73_c911_07ca_0590,
+            0x1033_729d_e32a_20e5,
+        ]),
+        pallas::Base::from_raw([
+            0x824d_03c9_62ab_fb97,
+            0x3376_05c3_fca4_da48,
+            0xd938_5b92_c1b1_eb7b,
+            0x04e9_d53b_9dd7_0353,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2a31_ceea_2bfe_1b89,
+            0x459c_7864_3eed_fab2,
+            0x8015_ebda_9a08_21f7,
+            0x3176_5d48_ed2e_8f38,
+        ]),
+        pallas::Base::from_raw([
+            0xbbd2_e12e_2200_a567,
+            0xee7e_8b8e_60c9_3161,
+            0x4450_13a8_b51e_a17f,
+            0x3fb3_ea3d_413f_600f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5792_e1bb_65af_5499,
+            0xf38e_ecce_d9d1_90db,
+            0x782e_777f_aef9_a1ed,
+            0x3275_1af6_d47e_89f4,
+        ]),
+        pallas::Base::from_raw([
+            0x0558_8657_d79c_9fac,
+            0x4cfc_fa59_c797_3faa,
+            0x46ec_529c_3e3a_e025,
+            0x2e88_9fc7_1cfe_b590,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4f36_5a89_27df_98cf,
+            0xdc4d_ad2a_e1df_90d4,
+            0xe8c7_f8c9_f534_a3a6,
+            0x1f53_db72_546f_88b1,
+        ]),
+        pallas::Base::from_raw([
+            0xc521_f710_64f3_458e,
+            0x55f4_b813_b4eb_ca44,
+            0x1fbe_fca1_69c2_c1f7,
+            0x3270_72d0_0569_db08,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe51c_bf5e_4534_c30a,
+            0x9f11_38fe_5b82_ac9b,
+            0x31e5_618e_64c9_6740,
+            0x1626_a008_8065_ae1f,
+        ]),
+        pallas::Base::from_raw([
+            0x4e4f_35ca_0362_3b2b,
+            0x589e_4ec7_4b43_ca66,
+            0xadfc_a852_9739_1779,
+            0x3ec9_c8c2_307f_b4fc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe558_1772_2b26_fcc5,
+            0x8cd2_78c7_57d7_bc6b,
+            0x216f_0ed7_5683_8c13,
+            0x2bad_b214_0ca1_67ef,
+        ]),
+        pallas::Base::from_raw([
+            0x7b8e_54ac_bde4_5d74,
+            0xf12b_ee08_f085_ef2b,
+            0x59be_cb38_9bb3_7cba,
+            0x10c2_e53a_d289_3205,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x05bf_6073_a2cc_922b,
+            0xaa40_a1b1_c161_a6f5,
+            0xe7aa_a199_d7b3_f2be,
+            0x2ec8_895a_ff5b_5376,
+        ]),
+        pallas::Base::from_raw([
+            0x21a9_2a6f_5c37_ad34,
+            0x9ed0_8f7e_4c30_d354,
+            0x0c92_ae6b_73d0_ddf0,
+            0x02af_e3c9_f6d8_8524,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa364_1c63_2ef7_445f,
+            0x1601_4441_ab17_06e9,
+            0x5e0c_e5dd_d268_6d5c,
+            0x2962_bd56_585a_49b2,
+        ]),
+        pallas::Base::from_raw([
+            0x8f33_3912_6908_c490,
+            0xb337_01a1_f6fb_f2c6,
+            0x5b5d_ed95_d5a1_587e,
+            0x175a_30c9_9d0b_dcfa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf982_0b5c_aa89_84ec,
+            0x8cd5_6f8a_04f7_0000,
+            0x45bf_1e43_42e6_c668,
+            0x2b33_5ef2_cfc8_0c83,
+        ]),
+        pallas::Base::from_raw([
+            0xd28e_8c9a_a973_eb4c,
+            0xfc8d_633c_c565_5eb8,
+            0x49f8_808f_b1f8_2460,
+            0x26df_2492_c732_e56c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xcc02_e14a_ed10_15df,
+            0x7ab2_e6da_6148_1b32,
+            0xf1b8_ccf5_7959_7c1f,
+            0x1f39_1c76_d2a5_87d4,
+        ]),
+        pallas::Base::from_raw([
+            0x6161_8e3c_c900_c078,
+            0x8051_d2da_5db8_ca06,
+            0xf00c_bba6_4a81_7e59,
+            0x0212_f279_9961_28a4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xba12_bea4_1ed1_352d,
+            0xc72a_1238_3074_4e06,
+            0x774b_4680_7bce_521e,
+            0x1b55_f307_4483_1944,
+        ]),
+        pallas::Base::from_raw([
+            0x4339_05b5_7199_f756,
+            0x5018_a2d2_8374_18cd,
+            0xc369_3735_482c_e33f,
+            0x06d1_33c4_e935_ed22,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x17d2_e055_42f8_9a6b,
+            0x63c4_572c_834a_9911,
+            0x7c98_197d_30e9_06b9,
+            0x1bb8_0e9c_7b1c_a773,
+        ]),
+        pallas::Base::from_raw([
+            0x757f_5677_f5dd_82dd,
+            0x6030_5392_57bb_182b,
+            0x22e8_e711_493b_46f2,
+            0x2462_9d6c_1107_6339,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc227_0007_0d48_67fa,
+            0x5a14_a6ed_8e5a_164c,
+            0xf31b_979b_e4fa_a4dc,
+            0x2260_9c32_ae8a_2fe1,
+        ]),
+        pallas::Base::from_raw([
+            0xcbbe_cd59_36ba_6c7a,
+            0x768f_7786_ddb9_39e0,
+            0x8ee0_8603_e206_e123,
+            0x14f1_bb3e_19ad_9852,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x36cc_d0fe_865e_1f8a,
+            0xd12a_6df1_2f9b_0183,
+            0x8fc1_7986_8075_3758,
+            0x230a_a792_feb2_5fa6,
+        ]),
+        pallas::Base::from_raw([
+            0x2489_a5cd_0cc0_bae0,
+            0x6f0d_c5d3_924f_4676,
+            0xea2a_6502_9734_9b71,
+            0x2596_75b5_6bcd_40ed,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc111_adf6_14ce_6cb0,
+            0x4aba_0e21_bab9_0092,
+            0x99e9_d9dc_1d39_ead0,
+            0x1d84_4ec6_9215_ea84,
+        ]),
+        pallas::Base::from_raw([
+            0x665f_32ce_34d6_3a28,
+            0x166d_7faf_b4f3_51da,
+            0x71f2_1dc9_4a3a_0837,
+            0x1cbd_dd75_d802_7a07,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbb16_0c4f_b407_3444,
+            0x4f4f_3c61_ac00_a4f7,
+            0x3c3a_271a_012b_988b,
+            0x1b4d_4160_2bd3_ae10,
+        ]),
+        pallas::Base::from_raw([
+            0x61f2_9112_22f7_b25b,
+            0xd2e6_eee7_d3df_2364,
+            0x156e_24e6_a1ef_9b96,
+            0x2cc4_b4f6_2b98_9419,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x90ad_379e_cf99_5052,
+            0xfdd3_5b06_452e_f10f,
+            0x3231_9fe1_ccd6_5847,
+            0x37d6_0e5c_6f9b_157d,
+        ]),
+        pallas::Base::from_raw([
+            0xef5e_4b6d_8a11_3611,
+            0xfff2_8aed_9719_e68f,
+            0x0022_f704_2bc5_4b86,
+            0x24d1_1739_87a0_150f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x67b6_a004_5b76_df29,
+            0xd780_7758_5dd1_72c5,
+            0xfd94_bada_1b47_6147,
+            0x055a_ef12_3bb1_7975,
+        ]),
+        pallas::Base::from_raw([
+            0xc40d_7914_b6fd_0059,
+            0xcd4b_03e5_9621_c0cf,
+            0x5804_3959_aa1b_5cb4,
+            0x399e_7d93_333c_9f5c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe987_36b6_6ff3_a8f3,
+            0xb633_6b7c_e2d0_1c29,
+            0x72b5_e138_e871_8594,
+            0x39e3_1af0_f759_2d94,
+        ]),
+        pallas::Base::from_raw([
+            0x2584_aad2_a9e9_6991,
+            0x4d67_c9b6_57a0_00f8,
+            0x1fef_7c39_245d_f66b,
+            0x39a5_61f5_b60e_13ce,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x12a8_2bb3_679d_2e7d,
+            0x7923_949d_cf92_266e,
+            0xb997_e0d1_8eda_a746,
+            0x2722_d4bf_937a_919d,
+        ]),
+        pallas::Base::from_raw([
+            0xdcc8_3afd_5c79_7391,
+            0x25a7_833d_a733_98ac,
+            0xd82e_903f_c00f_3f8b,
+            0x20b2_7ae6_263f_b41a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xef97_ec2a_52ec_aaab,
+            0x6456_0e73_b84c_0532,
+            0xf42e_0f1e_2164_9dbc,
+            0x362d_769b_3e3b_429b,
+        ]),
+        pallas::Base::from_raw([
+            0xa849_45d4_8229_07c7,
+            0x8319_319a_9dfd_eb24,
+            0x1b53_33bd_832f_9d47,
+            0x1a8d_4605_440e_14eb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2cfe_f055_520e_c484,
+            0xd39b_1ad9_5e10_8589,
+            0x1aaf_3ba7_8102_4b08,
+            0x39c3_c628_22fe_6009,
+        ]),
+        pallas::Base::from_raw([
+            0x45f8_894e_2232_67ac,
+            0x4296_0ed4_94f2_d879,
+            0x91c3_5975_0a2e_a628,
+            0x0055_3f58_2ea2_b9d8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9dd7_97f4_738d_a24c,
+            0x2759_7dca_3390_3158,
+            0x2569_cf2d_55e1_3988,
+            0x3a35_4403_855a_ecc7,
+        ]),
+        pallas::Base::from_raw([
+            0x8cd4_53df_2421_8d58,
+            0x3eb8_606a_39df_7bba,
+            0xe1b6_b3cd_016d_2c04,
+            0x2ac0_1e01_122f_2859,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x05ee_bec3_ee74_bbef,
+            0x9235_beb6_d261_7620,
+            0xbe1b_e89b_c34f_92fd,
+            0x3e52_f01c_752c_b88b,
+        ]),
+        pallas::Base::from_raw([
+            0xf3a9_51ca_cd8a_af53,
+            0xc74a_97e4_097e_c343,
+            0x092e_9e05_bffc_9a22,
+            0x3d5a_5fc8_11e3_ba39,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0ce5_3d2c_d538_3a58,
+            0x3ef1_eb32_6ca3_e72f,
+            0x3c78_7688_7698_fc9b,
+            0x3e74_cad7_49d2_c6c6,
+        ]),
+        pallas::Base::from_raw([
+            0x1f1c_faed_0c97_13d5,
+            0x3c44_cdd9_d43b_1878,
+            0xa99e_49e2_45a6_8dbe,
+            0x3d13_8bac_6757_2e90,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x83f7_da35_d76e_c72f,
+            0x5d1b_36e6_359e_06e5,
+            0x4467_a198_0e08_1507,
+            0x3416_e9d4_12cf_fc58,
+        ]),
+        pallas::Base::from_raw([
+            0x2730_0907_8ed4_7765,
+            0xb022_0ab4_912b_7d90,
+            0xb416_bc2b_6319_e9c9,
+            0x10fa_d4cc_a19a_342c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa6ce_2794_9121_884f,
+            0x92a8_a18f_02e8_8e44,
+            0xcadf_04d1_3995_43e9,
+            0x35f2_987c_a27e_1776,
+        ]),
+        pallas::Base::from_raw([
+            0x4f73_1ea3_e5d8_f863,
+            0xbefa_b1c9_dacb_8028,
+            0x91bd_d4ef_ab4e_02d4,
+            0x39ea_3c5e_6cb8_47ec,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xba0e_d638_9040_a526,
+            0xade3_6a2d_1046_ce2f,
+            0x07c4_031f_7d63_bfda,
+            0x3705_7fe5_eff1_6d4b,
+        ]),
+        pallas::Base::from_raw([
+            0xcb3d_da9a_230f_7d4f,
+            0x3ec2_fac7_acc4_e22c,
+            0x09bc_83c8_6022_52ca,
+            0x01d7_c169_7b90_1850,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0316_2275_7062_aa8b,
+            0x06e7_bf78_c301_eb68,
+            0x5a45_ea8c_518d_e8fe,
+            0x1a8b_f176_fdd8_5a16,
+        ]),
+        pallas::Base::from_raw([
+            0x1de4_ed97_6261_3da9,
+            0x7c2d_265b_75a5_c58e,
+            0xdecf_84e1_13a6_493c,
+            0x1853_c9ac_fc18_1ad9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x18f8_f690_da5c_857a,
+            0x8baf_5e54_f47a_4c66,
+            0xc596_5adb_9056_e487,
+            0x0b41_5e4f_c50b_4723,
+        ]),
+        pallas::Base::from_raw([
+            0xf758_8e8b_d1c1_5233,
+            0x3bb8_512d_7b1e_a04e,
+            0x3782_0e10_b3da_73da,
+            0x2c2a_1026_015a_e0af,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc491_0da2_ab40_38fa,
+            0x8919_0bf6_2117_4bb0,
+            0x11b6_3346_fe70_1c31,
+            0x01e3_fd81_583f_9350,
+        ]),
+        pallas::Base::from_raw([
+            0xdc61_17c0_98c1_601e,
+            0x1ab5_a27b_e45e_f81e,
+            0x52a2_3f16_f37e_1612,
+            0x0b0a_7f80_97e2_e6cf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x520b_062f_e78a_e7a4,
+            0x3cfd_2ac9_15c5_e15e,
+            0x6f6f_0d82_41c1_d542,
+            0x3d45_bbb4_6013_9f32,
+        ]),
+        pallas::Base::from_raw([
+            0xb1ac_5c97_c97a_3879,
+            0xef0c_c0f2_56ab_5321,
+            0x622a_376f_e184_60c6,
+            0x0529_7efd_374c_32b5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc226_4973_4c5f_c60a,
+            0xda93_2f28_b15a_50e6,
+            0xcce7_e413_9c75_ced4,
+            0x2a0a_7edf_84f3_ca0c,
+        ]),
+        pallas::Base::from_raw([
+            0x97e9_ae4d_cf51_e9c6,
+            0x7763_6a76_34f8_eb62,
+            0xc1db_731f_15d6_84d7,
+            0x28ae_45a0_2811_2280,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x48e1_7904_526f_f906,
+            0xd5fd_96af_3118_d25d,
+            0x16f2_1379_295a_3e85,
+            0x056e_6682_1209_f065,
+        ]),
+        pallas::Base::from_raw([
+            0x4d09_3b0c_18f0_4853,
+            0xf28c_aecf_c757_36ed,
+            0x0124_3cba_966f_a69b,
+            0x2bf0_69d1_a8f4_e195,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa2ab_2ca3_3f7a_8c18,
+            0x5fbf_9a9e_292c_3fee,
+            0x42d2_fb9b_62d4_bf6f,
+            0x1513_87c4_5019_b2a8,
+        ]),
+        pallas::Base::from_raw([
+            0x45de_0a99_709d_8f92,
+            0x013b_c62b_f18c_2d51,
+            0xdc17_e477_e451_a5b5,
+            0x189b_e9b3_2748_ccfa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb1d2_10c0_c338_3697,
+            0xdde9_1ff0_0a98_9f1e,
+            0x57b1_5511_fac4_ae0b,
+            0x3415_5509_eda9_fb3a,
+        ]),
+        pallas::Base::from_raw([
+            0x0336_a0e4_4d04_f2a0,
+            0x0c38_8030_f51d_1168,
+            0xdb88_0218_359b_52b6,
+            0x1669_7954_3729_1904,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf754_4d39_2e15_d646,
+            0x042c_85b5_e75c_bffe,
+            0xe38b_c7e1_c3a3_371e,
+            0x1f78_4954_3955_3ffd,
+        ]),
+        pallas::Base::from_raw([
+            0xb3b0_03ef_ce95_fe55,
+            0x3447_f020_3e43_a221,
+            0xd3ec_5b00_f101_a4a7,
+            0x1daf_fb55_fdca_e9bb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd022_b2e4_3b43_5771,
+            0x1f98_8073_0dae_5fa9,
+            0xa19c_1dae_ee9d_2279,
+            0x2d7c_10f1_1f8a_fbe2,
+        ]),
+        pallas::Base::from_raw([
+            0xe53e_4dc4_e5c6_9e51,
+            0x2af4_1c7b_e73c_bfc3,
+            0xf0e0_1136_6a8b_7018,
+            0x0b77_44c8_8c77_fcbf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9ed7_be62_3b40_bcb9,
+            0x3e31_f660_58df_eb96,
+            0x0158_90c1_6331_430d,
+            0x21ad_7eae_f186_64a9,
+        ]),
+        pallas::Base::from_raw([
+            0x4997_85d6_de57_f60b,
+            0x3a83_9c1d_c46b_2861,
+            0xaea4_ad0e_e1cd_df9a,
+            0x2472_290e_1d0b_53b2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa73e_3284_1eb0_d3cf,
+            0x5dd2_c1b8_16cb_cd57,
+            0xac16_7859_a9c2_66b6,
+            0x39d0_2f80_ee2f_5fdc,
+        ]),
+        pallas::Base::from_raw([
+            0xf33d_b523_81f4_08e5,
+            0xa267_d464_ddb6_94ce,
+            0xde0d_2c54_83af_3f7a,
+            0x3105_d9d7_4eb0_8afc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0f06_d3f2_ae51_741c,
+            0xb747_9d5c_a4b9_5a80,
+            0x7839_36ab_4715_89b0,
+            0x17e1_7cf7_cf73_abce,
+        ]),
+        pallas::Base::from_raw([
+            0x228e_32f0_7e39_0ca6,
+            0x92fe_35e7_744d_16a8,
+            0x235f_5e1c_a1d9_dfa7,
+            0x2adb_4c5b_3bd6_6726,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5819_6066_3266_3841,
+            0x24da_b91e_6b28_9f04,
+            0xb79a_cf49_63a4_4105,
+            0x21da_e5c6_0cb6_7703,
+        ]),
+        pallas::Base::from_raw([
+            0xa223_487e_6406_576e,
+            0x86b6_9d9e_7467_7eb2,
+            0x7e2e_531d_048b_6ae2,
+            0x1796_bb64_46b9_0567,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6b90_eb45_561d_04dc,
+            0xe743_9460_131c_ae9a,
+            0x2735_4e72_d3b1_3274,
+            0x181b_8996_1ce6_dbf2,
+        ]),
+        pallas::Base::from_raw([
+            0x4393_a574_6e7d_ebcb,
+            0x17b9_57b0_374b_7321,
+            0xf48f_1499_0aeb_f4ff,
+            0x2af0_a0cc_80d8_ad59,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8a86_d29c_9a81_c5a9,
+            0x2393_6d2f_411a_1f97,
+            0x50f6_242a_40fa_9525,
+            0x05b0_faf1_c315_0a4b,
+        ]),
+        pallas::Base::from_raw([
+            0xc70c_9a93_ab83_1c95,
+            0x6ed2_9ae9_ceea_efb1,
+            0xc7fe_68b2_22e1_cf03,
+            0x381d_cfd0_1918_44b4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7d5a_3127_5dbe_b7d9,
+            0x79e0_3de5_25ce_dab6,
+            0x935a_02dc_9fdc_eab4,
+            0x2b4d_4719_7811_4448,
+        ]),
+        pallas::Base::from_raw([
+            0x7673_78df_e2fe_1eb2,
+            0xbe91_9301_c9aa_5f18,
+            0x60ee_48c0_4796_a28e,
+            0x2f24_3e8c_7b7f_4693,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x58ac_fcec_3b6a_6302,
+            0x778c_ceb2_8a49_ffb4,
+            0x8c28_f55d_2771_8a04,
+            0x3c4e_cb86_6f24_7db3,
+        ]),
+        pallas::Base::from_raw([
+            0x7fbe_d4df_7b3f_fc86,
+            0x8540_6cc9_d470_f2ed,
+            0x0bef_5e3d_830e_0220,
+            0x2c60_c874_457a_d78e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2fb1_b9b7_f918_5676,
+            0x3b9c_0985_f979_e385,
+            0x3c64_e299_b19e_df3f,
+            0x38c6_03c7_f4c2_e21a,
+        ]),
+        pallas::Base::from_raw([
+            0xb328_4e4b_3bc3_34f9,
+            0x1a14_4a9d_9ca6_9b21,
+            0x8d0c_c279_4992_b9b6,
+            0x0ce6_19ca_d57c_1085,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9555_d1a8_a695_617a,
+            0x9f38_43fe_8064_4c5e,
+            0xa495_35cb_8d85_c2e7,
+            0x2d01_2113_eb7c_976f,
+        ]),
+        pallas::Base::from_raw([
+            0xb4b7_72bd_6491_50b5,
+            0x45dd_d92f_bdeb_1fd5,
+            0xedaa_6443_41d8_1b41,
+            0x2966_c1c6_12e0_0292,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6095_00b2_ffd5_9f23,
+            0xc0c2_61ef_b258_de48,
+            0xcbcd_b97b_51c2_00ac,
+            0x0bef_2f3a_5b4a_70a6,
+        ]),
+        pallas::Base::from_raw([
+            0x69f9_ffcf_df73_c226,
+            0x3c86_f51d_5b51_5ddf,
+            0x0826_406c_ef5e_e020,
+            0x05f0_31fe_225f_e8c9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x314d_d52e_0919_736c,
+            0xf554_b5ea_55e9_39ff,
+            0x7775_a5d8_d07f_9f27,
+            0x18b9_43fb_57be_afd4,
+        ]),
+        pallas::Base::from_raw([
+            0xf563_1374_8745_63e7,
+            0xbd1c_a9d6_622e_8cd2,
+            0xd060_6006_611b_cc4e,
+            0x360d_025e_38f6_02a0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x399e_2e74_4e2d_d3b9,
+            0x43e3_74f8_8b83_0cba,
+            0x4289_a1c4_48cd_f4e0,
+            0x196d_f315_b594_9716,
+        ]),
+        pallas::Base::from_raw([
+            0xc288_6cd6_673f_4deb,
+            0x21f2_2728_b89f_4ed3,
+            0x3439_6d66_d9a9_48fe,
+            0x1089_5fb4_40fe_bb75,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4316_a351_fc82_dd4a,
+            0xc959_7950_4cfc_ed50,
+            0x7273_943a_84cf_d15e,
+            0x15aa_aa6c_c1b9_6ac1,
+        ]),
+        pallas::Base::from_raw([
+            0x1b99_d676_512b_796d,
+            0xce39_dff1_cba5_dbbb,
+            0x421d_4fa7_1462_6d44,
+            0x34ad_9d2a_dfaf_5b69,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x49ad_a6d1_104a_6eef,
+            0xcf8b_024f_cfb5_b7cf,
+            0x840c_cc9d_3a3b_cc91,
+            0x29b9_5744_64e1_ddfc,
+        ]),
+        pallas::Base::from_raw([
+            0x0b87_716a_708c_c280,
+            0xf93d_800f_6f21_4435,
+            0x1d51_3c67_2d6a_83ff,
+            0x0ae6_d491_c1bd_f3bc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x475e_41b0_f1fc_c172,
+            0x09b7_1408_69c4_0bb0,
+            0xc7ed_2eaa_6b58_0c14,
+            0x1d5a_ddce_4556_7eae,
+        ]),
+        pallas::Base::from_raw([
+            0xb805_a989_ed0a_19a9,
+            0x18f0_a092_4a48_ce6a,
+            0x377c_c390_6667_48ba,
+            0x0101_7bec_5e9b_8784,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc424_869d_df4a_4fd1,
+            0xcb89_e9c6_1506_8e77,
+            0x6573_5f9d_0d64_ad1e,
+            0x1a16_1910_f3ef_d2a8,
+        ]),
+        pallas::Base::from_raw([
+            0x1c2a_ec44_2e96_e2b9,
+            0xe5e2_6cbb_e793_3cd1,
+            0x4152_f5a5_afcf_0b33,
+            0x18bd_33f6_2cd7_afc2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6cef_2ed4_0f12_62a3,
+            0x629f_be6a_9a08_13b6,
+            0xe188_e97a_fd70_5e9a,
+            0x1c81_abae_085e_bbdd,
+        ]),
+        pallas::Base::from_raw([
+            0x6b64_e32d_d83d_14cc,
+            0x051c_e812_b7d3_8e72,
+            0x7c9c_e5ff_9dab_955d,
+            0x2c11_dcb2_7ed5_553a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa486_1053_6543_7c5c,
+            0xbaef_3528_5949_99b5,
+            0x6ebc_2d21_8bd5_7856,
+            0x1194_f3a8_8f8d_20d8,
+        ]),
+        pallas::Base::from_raw([
+            0xc583_16cf_02c6_0b44,
+            0xbae8_db73_6695_4f2c,
+            0x1321_fe4b_4bc8_ff74,
+            0x1f90_ec5d_5cdb_66c9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3e78_8bbc_500b_061b,
+            0xa39f_04d5_7d40_d1b4,
+            0x1075_ff0a_e695_322e,
+            0x29e8_f7f2_17eb_d76f,
+        ]),
+        pallas::Base::from_raw([
+            0xbf38_0b79_6b13_1fc9,
+            0x6464_a70d_f53b_4597,
+            0x7026_66e6_dd97_4644,
+            0x12fe_b0d1_9689_e650,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfd13_2e00_4e5d_4971,
+            0xc505_01d2_b5ea_6072,
+            0x9202_b952_2e65_9ed7,
+            0x3ab2_84aa_1043_7b11,
+        ]),
+        pallas::Base::from_raw([
+            0x4de0_8d20_70f7_f5e1,
+            0x550f_b47d_5648_c508,
+            0xf74a_5a30_6073_9c33,
+            0x3b52_c98c_59db_48ec,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb565_72c3_4d9d_f266,
+            0xd4cb_8d31_2f6e_e625,
+            0xcd7e_2193_6f0a_a501,
+            0x3173_b0b5_e1b9_bcb7,
+        ]),
+        pallas::Base::from_raw([
+            0x7bb7_0367_d936_382b,
+            0x90d5_03e0_1a24_9fa0,
+            0x1d1a_fceb_21eb_295a,
+            0x2a42_5586_0ab7_f2de,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xea5b_ff65_c9da_428a,
+            0xa4cb_a520_eadb_5354,
+            0xd80d_5043_0b03_7bdb,
+            0x30f5_493e_17bf_d471,
+        ]),
+        pallas::Base::from_raw([
+            0xa752_0e7f_dd99_dba5,
+            0x5d12_6ed0_d9a3_2a25,
+            0xf835_77c5_523e_9c66,
+            0x3096_0d36_5f12_d42a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6698_5d13_ac44_6aa6,
+            0xb773_2f26_9677_6e12,
+            0x1fb7_b640_8501_50b1,
+            0x335c_045c_e3ac_a829,
+        ]),
+        pallas::Base::from_raw([
+            0x1134_b8f8_bddf_ae01,
+            0xfc14_9622_110b_9e4d,
+            0x292a_9dfe_fed2_495a,
+            0x2d23_4774_78d6_9f8c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe697_a384_bfe0_e7b9,
+            0x9600_e548_7eec_8f61,
+            0x5cf6_d911_d00d_4080,
+            0x2f72_9fef_7fb4_9c3d,
+        ]),
+        pallas::Base::from_raw([
+            0x6f27_44cd_0eb3_ccea,
+            0x20a3_f582_850f_75ee,
+            0x0a5d_de13_44a9_f626,
+            0x35ce_7274_5aba_1199,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7745_e733_21ad_a466,
+            0x7e96_b0af_9e4e_eac1,
+            0x9076_89d2_d2fe_4108,
+            0x0ad7_74ec_279a_de59,
+        ]),
+        pallas::Base::from_raw([
+            0xeb87_26d2_fa30_f945,
+            0xf59f_fb36_952a_758e,
+            0xf46c_d397_277b_f15b,
+            0x0e42_e600_a788_4e1e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x42d7_c6e8_1a54_7d39,
+            0xb171_695f_50a8_bd62,
+            0xfe87_5f93_5739_16ba,
+            0x2b7b_81a1_9e1a_f147,
+        ]),
+        pallas::Base::from_raw([
+            0x5479_f6bc_eb58_7cf0,
+            0x55a1_827c_f39e_06ab,
+            0x2a9c_0fc4_d3e9_aaae,
+            0x1934_b567_9c19_e682,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe18f_eb78_018f_21fb,
+            0xcfa5_4075_0fa5_0007,
+            0x05e3_f7d5_9d0f_5e8b,
+            0x2cc9_4cc1_fe1a_3754,
+        ]),
+        pallas::Base::from_raw([
+            0xc2d2_f324_8b4c_ae1c,
+            0x447f_7745_c5a9_dedd,
+            0x3c21_26cb_32f6_9c68,
+            0x08d2_cff6_fba5_5d5b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb5d8_5390_444c_c212,
+            0xe08f_cf9d_bef6_3c10,
+            0xe6cc_866a_fb3c_80e3,
+            0x1973_ffe7_d02f_0fa4,
+        ]),
+        pallas::Base::from_raw([
+            0x433d_1974_b639_e380,
+            0x10e3_a8f5_d79c_3bb2,
+            0xc48b_7633_c798_f597,
+            0x2b49_6a88_af43_e434,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6be3_5a9e_4646_9b0a,
+            0x21fe_d657_d107_f630,
+            0x99d3_0abd_ab7b_8d62,
+            0x3509_1866_4a0e_e32f,
+        ]),
+        pallas::Base::from_raw([
+            0x0454_ba7b_2b38_8723,
+            0x994c_fd44_0535_add3,
+            0x5c3e_e7d5_a694_1082,
+            0x3e6b_3a1f_16bb_57e2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xffb6_e87a_f4f9_273d,
+            0xa3b4_9290_844f_d1f0,
+            0xd9d9_9177_ac41_03a2,
+            0x1ba6_f2f8_98ad_5de0,
+        ]),
+        pallas::Base::from_raw([
+            0x2199_f2d0_0e0a_20d2,
+            0x47bf_5d92_1c69_7f48,
+            0xb50d_409d_b342_4e95,
+            0x0fc8_6805_b969_8fa4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x36ee_72e6_26d6_16f4,
+            0xa85c_131e_8f2e_e5d1,
+            0x544d_49b6_d5fe_bc77,
+            0x0900_2d79_10df_23fd,
+        ]),
+        pallas::Base::from_raw([
+            0x768f_c641_47a7_920b,
+            0xafed_4d26_3791_7ef3,
+            0x25ef_bc62_b972_a83c,
+            0x0a20_b646_a0fe_e655,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb83e_09de_6703_6a2c,
+            0xc6e4_2d86_9a1c_8a6f,
+            0x26cf_9928_a140_3757,
+            0x2ea1_20a4_bb61_d62b,
+        ]),
+        pallas::Base::from_raw([
+            0xc7aa_5256_b121_eafd,
+            0x37a9_d899_91a1_fb45,
+            0x0c6b_29a8_5134_4bbd,
+            0x0047_cc6a_f224_fb19,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9c0e_5b82_9469_8c2f,
+            0x246a_ab8d_57f7_eb14,
+            0x6acc_27f8_d28b_015c,
+            0x14bc_c3c2_2e2e_b6bb,
+        ]),
+        pallas::Base::from_raw([
+            0xbcfd_9f65_9803_ac84,
+            0x9065_8c67_7b1a_f1a8,
+            0x779e_13d7_fbca_9d34,
+            0x0cde_f9bd_324e_1df5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2fb5_5ddd_b490_61f1,
+            0xe18d_c4f6_f48c_ff60,
+            0x209e_1749_1f95_8e22,
+            0x0651_e474_e0d8_11c6,
+        ]),
+        pallas::Base::from_raw([
+            0xadb6_45c2_ec3c_cbbb,
+            0x35a0_eac6_b2d3_0210,
+            0x4ad9_2ead_3d43_a194,
+            0x2e39_0f7a_bc18_85b6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x23ca_ecf8_4a99_8786,
+            0x48da_db27_2bd6_3318,
+            0x9d89_40f9_b2d3_7799,
+            0x17fa_61d6_05a5_8987,
+        ]),
+        pallas::Base::from_raw([
+            0xc88f_47e1_1d26_8daf,
+            0xfb0d_a012_55ff_62bc,
+            0xac10_cf88_df83_2cca,
+            0x32f1_0c77_19eb_ab29,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3195_102f_c327_9b31,
+            0xacfe_b6c5_89a5_d878,
+            0x9367_2ab2_d8e8_a423,
+            0x14ac_50c6_6669_ba07,
+        ]),
+        pallas::Base::from_raw([
+            0x8454_fc70_093a_e70e,
+            0x83cf_e218_71ea_9716,
+            0x8f87_513a_2560_8897,
+            0x3042_845c_65f3_82fd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe3bd_44e1_cf62_b948,
+            0xaca4_8396_f097_f8f9,
+            0xaae7_28f2_e533_dd59,
+            0x205a_0002_d292_790e,
+        ]),
+        pallas::Base::from_raw([
+            0x3747_573a_6340_da58,
+            0xc462_be08_e666_c34c,
+            0x932b_a9bd_22ef_0dd1,
+            0x3c05_7dd9_7523_55c2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x21bc_7af6_3b01_c7e9,
+            0x6252_732a_b6ba_dc77,
+            0x8936_7ad2_a6da_3eaf,
+            0x3423_225a_a8b2_648c,
+        ]),
+        pallas::Base::from_raw([
+            0xbf9f_96b4_d37e_cdbd,
+            0x9788_5731_a6b5_c21e,
+            0x8e53_deb0_53bd_d03f,
+            0x0267_f659_8e41_9d57,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x16ce_c525_99d8_4e32,
+            0x0be9_87cf_f76b_791a,
+            0x64e9_f724_3ded_90cb,
+            0x3f4b_7c45_f7fd_0a5b,
+        ]),
+        pallas::Base::from_raw([
+            0x504d_f52d_0a5e_6f9b,
+            0x0ffd_7f14_c471_c25e,
+            0x05f5_f6a6_f4e4_3235,
+            0x03ed_4df6_1b9b_8e2f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d55_7ecd_d9bc_b076,
+            0x5408_529b_d207_78e4,
+            0x58de_ce33_83ef_9bd5,
+            0x08e2_3b7f_80c4_f1ce,
+        ]),
+        pallas::Base::from_raw([
+            0x2439_550a_1d3f_5fe7,
+            0x6f35_49ba_c229_e7de,
+            0x4ff1_8163_5458_c34c,
+            0x18b0_1033_f86c_5b2d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7932_981f_1490_acb6,
+            0xae32_d1c6_69f1_ba87,
+            0x487d_3e38_98de_ad2f,
+            0x3360_9d96_1cb9_e4bb,
+        ]),
+        pallas::Base::from_raw([
+            0x2df5_c107_9de0_42d9,
+            0x3a5e_e2d8_4f95_338e,
+            0x0f61_1e54_8e5d_6071,
+            0x314a_f599_b686_4f6a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x12ec_74da_fb34_4c9c,
+            0x86e7_c394_398c_b2b0,
+            0xb350_5e55_0f41_55b3,
+            0x3882_c274_d10f_9604,
+        ]),
+        pallas::Base::from_raw([
+            0x0475_5416_a740_3cc8,
+            0x7bc7_5c57_18be_8417,
+            0x7225_cf87_5def_f0bb,
+            0x354b_a5af_e4b7_8ab5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb928_8c66_ae60_cf6b,
+            0x8a01_3bed_8367_6133,
+            0xf9d3_d4e7_a269_61af,
+            0x1590_bf3d_b717_8a0f,
+        ]),
+        pallas::Base::from_raw([
+            0x2988_6de5_e09d_b63b,
+            0xffee_8de1_593f_5931,
+            0x6c10_c99c_784a_4ab0,
+            0x08b8_0c40_7a4e_c18f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x07ef_5d82_7684_6a64,
+            0xf266_7542_3316_83e4,
+            0x63e8_e5b2_b6e0_98a8,
+            0x115d_36de_a116_3915,
+        ]),
+        pallas::Base::from_raw([
+            0xf5cb_ccd4_6981_b817,
+            0x739c_6e08_5a3a_acc1,
+            0x43c3_a2dc_0dc8_4a1b,
+            0x3061_050b_bec9_728c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa784_97ba_84c4_9897,
+            0x0bdf_4a54_6f11_477b,
+            0x78d4_5bc7_61b4_4fc4,
+            0x009c_265a_01e4_bd27,
+        ]),
+        pallas::Base::from_raw([
+            0x83d6_88e2_3124_442f,
+            0xdaf5_4110_7337_7228,
+            0x0476_e74e_a35f_a96c,
+            0x1cbc_b10c_31c5_a6ce,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x815f_09ef_7425_c941,
+            0xddea_5b91_af1f_b16e,
+            0x44c4_8ec0_6e4c_4d5b,
+            0x3eb2_6944_09dd_347a,
+        ]),
+        pallas::Base::from_raw([
+            0x5075_853b_087d_36e1,
+            0xa637_4ced_4fb9_8cd2,
+            0x8f41_0471_fa56_764d,
+            0x2a49_2949_e50a_5431,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2a44_94c5_80ca_c7b1,
+            0x5c80_bc62_be0c_4c20,
+            0x3e9b_c8a6_76ee_a29d,
+            0x31e9_f489_5373_0252,
+        ]),
+        pallas::Base::from_raw([
+            0x0cc5_99cc_2d44_795f,
+            0x5f34_2d7a_6dbb_d769,
+            0x1e03_83ac_5bb1_3b70,
+            0x3576_b8fa_eecc_5390,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0d73_8802_f12c_9a24,
+            0x574b_d31a_7a88_fc47,
+            0xfc84_3f6a_5d93_3592,
+            0x1386_f0fb_f8be_9c27,
+        ]),
+        pallas::Base::from_raw([
+            0x5a23_540a_296c_f044,
+            0x6192_3af4_1508_7a98,
+            0x5995_b4cf_15cc_2810,
+            0x1706_3276_50a0_f036,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2653_f155_85de_a90b,
+            0xd63d_94d0_8aa1_482f,
+            0x6a82_4715_8027_d155,
+            0x1df5_02c5_50b8_da4c,
+        ]),
+        pallas::Base::from_raw([
+            0x1c94_bebe_da62_eb37,
+            0x0d7d_52bc_04b8_1267,
+            0x8c2f_be33_eb00_04e4,
+            0x0440_0a84_ea35_612f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5c1b_8f52_5659_4536,
+            0x9b79_4d4d_2397_825f,
+            0xbbde_a8df_0f7d_ba1c,
+            0x3d29_b2f0_082a_5564,
+        ]),
+        pallas::Base::from_raw([
+            0x997a_e0be_a8e8_c381,
+            0xd8fb_2e89_3946_7e27,
+            0x23e9_4e6b_32ae_749c,
+            0x37be_d4a7_96d3_6ef1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2b55_fd72_49a0_af15,
+            0x84b6_ef86_00bf_2219,
+            0xa742_27da_4188_25e1,
+            0x2de3_dd50_d348_4b87,
+        ]),
+        pallas::Base::from_raw([
+            0x7c51_9935_0187_19af,
+            0xe12b_c342_f5ad_3380,
+            0x4771_3997_d6b6_6fdb,
+            0x2781_cf1a_f080_88bd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd6b5_8567_e42e_6228,
+            0xba55_c9ee_caab_1684,
+            0xb098_b03e_c0e2_bfa9,
+            0x1658_92f6_2d6c_ab72,
+        ]),
+        pallas::Base::from_raw([
+            0x7cce_f3c2_7004_750a,
+            0x6764_b8ec_87af_0fbd,
+            0x954a_3e23_b88f_10da,
+            0x016b_7c55_ed75_6eb4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1572_3792_f441_6a81,
+            0xf995_d329_4d87_564f,
+            0xb0d2_1f0e_cc5c_2ee8,
+            0x27d0_c30b_d4bd_22ba,
+        ]),
+        pallas::Base::from_raw([
+            0xdb2c_fdc7_ab47_0473,
+            0x6cf3_d13d_2256_03b9,
+            0x2032_3b49_b053_23ca,
+            0x3874_12f6_3a24_2a92,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x996a_0c38_d044_b83c,
+            0xde09_0618_5b92_cda5,
+            0x4643_0a67_d500_a255,
+            0x27f5_9685_eb77_ac7e,
+        ]),
+        pallas::Base::from_raw([
+            0x059a_236e_dfd1_5edf,
+            0xe561_315f_eae6_1f63,
+            0xbb05_a594_85a4_b33a,
+            0x3285_ddba_14ac_1ed8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe549_c0d0_0ceb_9dc3,
+            0xd273_7cf6_b421_aa39,
+            0x97d6_32a0_5a8f_3a2b,
+            0x3c24_5f47_8e0c_a36c,
+        ]),
+        pallas::Base::from_raw([
+            0xf20b_8a37_aa4a_7d8b,
+            0x8189_e00c_5620_23da,
+            0x5aff_d154_2f27_8147,
+            0x03a2_d69b_1690_1c15,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1db8_ec71_2a43_63b8,
+            0x8920_3a49_6826_c060,
+            0xab52_38e8_da30_0add,
+            0x1fba_c064_05f9_fd83,
+        ]),
+        pallas::Base::from_raw([
+            0x35ca_286a_fd3e_c748,
+            0x4d74_e271_dbd4_2a3a,
+            0x1af7_48ff_e310_304b,
+            0x38e5_4864_6bbe_709c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9c3f_6480_c417_46a5,
+            0x7455_11cb_9655_ec10,
+            0x0b30_d995_92df_c3ba,
+            0x04b5_d208_aa2d_5695,
+        ]),
+        pallas::Base::from_raw([
+            0xe3fa_148a_db80_2f0b,
+            0x692a_dedb_cc21_f27b,
+            0xe5bd_3253_815e_0161,
+            0x06ae_836a_74b7_d7b3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x23a6_7fe7_633a_8233,
+            0xfb9a_4eca_7e71_4fac,
+            0x950d_ef5f_a5bd_24cd,
+            0x187a_4853_68dd_e36c,
+        ]),
+        pallas::Base::from_raw([
+            0x4ad9_6376_9666_3e54,
+            0x935b_6072_4744_7eab,
+            0x40d0_ef01_0cf4_ba17,
+            0x2bd6_8f8f_e07b_ef4e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe269_82a7_147b_8c18,
+            0x607b_e6c4_b9b9_be5d,
+            0xe32d_307b_b3db_e0ef,
+            0x3a76_010b_80d3_c8b0,
+        ]),
+        pallas::Base::from_raw([
+            0x06a9_146c_a674_8492,
+            0xce4b_2d6b_49aa_731b,
+            0x795b_873d_4a5a_95bb,
+            0x19e5_778d_9876_7a46,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x02c9_e528_8369_fdca,
+            0x546f_8eed_d946_62ec,
+            0xa4c4_8b26_12bd_a088,
+            0x3551_abbc_cb49_2c53,
+        ]),
+        pallas::Base::from_raw([
+            0xdfbe_b704_29a1_b4f7,
+            0x6943_7350_0ca9_1961,
+            0x4cf2_bc5d_2dd1_5705,
+            0x2341_167f_494d_0476,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaec8_67d5_8bab_356f,
+            0x5a07_3489_e797_2666,
+            0xe593_e00b_8588_5887,
+            0x3298_8eb7_8bd8_1bcc,
+        ]),
+        pallas::Base::from_raw([
+            0xca3c_443b_d127_bdbe,
+            0x53f6_db87_cbf9_232f,
+            0x925e_3c81_1375_408d,
+            0x362f_d3bb_da48_9c11,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6010_85d0_794c_e3ac,
+            0x162b_7969_422e_ff0a,
+            0xfa12_7c4b_9718_324d,
+            0x05eb_74ba_ac18_6eb0,
+        ]),
+        pallas::Base::from_raw([
+            0xfa9c_6176_37ad_dbd4,
+            0xd77b_985f_9626_c949,
+            0x53e4_deb7_34a6_4e7a,
+            0x1133_2731_91bb_93cf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x96c9_fb17_08b4_1634,
+            0xa9a6_bc5e_2d24_cb92,
+            0x834c_a22b_fd16_3870,
+            0x3e56_ae12_1141_fc99,
+        ]),
+        pallas::Base::from_raw([
+            0x50bb_4dbc_163f_9f93,
+            0x1e25_6f15_ff60_3b93,
+            0x3e61_aa6f_b66c_8a6b,
+            0x00e2_da21_06b8_e3c0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x42dd_8b79_23b6_b513,
+            0xea85_bf04_b59a_779d,
+            0xb0a9_fa50_a01a_72dd,
+            0x08a0_0b38_4174_1ff4,
+        ]),
+        pallas::Base::from_raw([
+            0x64cb_e014_3f1e_ff9b,
+            0xa145_12f2_67e7_15b9,
+            0xd5fc_3acc_8d1b_3611,
+            0x2717_cf1f_7f6d_ee6b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x11e3_925e_0cdb_c33d,
+            0xbc8e_d434_51c3_4778,
+            0x7304_853c_9743_9b31,
+            0x1ada_7ad3_956c_621d,
+        ]),
+        pallas::Base::from_raw([
+            0x550f_ed05_7f72_917b,
+            0x2345_cf15_73cd_6078,
+            0xc00f_bede_8499_f921,
+            0x3935_21fc_eb2e_3365,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0adc_cc3c_16a3_f235,
+            0x2676_dcb3_8d85_ac03,
+            0xb7c2_fa06_3232_3f54,
+            0x1b00_c04e_8168_266c,
+        ]),
+        pallas::Base::from_raw([
+            0x22b8_f975_c6b2_6381,
+            0x64a0_f521_877f_6589,
+            0x0de4_3934_6246_b2b2,
+            0x10ab_0d63_c867_c968,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x72ff_4d9f_054e_cb10,
+            0x28cc_c6c5_1071_3c53,
+            0x4144_3ca1_3640_7bcf,
+            0x3ca1_8a54_8248_dce3,
+        ]),
+        pallas::Base::from_raw([
+            0x74b5_8607_c4f6_23a9,
+            0x52cf_86ce_4024_b4e8,
+            0x0c1f_22de_8fa9_9eb8,
+            0x06d1_9d7c_2817_2812,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3429_9ecb_1a25_b41a,
+            0x4c20_e2cd_430f_4f53,
+            0xd3ac_8de7_5dfa_6385,
+            0x315d_549f_290d_49aa,
+        ]),
+        pallas::Base::from_raw([
+            0x950a_7a7a_7391_01da,
+            0xd06e_4417_2b59_15c5,
+            0x8872_d56b_c32c_8a5b,
+            0x1f28_a45d_64f9_644c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xec62_b82b_3f9c_dd5a,
+            0x53e4_68e0_ba89_260f,
+            0xbf71_b840_6644_8a63,
+            0x1a7d_2578_300e_a6ca,
+        ]),
+        pallas::Base::from_raw([
+            0xdfd2_eae1_7952_3443,
+            0xe753_284b_9058_3e43,
+            0x3850_e370_e03e_b2ec,
+            0x24f2_1e42_10b5_41ca,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3960_69f3_d739_056b,
+            0x2f84_257d_240a_a99b,
+            0xcbbc_6a3e_1d2e_3e47,
+            0x32f2_11fd_60f5_6c88,
+        ]),
+        pallas::Base::from_raw([
+            0x8993_dc0a_f3e7_01d6,
+            0x3c49_7f08_3d5f_1ffb,
+            0x7c69_98c3_762e_4080,
+            0x25ff_cd09_47d8_4962,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x00eb_df7a_a05e_0505,
+            0x32d7_73fe_8a8d_769a,
+            0xa0d7_4ae0_ba94_c75d,
+            0x028f_6828_bf19_6ab8,
+        ]),
+        pallas::Base::from_raw([
+            0x1240_0761_dba1_cb3f,
+            0xf439_7e09_5aee_c121,
+            0x9a39_26be_cdaf_c085,
+            0x11d1_6e6d_2222_d955,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xeb43_eac8_a45e_50fe,
+            0x76e1_3155_9fb9_e4ca,
+            0x8f66_7104_3f1b_0d78,
+            0x0dc9_64a3_6226_3ba5,
+        ]),
+        pallas::Base::from_raw([
+            0x2443_a280_98f7_d9ea,
+            0x7873_9d11_13fc_182d,
+            0xd62c_6c84_30df_277e,
+            0x3981_79f2_29f0_77ad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3f3b_83e1_e18b_41a6,
+            0xe879_b7d0_d499_1f0e,
+            0x3a14_5291_dc57_a3a4,
+            0x1106_64a3_a51b_428d,
+        ]),
+        pallas::Base::from_raw([
+            0x9acb_835d_d793_fc7e,
+            0x695e_bbbc_7b1d_69ac,
+            0x418d_bfef_2441_77eb,
+            0x0e03_0d59_8861_c631,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x676c_1bbb_3d79_4a17,
+            0x86f7_40b1_a30b_1824,
+            0x0414_8138_2c6e_d6cd,
+            0x2460_267a_aca9_b888,
+        ]),
+        pallas::Base::from_raw([
+            0x4b8e_28e4_c2de_91a3,
+            0x0eb9_23e6_bb90_72e7,
+            0x84a5_c9a1_9518_d64b,
+            0x2028_854f_c7fe_f563,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xec55_0b1b_b4b3_5edc,
+            0x9bd6_e713_a2a0_44f1,
+            0x1bb7_d52f_e215_849b,
+            0x2a3b_4a5a_60a8_e589,
+        ]),
+        pallas::Base::from_raw([
+            0x37db_8209_47f9_907b,
+            0x9606_a95f_fed0_ec37,
+            0xa4a5_f491_06db_2a91,
+            0x2dc3_8e45_8a44_967b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xac40_3499_d9f9_eb6c,
+            0x026d_a7c4_f3a1_2e88,
+            0x7dfa_04ff_1867_a66b,
+            0x0980_4e29_e424_13a9,
+        ]),
+        pallas::Base::from_raw([
+            0x51b5_218c_3a0a_055f,
+            0x5ddc_c1fd_7461_34bb,
+            0x3696_cdf0_cf53_c400,
+            0x3594_1364_798f_0c20,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe6a7_7cfc_25cb_3242,
+            0x2c31_d7f5_8837_2988,
+            0x562e_9094_a407_ac85,
+            0x3ab1_effb_2622_e180,
+        ]),
+        pallas::Base::from_raw([
+            0xb424_bdcf_597c_6557,
+            0xeda3_48f9_ba67_2219,
+            0x8c1a_e37b_63f2_d3cd,
+            0x26f7_ed5a_5a2f_099a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd297_863e_dded_7212,
+            0xf91b_2b7e_3e36_bebc,
+            0xaeff_d446_04bf_08b9,
+            0x2467_95dd_ab7c_c74e,
+        ]),
+        pallas::Base::from_raw([
+            0xc713_53de_e975_f704,
+            0xb276_043d_644d_0408,
+            0x5878_7fed_3075_dead,
+            0x2771_e939_209b_ae7a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x06dd_9ad7_373d_99f9,
+            0x8a73_6054_b608_fa6a,
+            0x3411_7ed3_2293_33b5,
+            0x2e33_7d8a_2021_02de,
+        ]),
+        pallas::Base::from_raw([
+            0xc3ee_16d0_a73b_d633,
+            0xd25f_08e9_2b65_b288,
+            0xc26a_08ce_301a_28b9,
+            0x3935_358f_146f_39be,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3f5b_b50c_f6ef_ce5b,
+            0xb76d_32e4_5f67_4c5d,
+            0xcaa1_7ff1_2bd7_bb4b,
+            0x1b8d_cefd_b94d_06b2,
+        ]),
+        pallas::Base::from_raw([
+            0xa469_b014_2c83_2078,
+            0x4d17_ae69_2a58_478f,
+            0xcc08_c0ee_6947_386b,
+            0x1428_6ba3_312d_4851,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2f3d_b3e9_a41a_0337,
+            0x03a4_7f23_3f67_a26d,
+            0x28c2_fecf_bfc3_355b,
+            0x2bbc_960a_bd2e_f481,
+        ]),
+        pallas::Base::from_raw([
+            0xc311_0952_b121_2186,
+            0x2e87_5201_48d5_fc53,
+            0x875c_9ff6_a96a_da2c,
+            0x0223_4935_d415_a5e5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x36f0_8415_22e2_56fe,
+            0x6d55_4c96_1cb1_f126,
+            0xefbe_e6c5_dceb_0fd6,
+            0x3de2_b1ec_d97a_180c,
+        ]),
+        pallas::Base::from_raw([
+            0x5304_ab95_aae6_9b66,
+            0x60ed_3893_0c80_7993,
+            0xd9b4_3e8d_6ff5_4a3e,
+            0x18fc_8e36_16ba_3090,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0822_d885_4dfe_69f0,
+            0x505e_1f45_ccf1_dc38,
+            0x628a_640a_7eec_8b84,
+            0x0127_23d3_14c8_9c01,
+        ]),
+        pallas::Base::from_raw([
+            0x7e4e_f3cb_d5d4_7736,
+            0x850b_2fbd_d6e5_5bac,
+            0x6c2f_3bc2_18f3_9602,
+            0x2535_1370_28dc_f11f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa134_90eb_3ad2_a6fe,
+            0x0b67_1163_084d_310a,
+            0x86df_15cb_08ca_1613,
+            0x2186_0967_8d1c_6167,
+        ]),
+        pallas::Base::from_raw([
+            0x58de_954b_613d_9043,
+            0x4cdf_a072_9d4a_5cde,
+            0xd2a4_f058_b900_7509,
+            0x2660_6d63_e85e_94fb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1bee_c383_512e_3059,
+            0x75e4_6def_af35_b531,
+            0x25cb_866c_89fa_7469,
+            0x2300_a9c8_709c_c635,
+        ]),
+        pallas::Base::from_raw([
+            0x30fe_ba0a_d8b6_dd3a,
+            0xfe7b_289a_3c6c_a17b,
+            0x7a6a_763f_4f92_0595,
+            0x0669_e3fe_787d_f81c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2317_af7e_2bc1_fb5a,
+            0x4fa0_a83c_0f76_c57a,
+            0xad4d_1850_e918_2af4,
+            0x3095_294e_9909_a724,
+        ]),
+        pallas::Base::from_raw([
+            0xb04c_712b_c022_15ee,
+            0xf118_0f20_c588_375d,
+            0xaabd_ded2_9f7d_bf93,
+            0x170b_a10e_7ff6_dc04,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4614_ca37_6411_165d,
+            0xfe5e_19ff_1cf2_d2ea,
+            0xfd57_702b_75b7_f29b,
+            0x2d1b_3d96_4eb5_321a,
+        ]),
+        pallas::Base::from_raw([
+            0x03b0_6fb1_8c52_94d7,
+            0xd282_d2a7_a658_83af,
+            0x136d_b5bc_b3ef_254e,
+            0x2e8c_5ef8_61fe_9aeb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x79cc_d5aa_18d7_fe0f,
+            0x21fb_e42a_7f84_9fc5,
+            0x6a28_f36b_52a4_f91c,
+            0x011d_e672_2dda_0469,
+        ]),
+        pallas::Base::from_raw([
+            0x4f07_9730_2c53_dc9c,
+            0x6c9d_a709_b02b_cf85,
+            0x6bf0_cda1_2708_3753,
+            0x02ad_a1fa_4596_eb60,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x74f1_d926_d45e_11b7,
+            0x1c48_974b_0e37_87a2,
+            0x574f_54b1_2560_ee08,
+            0x1a17_a6cd_ff9b_fa8b,
+        ]),
+        pallas::Base::from_raw([
+            0x65bd_430a_18c2_6fdd,
+            0x06a7_f226_5fff_44b4,
+            0x600f_2717_320e_d4a6,
+            0x0c3b_4e95_ac95_a06b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb18b_afc6_26e6_2669,
+            0x34de_90c8_407d_290b,
+            0x47c9_8071_fe58_680e,
+            0x1274_01e0_c920_4b16,
+        ]),
+        pallas::Base::from_raw([
+            0x332d_e7a5_2f92_fc45,
+            0xc917_cdc6_686b_1a9d,
+            0xb86c_76fe_72e0_8b68,
+            0x0b4f_39ca_545a_b70f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc417_3670_bcb9_cc4a,
+            0xbd5c_f1b8_0b64_2192,
+            0x1897_6a02_8e09_c2fb,
+            0x187e_651a_79a4_8732,
+        ]),
+        pallas::Base::from_raw([
+            0xae69_5d7d_5294_c1af,
+            0x1934_654c_e813_bf54,
+            0x642c_b26f_293d_c2dd,
+            0x092c_e031_517b_da63,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7662_8a07_ecc9_bc79,
+            0x8cb2_1f86_aaa6_5bb3,
+            0xbb09_cf23_8a56_d226,
+            0x1c1a_5d7b_19a6_351a,
+        ]),
+        pallas::Base::from_raw([
+            0xfe9f_8731_fe5c_71af,
+            0xdd8d_8082_7660_c6cf,
+            0xa2fb_bb46_607d_b4f6,
+            0x066c_dec4_29fa_02f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfeba_3899_4dcd_fab9,
+            0x0185_bee0_53a8_b2e9,
+            0x2d18_4ae3_6719_da6c,
+            0x38de_de43_97fc_4e8c,
+        ]),
+        pallas::Base::from_raw([
+            0xaf8c_1a56_9749_5a96,
+            0x1eaf_43ef_5661_3ff8,
+            0xfe65_2cce_44c4_fced,
+            0x24ca_f69b_2d91_f2f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x050e_2315_3fe8_888a,
+            0x5cd6_7594_d7fb_eada,
+            0x5890_89ac_5ffa_169e,
+            0x2c7a_db4e_0279_0a77,
+        ]),
+        pallas::Base::from_raw([
+            0xace5_6f4c_4889_310b,
+            0x36cb_a3e6_49a8_2d97,
+            0x0a3f_5f71_4d72_02ef,
+            0x34e9_12c6_ec66_b3d8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8d2d_8ca6_933c_4438,
+            0xd7f0_b609_54f3_3f61,
+            0xe93b_e7cc_13ed_f94c,
+            0x114a_be4c_6b55_af86,
+        ]),
+        pallas::Base::from_raw([
+            0x1837_62f1_7010_22b7,
+            0x4811_6b3d_d2a2_a698,
+            0xea41_857f_a3f3_188e,
+            0x1fb5_1838_65ba_7743,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa082_8c60_d8a3_f578,
+            0x0a25_684f_653f_6c8f,
+            0x2b4d_9dc4_dc66_7726,
+            0x36c8_2048_d681_651d,
+        ]),
+        pallas::Base::from_raw([
+            0xe26c_9196_230a_c29c,
+            0x08fb_0378_bc18_071b,
+            0x75a0_8f44_c578_a727,
+            0x15ee_7196_24dc_9c10,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfeaa_76bf_d7f3_cc18,
+            0x7d70_d0be_ff2b_e9a5,
+            0xbfb7_ade3_819f_e899,
+            0x0a80_597f_8201_89a2,
+        ]),
+        pallas::Base::from_raw([
+            0x7c0c_7cf8_5e73_abcb,
+            0xefb0_3940_c106_04ee,
+            0x85e4_c588_3d14_ef43,
+            0x27fe_fbb2_9d0a_97b7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x47c6_a888_684f_bdbe,
+            0x5427_2144_0e19_5279,
+            0xf6b3_7923_849c_acea,
+            0x34f3_4173_3333_34f1,
+        ]),
+        pallas::Base::from_raw([
+            0x0a04_1869_d2aa_dad4,
+            0x34a7_9c4d_f7a6_b66f,
+            0x7b7b_e1e9_121b_6d3a,
+            0x2421_7f52_b1bb_09bc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfe01_fde7_3ddc_40c0,
+            0x6731_87df_9de0_27de,
+            0x2150_0dc8_2124_84f9,
+            0x1764_90fe_4fbf_05d1,
+        ]),
+        pallas::Base::from_raw([
+            0x3e96_ffcc_83de_2760,
+            0xffd3_6ccc_6e69_1191,
+            0xe3ce_955b_54a6_1af7,
+            0x091d_70c1_c2a0_1886,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdf0c_1b18_d13e_6075,
+            0x3660_d9cd_6d7c_a28c,
+            0xc8db_742a_5e85_5a70,
+            0x0856_63df_fcde_b718,
+        ]),
+        pallas::Base::from_raw([
+            0xdfc6_3b44_bfcb_4ba9,
+            0xe1ab_077a_c6da_e5a3,
+            0x2b4a_31f8_1d0a_106f,
+            0x26e9_9d38_3c41_ba1a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa55b_b719_22c8_8eb6,
+            0x2ba9_93d9_f776_01fd,
+            0xef9d_38c3_4590_b955,
+            0x393c_90d8_8ab2_8885,
+        ]),
+        pallas::Base::from_raw([
+            0x2367_9c6c_8698_dc18,
+            0xc375_1a89_e204_ed77,
+            0xa2cc_f60a_2cc0_42c5,
+            0x3b1a_7e64_31f5_efc9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x01aa_2003_93d8_1228,
+            0xd565_deb4_6165_426a,
+            0x1359_c8b2_23c3_a219,
+            0x1741_223b_656d_fbea,
+        ]),
+        pallas::Base::from_raw([
+            0x68a2_aa8d_99d2_6617,
+            0x3248_d5e3_8e95_e05c,
+            0x4347_e264_3653_a95c,
+            0x3b6a_ab30_009e_2a40,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc401_caf5_b80b_d7b7,
+            0xd475_062f_bbbc_8de4,
+            0xf888_a322_55a9_d44e,
+            0x1a01_8bfb_3b21_464d,
+        ]),
+        pallas::Base::from_raw([
+            0x5d8f_724e_1cd2_4386,
+            0x78a3_535f_8640_efd4,
+            0x47ce_290a_4905_53a1,
+            0x2a91_7aea_3b73_4a4c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x034e_89dd_99f2_6e09,
+            0x45b5_bd00_e4da_62a9,
+            0xebf3_dbff_ba88_271e,
+            0x02c8_2b9c_ea98_af0f,
+        ]),
+        pallas::Base::from_raw([
+            0x3aca_a2de_6568_bd4f,
+            0x5544_cffc_3aed_6643,
+            0x52f8_d105_2659_131d,
+            0x011f_4744_f248_a534,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe504_9c54_5183_a68e,
+            0xb2d8_76d0_fd04_ddfd,
+            0xe266_0cda_4417_fa06,
+            0x2bc0_f5d1_292f_66ad,
+        ]),
+        pallas::Base::from_raw([
+            0x98fa_34c1_c7e4_4d04,
+            0x86f0_df5a_c92c_6a54,
+            0x458a_25bc_e1c6_6a86,
+            0x36c6_ddb7_9a5f_7421,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x309b_b8ce_eaf9_5df5,
+            0x0149_4b0f_a4ba_ea01,
+            0xa124_4665_cce6_d172,
+            0x3412_acee_8559_e4cd,
+        ]),
+        pallas::Base::from_raw([
+            0xa00c_8037_9921_039c,
+            0x26ec_3ff0_2626_f929,
+            0x7f42_5184_1ec7_6115,
+            0x0d32_4da9_5111_de3f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0623_4914_8426_c348,
+            0x923b_758a_75fb_c2ae,
+            0x8563_479a_8a1c_3a18,
+            0x0222_f189_6b30_9026,
+        ]),
+        pallas::Base::from_raw([
+            0x6383_b87a_3a58_9f66,
+            0x5d68_22db_c04c_0804,
+            0x3cd5_300d_b8c8_5e26,
+            0x1ed6_87af_f5a9_7f81,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4976_a9d9_23f4_e05a,
+            0x89a9_d356_80f3_5037,
+            0xfcce_d80b_20ff_a679,
+            0x2eaa_c96a_e572_8c2e,
+        ]),
+        pallas::Base::from_raw([
+            0xe326_9ec8_35b1_a894,
+            0xe334_6c5d_38d5_f584,
+            0x58d6_995b_9eb6_1568,
+            0x3b13_1337_181e_2cab,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd626_3c8c_8fab_225e,
+            0x6111_af8a_c249_0cd6,
+            0xf2ef_6c29_147c_86d6,
+            0x27f5_4f89_3962_c0ad,
+        ]),
+        pallas::Base::from_raw([
+            0xa842_3c35_185c_5986,
+            0x70ae_f850_779c_bfa3,
+            0xf628_f488_1fc8_b76e,
+            0x0a9c_f292_fe41_9dfa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x537c_08e1_3a1c_f53f,
+            0x78df_4265_7b2b_fc61,
+            0x2500_a58a_eac6_35c6,
+            0x0fcf_c9c2_bc99_f123,
+        ]),
+        pallas::Base::from_raw([
+            0x3147_0e47_8fbe_1b4a,
+            0x991e_e318_b485_e3b9,
+            0x633d_47dd_3042_bb0e,
+            0x3360_8103_99b0_a527,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd7a2_1d17_f989_6972,
+            0x5e8b_6e6b_30d7_aa2b,
+            0x8454_73ae_ee97_a305,
+            0x3116_2156_7cc1_18e5,
+        ]),
+        pallas::Base::from_raw([
+            0xfccf_5d9f_b11e_df81,
+            0x2e12_7758_c03e_b200,
+            0x5f04_7db9_eeaa_1921,
+            0x3a86_fc45_77b3_f524,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9e93_1cc8_c148_8493,
+            0x900f_cf13_2569_e392,
+            0x765e_58e9_48b5_d022,
+            0x2ede_c32e_ef69_64c0,
+        ]),
+        pallas::Base::from_raw([
+            0x5695_ebac_bfeb_ebd4,
+            0x98cc_74a8_fd64_21ff,
+            0x27d8_5ecb_1931_3238,
+            0x1053_65b5_5423_da3c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf222_9818_2d70_d3ed,
+            0xdf8e_0ddb_b98b_fbeb,
+            0x44ec_a0c2_57ef_550b,
+            0x12e2_838e_4f99_a03a,
+        ]),
+        pallas::Base::from_raw([
+            0x6655_b07c_8d8e_d971,
+            0x9d54_b9e8_f799_c635,
+            0xd3ac_f7ab_31b0_0ae0,
+            0x3db7_b034_049d_ceb4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x10ba_763a_c8c6_f730,
+            0xae79_86b4_9150_c67a,
+            0x82ed_80f2_e411_a974,
+            0x04e0_22d6_0b2c_6589,
+        ]),
+        pallas::Base::from_raw([
+            0x088c_79a2_e8ad_c3e4,
+            0xa2b1_bfb2_60e1_d64f,
+            0x2153_eadf_50f5_03a8,
+            0x0471_d795_1f45_c106,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa0af_6834_540a_1d2a,
+            0xbc22_530b_a609_337d,
+            0xb27e_7401_ff92_1206,
+            0x0f66_0b47_5fce_7a48,
+        ]),
+        pallas::Base::from_raw([
+            0x0d2d_0ce4_5d34_1e91,
+            0x5ed6_ed9b_6248_73e5,
+            0xdb0d_b388_856f_04a8,
+            0x3909_13e5_6b4d_ecad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x931f_ebf4_3432_8d85,
+            0xb4ac_dfb4_13f3_778f,
+            0x2198_10f0_065a_4746,
+            0x274b_25e6_d0ee_28ac,
+        ]),
+        pallas::Base::from_raw([
+            0x85ff_5dcf_2af8_0d1e,
+            0x4fcf_da75_73d5_6aaa,
+            0xfebf_10d6_f655_de17,
+            0x0fc4_ed1e_e2fb_3daa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2c88_682b_0807_fb47,
+            0xe572_e261_762a_9833,
+            0x92a5_94b7_dd97_e2d6,
+            0x290c_0f08_ae67_92f1,
+        ]),
+        pallas::Base::from_raw([
+            0x9f3e_a22a_9fbd_e2f2,
+            0x7828_c11a_b548_3f9d,
+            0x889f_be4d_6071_fc49,
+            0x2127_232a_a434_31ff,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdf50_276a_cd2f_7fd2,
+            0x6221_308a_0532_4c09,
+            0x1c28_3f54_3fb6_99e4,
+            0x2691_bf94_093a_d903,
+        ]),
+        pallas::Base::from_raw([
+            0x6af0_82ff_ff8c_9733,
+            0x5ff9_faf0_e36e_d8c0,
+            0xce94_f44a_1788_600f,
+            0x1318_d65d_1c35_c49b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9163_559a_be89_bb1c,
+            0x5251_bfcf_7749_01a7,
+            0x3efb_6de2_8193_cf1e,
+            0x1942_18c3_fe5b_6949,
+        ]),
+        pallas::Base::from_raw([
+            0x7174_f4c0_cc3b_ede0,
+            0x735b_e3c2_887f_4687,
+            0x93ab_3df4_5697_0520,
+            0x0d9d_d803_f612_8651,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7f74_e033_1fc3_eca4,
+            0xd55f_7848_5f07_c856,
+            0x4a3f_5542_4f34_fd79,
+            0x0a48_7764_e6bb_64fc,
+        ]),
+        pallas::Base::from_raw([
+            0x7746_ae1b_b07c_53a9,
+            0x0cd8_26a8_b54e_f182,
+            0x64d2_d590_c7a7_2ef5,
+            0x34e7_9a7c_db19_a72f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9ee7_822c_9974_c6fe,
+            0x6d79_96e6_ecf8_df62,
+            0x3263_2b2e_f5df_4af0,
+            0x10f9_be27_b481_30e5,
+        ]),
+        pallas::Base::from_raw([
+            0x1272_0f17_8ab2_623a,
+            0xa050_ea3b_6f25_0848,
+            0x01f1_8495_9947_e6d4,
+            0x3e25_d531_e842_b508,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1c20_5dac_8ff2_38cb,
+            0x4c0e_7a71_7346_0cd7,
+            0x5cb8_b1a1_4c49_19e7,
+            0x1017_cc43_7f6c_a31c,
+        ]),
+        pallas::Base::from_raw([
+            0xc7a7_9329_b0d7_cfab,
+            0xf910_054e_b22e_57ef,
+            0xa27e_9be2_3ef3_e39a,
+            0x221a_8fd3_dea3_471c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8da5_c8aa_c156_511d,
+            0x3df5_2950_01ad_9519,
+            0x654e_3cc1_fefe_95d2,
+            0x1826_50e8_f7f3_c594,
+        ]),
+        pallas::Base::from_raw([
+            0x6a14_5790_4fe2_27cc,
+            0xdbdc_600a_387f_90de,
+            0xb47f_a736_8906_d3bd,
+            0x2919_7af4_2853_5c8b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0e60_4790_c292_a15b,
+            0x568d_bf3d_b502_70c0,
+            0x54ae_c935_bb45_d7de,
+            0x30eb_56d9_3c62_e58a,
+        ]),
+        pallas::Base::from_raw([
+            0x940f_2e00_ced7_14f4,
+            0xf3d0_1a90_5dd8_c6bb,
+            0x2188_66b3_369c_ec8f,
+            0x16ad_3c60_929e_f022,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0c17_e5c3_6446_c41f,
+            0xbc36_aeb7_6459_3101,
+            0xe6b3_222b_f89f_1cbb,
+            0x0a55_07f7_2694_65a6,
+        ]),
+        pallas::Base::from_raw([
+            0x5d8e_9202_13b0_c07c,
+            0x0c75_2080_6653_ef25,
+            0x0a8a_c99c_9e71_ec48,
+            0x0cea_69fc_1248_9c7a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6bf7_aa25_2e67_bfe4,
+            0xf638_dd62_3264_efb2,
+            0xc5d9_d3dd_7ab8_95eb,
+            0x19cc_6f41_d5ea_400f,
+        ]),
+        pallas::Base::from_raw([
+            0xb5f9_31ac_c93d_a424,
+            0x0669_28e6_f068_ab0b,
+            0xaa97_d1f0_2516_8563,
+            0x12c9_2e45_f41a_027e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb5cd_03f6_546f_2d8c,
+            0x008b_ed8d_5fb4_d8cc,
+            0xfbcb_8613_de82_5e34,
+            0x321d_9574_27a1_bf27,
+        ]),
+        pallas::Base::from_raw([
+            0xf46e_ef71_5d5a_f67e,
+            0x0718_6aa5_d7df_a969,
+            0xcdd8_6543_720a_6554,
+            0x0109_0738_2d21_8149,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3b0a_d014_2f1d_6af2,
+            0x99d7_56da_d234_fc14,
+            0x45a8_b1c4_454c_5dfb,
+            0x1ee7_4f77_ad27_f629,
+        ]),
+        pallas::Base::from_raw([
+            0xf38f_1264_df92_5a0f,
+            0x198a_81c9_05ac_18d7,
+            0xcc50_1caf_24f4_ed42,
+            0x399e_531d_d4d1_3840,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb529_b39a_b8c8_6bbf,
+            0x7d8f_ebda_e02d_678e,
+            0x7fae_d795_ca8e_8302,
+            0x31ed_a441_e002_ac2c,
+        ]),
+        pallas::Base::from_raw([
+            0x619d_1ef8_6855_6cbb,
+            0xd88c_2fed_a381_abd6,
+            0x6845_42a1_1e1f_ddd0,
+            0x0771_38ca_a39c_2293,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8e3c_040a_f2be_9c63,
+            0x0cfc_acc4_41b0_e1e2,
+            0xf752_2875_1f06_363f,
+            0x0032_71bd_2b81_e3cc,
+        ]),
+        pallas::Base::from_raw([
+            0xc3ad_aedb_26dc_6180,
+            0x2ad6_7b13_2e77_7986,
+            0x2dc6_e063_027b_de54,
+            0x0af4_dae5_6e28_04a4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5075_53c9_94d0_dc2e,
+            0x940f_4012_649a_26a7,
+            0x9162_6f3d_cb07_7bdb,
+            0x3c6c_9061_ba99_8e97,
+        ]),
+        pallas::Base::from_raw([
+            0x2178_ff4b_0732_3f45,
+            0xc7bd_6c17_b4a7_3748,
+            0x567e_30af_d336_1f3f,
+            0x0fe0_0d2e_dc98_92d2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x923e_5ef9_fc71_838b,
+            0x7d0f_0335_d240_a72f,
+            0x1995_4895_1bc7_bb3e,
+            0x21ab_30c3_8b38_7741,
+        ]),
+        pallas::Base::from_raw([
+            0x28a5_52b8_4d1c_2cb2,
+            0x7879_b66b_db7d_c6f9,
+            0x66cb_e4a2_b207_c3c3,
+            0x1c5e_324e_ce7e_1fc2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0bea_8b37_7a6e_5de3,
+            0xe8ad_fcbe_7b8f_c888,
+            0x6443_7dff_eb54_1544,
+            0x17e3_7101_e098_d708,
+        ]),
+        pallas::Base::from_raw([
+            0x5e3c_16ee_ea18_7549,
+            0xcebc_d07b_5dda_4fdc,
+            0xcaef_d061_c365_1317,
+            0x08ba_afac_c8b0_f579,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0c45_64d3_dfdc_c360,
+            0x3c34_d6db_627a_b743,
+            0x19d6_66ef_aece_e57d,
+            0x202c_137c_d1b6_7cb8,
+        ]),
+        pallas::Base::from_raw([
+            0x0dee_c67f_c432_1abc,
+            0xc5cb_4568_bc4a_8783,
+            0x86b1_1451_ecca_550c,
+            0x0ff0_09f7_4820_2e77,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf299_ebe2_a905_3c8b,
+            0x424d_1301_89df_a29d,
+            0xea28_f364_490d_4a4b,
+            0x2508_a2a0_337f_d881,
+        ]),
+        pallas::Base::from_raw([
+            0xd25c_bf8b_16a9_bc33,
+            0x11a1_c1ed_a972_d5f0,
+            0x9cef_8ada_9d7d_314e,
+            0x00a8_b4df_bad1_2ed3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x23be_9beb_9a9d_1973,
+            0x08cb_a79c_d6be_891a,
+            0xfe6b_6d74_0d9e_ca76,
+            0x1cf9_8a3d_7cad_c772,
+        ]),
+        pallas::Base::from_raw([
+            0x37b5_48a9_8ca6_1367,
+            0x7717_856a_a9b5_f7e9,
+            0xbbc3_ed77_a685_e338,
+            0x3721_1cad_a67a_824f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xec8f_2eff_5163_90b6,
+            0x502b_81eb_7035_b6aa,
+            0xc6f2_0df9_5dfa_4d3e,
+            0x0a19_842b_c197_5949,
+        ]),
+        pallas::Base::from_raw([
+            0x760b_a317_8fbe_610d,
+            0x0370_d562_6abd_b305,
+            0xb005_aebf_6e18_2d4c,
+            0x0bfb_19da_eb56_6427,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x577e_5c79_60fc_0750,
+            0xef55_42ac_ca0d_7327,
+            0x1f01_e126_ce1b_85b2,
+            0x2a4a_42d0_4ff1_a83e,
+        ]),
+        pallas::Base::from_raw([
+            0x89fb_594d_05da_15b6,
+            0x409f_a8a7_c292_6e67,
+            0xf51d_1898_aad8_d7bc,
+            0x11a2_2949_d51d_cca1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa13a_ce54_6c54_ddfd,
+            0x4f2f_05d0_3b6b_c624,
+            0x24d8_342b_6f1b_bed6,
+            0x10f6_dcfd_3058_49b0,
+        ]),
+        pallas::Base::from_raw([
+            0x45e4_776c_b11e_2c8b,
+            0x21dd_7840_7331_9fb1,
+            0x9b3d_9a29_2c94_f391,
+            0x2476_66c1_6beb_0949,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6942_a75b_0f86_97d1,
+            0x1e65_3555_73de_ffb9,
+            0xcaa7_5277_14cc_174f,
+            0x0bd5_3c52_fdd8_9e3f,
+        ]),
+        pallas::Base::from_raw([
+            0xefbd_85ab_0779_2a56,
+            0x94ee_6dd3_5be0_b609,
+            0xe2e2_ebf4_4c60_80ad,
+            0x37e7_f6b5_6da4_f564,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa785_938c_daf0_a82c,
+            0x0ff1_052c_6b0f_e01a,
+            0xa3a3_4892_9645_d506,
+            0x35fc_4d9f_25e4_ee0c,
+        ]),
+        pallas::Base::from_raw([
+            0x1bd8_1387_35d5_eed0,
+            0x2031_6e2b_4402_2210,
+            0x1de4_87e5_3382_18c8,
+            0x2639_15ef_7bb7_ac86,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7270_5394_9d68_af25,
+            0x31ec_3a68_bc55_8512,
+            0x6224_b2b9_4190_4745,
+            0x2bae_d2fb_bfa0_7f92,
+        ]),
+        pallas::Base::from_raw([
+            0x1585_ad6e_c39d_17e7,
+            0xb3f4_5d31_7909_30e0,
+            0x10f2_cf93_6dce_27ab,
+            0x3ac7_25dc_a3cc_5a5b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x16d5_99fd_795e_e6d3,
+            0xa832_7e0c_535a_268d,
+            0x66f3_59f1_a2d0_c9a0,
+            0x0b43_b8cf_c755_ef13,
+        ]),
+        pallas::Base::from_raw([
+            0x771e_bb8c_9993_734f,
+            0xe22b_9efa_7f0e_8978,
+            0xf847_286e_a0aa_95f5,
+            0x3cab_00dc_f0cb_4e65,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x940e_5b99_9381_5ed6,
+            0xe458_f932_4ac9_8472,
+            0x7277_a9b2_a4c6_6b96,
+            0x2a9b_1dbb_3571_6aff,
+        ]),
+        pallas::Base::from_raw([
+            0x1d1e_8561_7c5f_74fa,
+            0x04e0_d957_2d5e_bdec,
+            0x697f_9f0f_730e_36dd,
+            0x3196_6863_7d6b_29ae,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf4ec_666a_be5d_ceba,
+            0x4e55_7554_6220_3670,
+            0xc2c0_90b4_a237_cb56,
+            0x32ae_228d_d97a_e433,
+        ]),
+        pallas::Base::from_raw([
+            0xad96_69b3_e76e_a998,
+            0x91e7_879f_ed57_7b7c,
+            0x1e41_9d83_9e6c_94d7,
+            0x048d_94ba_a0e3_0800,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6c90_7b9f_576a_7619,
+            0x7bb1_599f_1d1c_9120,
+            0x3b2f_e84d_d429_e90c,
+            0x33d9_fbea_8acc_5ae9,
+        ]),
+        pallas::Base::from_raw([
+            0x549a_ec50_44ca_17ec,
+            0x645d_16ee_dbae_2cd2,
+            0x0ab1_6a27_9c8b_feef,
+            0x3ce8_42b9_6fec_08f2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x66fe_abea_b49c_bc29,
+            0x831b_43fd_4f80_1ad0,
+            0x8963_b81f_a95b_9f77,
+            0x3fff_5b9f_33a9_c8da,
+        ]),
+        pallas::Base::from_raw([
+            0xb846_fdb3_3ece_c0f6,
+            0x028f_eede_2d86_2dc1,
+            0xb6fe_b8a0_d783_8453,
+            0x1ebf_fb3e_ea47_f184,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdbd3_28a6_187e_d102,
+            0x4d92_bae1_fab1_c408,
+            0x5036_8ca9_4dc4_3f5c,
+            0x03e9_6590_9135_7f5e,
+        ]),
+        pallas::Base::from_raw([
+            0x6929_1025_5164_3cbe,
+            0xa488_9bf3_bc56_9b53,
+            0xf020_bfe6_2ccd_f413,
+            0x0128_5e40_0aa2_8746,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8a24_35af_b4a2_12b6,
+            0x5132_1588_3ffa_9384,
+            0xba59_b535_c741_b302,
+            0x024f_79e6_c546_5014,
+        ]),
+        pallas::Base::from_raw([
+            0x708d_0744_747d_b6bd,
+            0x4ba0_0f9c_9956_4ab8,
+            0xa6a1_8626_802b_0d85,
+            0x1180_93b3_83be_9f5f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4e81_e880_ac86_3341,
+            0xb199_dda5_ee5c_d052,
+            0x4bfb_9edb_2b9e_40bf,
+            0x31f3_ccf9_bc82_4e71,
+        ]),
+        pallas::Base::from_raw([
+            0xc77e_ac27_414c_a39a,
+            0x75e7_9a0b_3e2d_8063,
+            0x0622_1629_392c_7383,
+            0x003f_f9a6_01db_549a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x19a3_fe6e_8919_9977,
+            0xcaae_dcab_3a2a_1fdc,
+            0x5d08_6ffb_b871_b05d,
+            0x1009_d4da_10a2_540b,
+        ]),
+        pallas::Base::from_raw([
+            0x3e52_b60b_e56e_d8d2,
+            0xa1d1_62c0_5220_5502,
+            0xdf1e_4b5f_9eff_40e2,
+            0x3983_0483_a475_7d5e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8a0e_979e_fd3e_fc28,
+            0x4949_282d_94e0_8968,
+            0xf2b2_9f4b_9c13_6beb,
+            0x10ff_7bf3_f711_ca78,
+        ]),
+        pallas::Base::from_raw([
+            0xf3ac_a739_fe6f_9a2b,
+            0x24a4_32dd_3b09_89e1,
+            0x2f22_37ec_e69c_8858,
+            0x2d7e_82a5_6448_019f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0dd9_25b4_b2b2_2f7c,
+            0x5f56_b22a_a5b3_3623,
+            0x57d5_9fe0_f291_a84c,
+            0x0d09_972b_30f1_be14,
+        ]),
+        pallas::Base::from_raw([
+            0x3374_d4c2_52f8_d6b4,
+            0xc076_3cb4_bdd1_d03b,
+            0x0075_cad7_fa9b_c762,
+            0x3231_c543_5a25_3b5f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd27e_395d_361b_5ec6,
+            0xbf65_b40b_5fa3_aa57,
+            0x6ebe_d47a_734c_d047,
+            0x1c72_49cb_9959_520b,
+        ]),
+        pallas::Base::from_raw([
+            0xdaa7_b8e5_921f_ef38,
+            0x96ef_2a6d_ad05_ee3f,
+            0xc6f1_76e2_fc0b_18a4,
+            0x389f_6781_7075_8a4d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb719_cae7_9e3e_eee7,
+            0x7195_0578_1db1_15a0,
+            0x4bf3_df1d_89d4_101a,
+            0x1180_028a_0688_b2fe,
+        ]),
+        pallas::Base::from_raw([
+            0xead4_6a5b_c181_84fa,
+            0x752e_4ef1_9ed1_d259,
+            0x6987_464e_4442_6e0f,
+            0x0e76_4f02_842d_9e51,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4fc8_561b_e0e3_7afb,
+            0x4e22_7ecd_b7af_8143,
+            0x18e5_adcc_3d30_4460,
+            0x1c1d_1e61_5c90_5b8a,
+        ]),
+        pallas::Base::from_raw([
+            0xe84b_9fc9_fa1a_3202,
+            0x64d2_8a73_dea5_979f,
+            0xa1b7_2a78_52c4_ace3,
+            0x3176_462e_9090_e088,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x073d_58c4_427d_406e,
+            0xeaae_a64c_9da4_b973,
+            0xdb2b_606a_ce9c_98fd,
+            0x320d_ab61_0606_cff0,
+        ]),
+        pallas::Base::from_raw([
+            0xf6f5_6017_e567_b738,
+            0xad8b_2fa4_c80d_6dcf,
+            0xef76_6787_acc5_eec6,
+            0x2046_af02_0cc2_8cfd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdfe0_be8c_ea45_93e2,
+            0xbf25_71e6_2c01_a757,
+            0x5646_bd2a_721f_cde4,
+            0x2e56_8465_0c5e_df5a,
+        ]),
+        pallas::Base::from_raw([
+            0xc367_119b_e723_3de0,
+            0xa859_64d3_8319_d7e2,
+            0xbf56_4106_7772_44b3,
+            0x05a7_a0a3_f91c_3fe3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa157_1fb9_7ebd_b1cf,
+            0xad70_58d4_9484_4afb,
+            0x22ff_383e_fdf9_34da,
+            0x03a8_f536_628d_a555,
+        ]),
+        pallas::Base::from_raw([
+            0x89a6_b560_8b35_83df,
+            0x93d8_765b_4bb6_3abe,
+            0x6607_c289_c75e_39ce,
+            0x0846_7ac7_d613_3c93,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x09bb_0aa5_c0f7_596d,
+            0xc0b7_9d5e_0a31_3f09,
+            0x25c7_ae48_63c8_df2d,
+            0x340f_7178_57c8_c4f5,
+        ]),
+        pallas::Base::from_raw([
+            0x58d6_0999_e9bd_175c,
+            0x413c_51e3_6936_3dcc,
+            0x44bf_08fb_a5bd_cc5f,
+            0x09d9_43ab_4210_7233,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7660_e2b2_190b_69a3,
+            0xa675_e6bd_1268_5aba,
+            0x70c3_464c_345f_61a3,
+            0x0c06_a269_203a_835c,
+        ]),
+        pallas::Base::from_raw([
+            0x5ea9_81b8_2f7f_4ab8,
+            0x270c_896c_5e02_6b95,
+            0x410a_6beb_1116_7954,
+            0x25cc_f45d_51f9_413f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x83b6_8e9a_1a6a_c28f,
+            0x252f_9079_e85e_8c2b,
+            0x3dd5_a334_3f27_7d23,
+            0x1f00_6677_bdfe_d386,
+        ]),
+        pallas::Base::from_raw([
+            0x21c2_597c_a01e_4b39,
+            0x1195_b279_cab6_3aa8,
+            0x5947_c45d_89d5_371c,
+            0x0bfd_bc05_76f2_f69a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x56aa_cca5_f6d6_aeae,
+            0x00de_b6ed_5b56_175d,
+            0xe99e_0920_f6e3_ac48,
+            0x1970_6df9_fa50_7068,
+        ]),
+        pallas::Base::from_raw([
+            0x68d1_0152_dcd8_93fb,
+            0x05ce_c81d_e5b3_7f47,
+            0x7f83_e062_2c1f_9c14,
+            0x31cb_805d_ed05_7b35,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf740_8933_84f5_3c01,
+            0xa65d_85ad_4b70_3a91,
+            0xe988_f151_9c16_9eb4,
+            0x39b7_6368_9c50_4537,
+        ]),
+        pallas::Base::from_raw([
+            0x8fcc_2881_8f89_9d3c,
+            0x9a09_7667_344e_b7ed,
+            0xc77a_ff9a_1099_b9ac,
+            0x3c20_f228_e53f_9a40,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3e5f_02b6_0499_512f,
+            0xc6aa_35d0_b5fc_7e3e,
+            0x310d_1554_993b_9077,
+            0x3b2e_af1c_97a7_e598,
+        ]),
+        pallas::Base::from_raw([
+            0xc7eb_cb64_9b4c_42bf,
+            0x2bf3_2b91_10f2_ce19,
+            0xd0eb_b868_6884_a28e,
+            0x025e_43d6_95a4_e968,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe521_3aed_05e9_77a3,
+            0xfe91_23c6_366e_6089,
+            0xff9d_b1bf_4bbd_55c7,
+            0x2806_f809_7feb_4387,
+        ]),
+        pallas::Base::from_raw([
+            0xf2cd_f9d7_d0fc_3fa3,
+            0x277e_e79b_e9e8_6ab7,
+            0x37c9_96f8_8238_9c4e,
+            0x37d0_9ecf_faad_6231,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6d97_b12d_3d3a_a165,
+            0x3ca0_bd33_97db_0743,
+            0xc6eb_cdf5_27ec_2a4c,
+            0x377f_7772_587b_c8e2,
+        ]),
+        pallas::Base::from_raw([
+            0x2563_f930_3ffd_2e65,
+            0x54e7_472c_ef1a_9b21,
+            0xfdf1_b209_a4ba_4952,
+            0x285e_bf94_09ad_7630,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x300d_9e13_f84f_0abb,
+            0xd16d_7740_9c8d_c8d6,
+            0x88b4_6edb_02c4_9705,
+            0x05c4_e9fb_bada_d36d,
+        ]),
+        pallas::Base::from_raw([
+            0xf151_5ce8_bead_7602,
+            0x3928_bb28_9b22_02ae,
+            0x11dd_8076_58b5_38d9,
+            0x0bef_8f47_2c87_7974,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9182_5076_acdb_4b23,
+            0x5e1d_aab6_2b52_5e01,
+            0xd348_f694_cf00_7eab,
+            0x0fcc_10bf_2527_b056,
+        ]),
+        pallas::Base::from_raw([
+            0x80f6_acc9_9258_cb51,
+            0xc15d_6f31_1e48_7046,
+            0x3042_b48e_8bab_078a,
+            0x3cf4_7fcf_48ab_5d1b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6c13_9e12_49ce_58fd,
+            0x04b0_81f9_23c7_d9e8,
+            0x8f7a_9239_88e5_0d43,
+            0x1fca_3b8d_b325_a3be,
+        ]),
+        pallas::Base::from_raw([
+            0x692f_f292_5bc7_efe1,
+            0x375d_358d_b102_d895,
+            0x7377_f146_2112_ee7e,
+            0x22b9_ca2a_74d3_accf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xda8d_d358_9491_7794,
+            0xe067_e06d_8977_054b,
+            0x68e7_65cf_e835_3e99,
+            0x2c7b_ae76_7c60_05c6,
+        ]),
+        pallas::Base::from_raw([
+            0xbf71_5d06_4e5e_e34f,
+            0x9c99_a7e1_8746_abeb,
+            0x7615_e9eb_5e16_ccc4,
+            0x328e_84b7_73ab_f7fa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfe57_fcce_7fa3_b8ee,
+            0xc9c2_448c_f7c2_687a,
+            0x6fd2_be38_efd3_c2d4,
+            0x0288_6502_ad64_3ca2,
+        ]),
+        pallas::Base::from_raw([
+            0x4bc1_9841_b03f_4d5c,
+            0x460b_ea82_dcb0_7401,
+            0x95b2_4a5e_6c57_84b4,
+            0x2bfb_f8ee_7da6_9c92,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd39f_ac30_c415_232c,
+            0x76dd_a79e_3bac_418d,
+            0x146a_5061_cc03_a8bd,
+            0x33d1_e61b_23b0_45c8,
+        ]),
+        pallas::Base::from_raw([
+            0x0a86_1d38_a0c1_6167,
+            0x3403_d750_3625_fd76,
+            0x5c14_43d8_4dfc_5111,
+            0x11c4_166d_43ca_34b8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x59d0_4901_73f3_dc32,
+            0xba05_8d5b_fec4_3964,
+            0xe934_dd16_6639_b95a,
+            0x2bbb_c6ea_bb03_cde0,
+        ]),
+        pallas::Base::from_raw([
+            0xee85_cf18_4523_3d07,
+            0xee68_4cb6_e0a9_3cf3,
+            0x256b_3bba_79ee_21d0,
+            0x1922_24ec_0f7f_7bb9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5e0d_4224_2670_e7ae,
+            0x1625_3e15_14a1_7a12,
+            0xdc19_7727_5d06_feee,
+            0x1945_e2c3_3e05_75dd,
+        ]),
+        pallas::Base::from_raw([
+            0xd13a_150f_7299_7634,
+            0xfb54_5fc0_aeb3_d878,
+            0x30f3_976d_4f5b_fab9,
+            0x39e2_8dd6_964e_57c2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6338_94e3_1def_1331,
+            0x178a_dcd2_9172_17f0,
+            0x661d_3878_6be1_3883,
+            0x3408_a710_6fc8_2ce2,
+        ]),
+        pallas::Base::from_raw([
+            0x342c_2e44_c71b_ed3f,
+            0x96de_42e1_09ee_70d6,
+            0x8589_6891_dd66_820f,
+            0x0741_8793_5d70_7bcf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc10b_7e08_f2dc_891d,
+            0x5d68_913c_d9e6_d01e,
+            0xdd5d_234c_090b_3903,
+            0x15f0_5b8d_a216_b34d,
+        ]),
+        pallas::Base::from_raw([
+            0x7962_faa0_cf7a_f257,
+            0xaeb0_181c_1252_a47d,
+            0x1261_6f4b_f1ca_e2a5,
+            0x2322_da04_1fbd_9122,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6a1f_d4d7_4910_b554,
+            0xe38f_1107_a34e_2dfb,
+            0x68c6_f5cb_806b_3ea4,
+            0x2b4a_4711_8c56_07da,
+        ]),
+        pallas::Base::from_raw([
+            0xc783_e3cb_01aa_1026,
+            0x5c61_2654_288f_5199,
+            0x6308_5aa7_4c7a_1afd,
+            0x2be0_c52c_6093_c62c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xcfd8_887f_b984_673a,
+            0x7d45_4af5_572d_847a,
+            0xb8cc_5e6b_e457_cafa,
+            0x05f0_5b4a_1514_6b31,
+        ]),
+        pallas::Base::from_raw([
+            0x9b83_b107_3366_b9df,
+            0x7e64_4e6e_6208_ad83,
+            0xe7f1_ff6b_4f7f_ecbe,
+            0x315c_4707_e207_5aa1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x937f_a439_75f4_9b60,
+            0x302b_b808_40e5_8700,
+            0xb139_c191_3f5d_2668,
+            0x37d0_f747_3f38_8e55,
+        ]),
+        pallas::Base::from_raw([
+            0x85c8_de85_e1bb_51af,
+            0x248e_5ca6_6754_a3fe,
+            0xfcd6_2e4a_d4f9_c873,
+            0x33ff_0368_6ba7_d5c7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5e5b_adbc_d5fb_0443,
+            0x78c4_d68d_9535_6613,
+            0xfc3a_f91d_e825_cef9,
+            0x0da7_ce87_e12d_4f1c,
+        ]),
+        pallas::Base::from_raw([
+            0x7ef0_5e88_6074_d377,
+            0x4a7f_af08_52b5_609c,
+            0x0b09_33a2_2f81_8986,
+            0x0d6f_bbc5_de55_8690,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaa91_03bf_b5ec_e132,
+            0x1104_aaeb_126c_9c14,
+            0x03d5_39c6_576f_6608,
+            0x2297_a2d2_c5b4_e323,
+        ]),
+        pallas::Base::from_raw([
+            0x60d6_c848_219c_e7be,
+            0xb05a_10e1_00cd_63b0,
+            0x429b_ea17_7b3f_4b88,
+            0x0c1d_c916_f323_e7ba,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7e91_af55_41b0_8bf4,
+            0x7eb7_87f3_ce5f_d6b1,
+            0x716d_a388_45f1_2b56,
+            0x0b63_6e98_ac64_6f4d,
+        ]),
+        pallas::Base::from_raw([
+            0x4ab7_12d1_a43e_13db,
+            0xe60a_52eb_e24b_27bf,
+            0x056c_fba5_2b55_7f09,
+            0x1fac_62f4_32cd_f236,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2dfa_15b7_ebbd_e631,
+            0xb320_f94d_a9c0_63af,
+            0x1b77_601c_50e8_6a37,
+            0x3d4c_2ff5_d00a_3876,
+        ]),
+        pallas::Base::from_raw([
+            0x272a_3417_43de_26bc,
+            0xaea5_4b59_4992_3c71,
+            0x0c4d_e807_c535_b183,
+            0x2765_c806_aec7_71a7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x55ec_8f25_7b63_e13a,
+            0xd5fc_34d5_66ec_9ee8,
+            0x56c2_e320_91d0_8278,
+            0x1691_2185_0e3d_dc23,
+        ]),
+        pallas::Base::from_raw([
+            0xa148_4983_bee5_638d,
+            0x8a79_eb1b_c492_8b71,
+            0xd6df_d4fc_d029_984b,
+            0x2cbd_3698_162f_9ae9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7a1b_05bc_e3c4_7320,
+            0x32a7_6039_297e_8409,
+            0x732f_44e5_5380_a997,
+            0x202a_a34a_e870_a44e,
+        ]),
+        pallas::Base::from_raw([
+            0x4868_6f6e_4f31_74e7,
+            0x36ff_575c_ae12_a1e3,
+            0xe09a_f42d_581b_50a7,
+            0x2114_4937_0a1c_f825,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdb42_2a77_b183_1102,
+            0x7bf8_c21d_1049_98b1,
+            0xce43_b79c_9ad6_75f9,
+            0x349d_78c6_a718_8921,
+        ]),
+        pallas::Base::from_raw([
+            0x3070_ba0f_699f_080f,
+            0xd134_f6e0_36b8_c18a,
+            0xda34_d0a7_2cd2_aa3f,
+            0x2945_7a3e_37c3_b020,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6fa1_6666_d21b_774e,
+            0xb91f_c4b1_0e6f_767c,
+            0x12af_8401_416c_df0b,
+            0x220f_43a3_4cc1_d1a0,
+        ]),
+        pallas::Base::from_raw([
+            0xab2b_060c_b26e_f892,
+            0xe580_8ab1_a538_10e2,
+            0xf36f_e472_3313_570c,
+            0x36f1_3b73_3934_59b1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4e49_ebb2_947d_b488,
+            0x242c_04d3_d97d_c253,
+            0x9f41_d8d8_d7fd_b017,
+            0x013c_52dc_adff_81e0,
+        ]),
+        pallas::Base::from_raw([
+            0x0a29_7aca_54ca_ebd9,
+            0x63b0_abde_e434_9e09,
+            0x51d0_948c_c749_f20b,
+            0x069a_8db0_9a55_b0f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x406f_b28a_71f7_8032,
+            0x969e_b429_82fe_4929,
+            0xb1af_24a1_53c8_2095,
+            0x052a_3255_a165_23a7,
+        ]),
+        pallas::Base::from_raw([
+            0x98f1_82b9_5ac3_dcd2,
+            0xb088_ed0c_bf43_f3a8,
+            0xf950_fe2d_c059_db22,
+            0x1440_06da_cd6f_d539,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xda59_fedf_ac9d_3f1e,
+            0x226a_cb4a_3e98_29b1,
+            0x3a73_3388_a504_88dc,
+            0x3891_f70a_133b_a457,
+        ]),
+        pallas::Base::from_raw([
+            0x25c4_6ed8_4bf2_d71f,
+            0xbff1_2fe2_1b00_e737,
+            0xaedc_6377_1e3f_8787,
+            0x0ed1_b27c_c7ef_d5ac,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc0d0_516d_40d3_cc81,
+            0xa649_0816_1677_43c9,
+            0xca42_f4c4_4243_c1d5,
+            0x23b3_8f5b_b23d_8b5e,
+        ]),
+        pallas::Base::from_raw([
+            0xed2a_a32c_dcc3_fa23,
+            0x8cda_3463_fef1_02c3,
+            0x6b5a_f006_e433_ce3c,
+            0x1225_df05_7f84_56b2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8291_0d73_56a0_e04c,
+            0x64b6_73ac_c38f_66f0,
+            0xdd23_f657_9d03_0932,
+            0x2e91_cf8d_0328_73cd,
+        ]),
+        pallas::Base::from_raw([
+            0x6c94_8550_64c0_d6b3,
+            0x7a29_80d2_5e0a_beb0,
+            0xb651_e0fb_26b8_1656,
+            0x3b5a_8440_9640_1532,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbadb_8627_9571_bbfb,
+            0x124b_4809_a75e_8835,
+            0xc9e7_00a7_4761_1c17,
+            0x0920_b057_f207_5bcd,
+        ]),
+        pallas::Base::from_raw([
+            0xedf4_28d2_7f57_6e69,
+            0x81db_b861_29e9_b438,
+            0xfa8e_eed3_1e15_ec93,
+            0x1126_9fbe_894e_0bed,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb1f4_fe1d_7c44_7f1f,
+            0x83c4_259d_9758_51fc,
+            0x117c_2cb5_bf1e_601b,
+            0x22d9_4c09_d954_00dd,
+        ]),
+        pallas::Base::from_raw([
+            0xd683_7d9f_b5d2_4924,
+            0x313b_2636_f504_0619,
+            0x2b63_fc49_08e0_48d6,
+            0x1144_ded2_0553_ac9c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x387c_b408_a242_5394,
+            0xd079_369b_b24c_53d9,
+            0x8f15_d008_d9e9_d4c3,
+            0x3150_c6bf_e2c6_f49d,
+        ]),
+        pallas::Base::from_raw([
+            0x0404_728f_c1f7_729d,
+            0x7867_a4bd_2454_fc8c,
+            0x41ce_532d_3e8a_12e2,
+            0x1ba3_02a9_468e_f35f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3db3_09bf_c9b3_4ec5,
+            0x5033_0f96_20ca_8bcc,
+            0xa8ba_c058_76aa_2be0,
+            0x1448_b16c_5253_7aeb,
+        ]),
+        pallas::Base::from_raw([
+            0xc139_ae90_00d8_2a6f,
+            0xe882_76a0_e243_47b5,
+            0x3ddd_9c6e_1e82_af5b,
+            0x36f6_2912_c020_70b8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1402_2b05_d861_fd8f,
+            0x41d7_89f5_50b6_a9e6,
+            0x87d2_6c5d_6fc8_2332,
+            0x02f8_35e2_95b6_562e,
+        ]),
+        pallas::Base::from_raw([
+            0xbeb9_3c06_52f7_4ad8,
+            0xe619_72c1_05e4_cd9d,
+            0x884a_8d7f_678f_75dd,
+            0x2874_6006_1cc8_886f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x69f1_75ca_c3b9_58f2,
+            0x6747_f1ef_abb5_3998,
+            0x46ec_4c53_0949_f44c,
+            0x07ba_e7f2_46e1_1e0e,
+        ]),
+        pallas::Base::from_raw([
+            0x1021_d25b_0c19_dc41,
+            0xea7a_36bd_9497_28f4,
+            0xa859_e7cd_2cea_c8a7,
+            0x0efc_9a8c_f825_3990,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5dea_1fb9_0da5_a77b,
+            0xc0e1_3bb8_134a_bcc6,
+            0x9938_d35c_c9ea_b2d4,
+            0x2283_5512_a16b_cd1f,
+        ]),
+        pallas::Base::from_raw([
+            0x9be9_eaf3_1b0f_ad7e,
+            0x3491_2b52_0ca1_71f9,
+            0x0721_8f00_31b9_ac7e,
+            0x0e74_f8e8_90c4_692f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6b4a_0ce4_26ac_5fb9,
+            0x13cf_2331_e171_707e,
+            0x8539_192e_4fcd_6ea1,
+            0x128c_aa53_6e03_01ab,
+        ]),
+        pallas::Base::from_raw([
+            0x6e6b_8cb3_43a7_fcba,
+            0xb4b2_353a_6472_323d,
+            0x4867_0871_a8fd_61a2,
+            0x11c8_bcf8_bdca_1c4d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8f8f_bb6f_6f0c_7693,
+            0xa8cd_2c9f_9f6f_9eda,
+            0xf8f7_1e1d_01ab_dafa,
+            0x301a_41e0_0512_a1dc,
+        ]),
+        pallas::Base::from_raw([
+            0xcb70_6c7b_9d80_868f,
+            0xf2a6_d279_5c03_64f4,
+            0xbf2a_e148_ec6b_7343,
+            0x303f_3b4b_74c4_59b8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4c67_a5c8_e007_8e3b,
+            0x5a11_f487_f259_6bcb,
+            0x52d4_26c8_e498_b8aa,
+            0x1bf9_81ee_4546_e1d6,
+        ]),
+        pallas::Base::from_raw([
+            0xb25b_9eda_f3c4_0ace,
+            0x4cd8_57e5_5ff9_a68e,
+            0x4c57_4295_a50b_e5aa,
+            0x1457_bcd8_9f13_ef72,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6e49_8196_9af9_5023,
+            0xa9f4_ad41_da85_fd4d,
+            0xf643_d9f0_fcdb_da79,
+            0x1077_61df_2dd6_6275,
+        ]),
+        pallas::Base::from_raw([
+            0xfa32_bd06_b1af_c76e,
+            0xe61c_2fa4_1da2_cb0e,
+            0x4c70_289c_043c_e9ed,
+            0x2056_dd5d_ddfb_d391,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe6f7_b311_a5eb_8af4,
+            0xbbcb_dea1_4f28_c13d,
+            0x832a_fc2a_c06b_48c0,
+            0x1884_c484_9a23_39d1,
+        ]),
+        pallas::Base::from_raw([
+            0xae85_ea27_cf05_147e,
+            0xa661_d654_5ad7_8770,
+            0x8cff_b5bd_23cd_1e02,
+            0x0c4a_a17a_3d59_87b0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0903_2b71_20d2_c6d6,
+            0x631f_355d_d06d_ccc6,
+            0xf87c_c78c_ef4a_6b96,
+            0x3ef8_d7d1_dc6f_9f9d,
+        ]),
+        pallas::Base::from_raw([
+            0x43ce_ad49_48dd_c9d2,
+            0x2dc3_7407_7cca_9ffc,
+            0xac61_ddbd_67db_3e8d,
+            0x0297_f7b8_d03f_dedc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x361c_0eb5_afba_a00d,
+            0x8051_789c_48c8_8225,
+            0x9887_1616_2649_2d22,
+            0x3d51_6690_501f_18a2,
+        ]),
+        pallas::Base::from_raw([
+            0x3a63_1bfb_843d_d126,
+            0x4a8c_64d0_c4eb_0522,
+            0x9124_952e_3015_76f3,
+            0x1a00_2583_79af_10c8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd1b3_d060_1eee_6e43,
+            0xc4c5_f777_afcb_3d7c,
+            0x5890_cf65_cdee_4f41,
+            0x3bac_6dcd_6ca7_0869,
+        ]),
+        pallas::Base::from_raw([
+            0xddf9_20c5_9c7d_0fc6,
+            0x0586_3a0c_6afe_2d3d,
+            0x14d2_e276_9317_f416,
+            0x1b0a_6eba_dac7_b097,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1396_4ab6_46aa_aa39,
+            0x63ab_087a_ae54_f31b,
+            0x6d98_908d_b903_5320,
+            0x38d0_a593_6ed6_9ee0,
+        ]),
+        pallas::Base::from_raw([
+            0x63ad_df45_aee3_572a,
+            0xce8b_2242_3aa8_96fe,
+            0xddc1_4261_c724_5d07,
+            0x3535_1cd4_d4f9_1ba2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb5ca_a06f_a744_e9dd,
+            0x38e3_7f58_5670_d457,
+            0xb4df_a467_546f_0bbb,
+            0x01c3_1821_87e9_c394,
+        ]),
+        pallas::Base::from_raw([
+            0x735c_1df3_1c86_a46f,
+            0xc35a_47e7_9530_8784,
+            0x0b2d_cd84_17ad_d715,
+            0x106c_dfe8_b63a_2baa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1a6e_026d_0c07_0abb,
+            0xaca9_b562_15b5_32b2,
+            0xd41e_5c95_365c_f30a,
+            0x288d_ca02_8dc0_36dc,
+        ]),
+        pallas::Base::from_raw([
+            0x662c_4ded_8523_98ed,
+            0xb2d7_be0a_1d12_423d,
+            0x3ec6_e3b5_de20_815c,
+            0x291f_f461_d024_af8f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb09f_fa66_d16c_27ec,
+            0xa1da_22b0_8593_d72a,
+            0xe632_9240_dc54_eb20,
+            0x1a76_7954_e044_678d,
+        ]),
+        pallas::Base::from_raw([
+            0xe6fa_cd09_85a5_0427,
+            0xd348_8598_eddd_f7b2,
+            0xd7a2_306f_08c8_bcc4,
+            0x14f0_fcd5_0316_e459,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8f32_c8f3_5b64_6f4e,
+            0x21aa_08fc_88eb_4def,
+            0x2801_597f_de58_9a34,
+            0x3a30_a417_2ad6_0466,
+        ]),
+        pallas::Base::from_raw([
+            0x7d06_9540_e011_19ee,
+            0xc967_557c_731b_7356,
+            0xda5a_4c02_83a4_2f1d,
+            0x3d3a_57fb_c972_c1e0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd3c1_f6cc_c3e0_2a53,
+            0x0547_5fdc_7ec7_1268,
+            0xf000_9637_f19f_5b9d,
+            0x30ff_defd_ca48_bd81,
+        ]),
+        pallas::Base::from_raw([
+            0x91ae_9409_8215_c29a,
+            0x6132_5ed0_20eb_03f6,
+            0x7902_c795_04be_18dc,
+            0x2fd2_0d09_cb6b_ffe2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1a31_a60b_d542_73dc,
+            0xdb7f_1cc7_04b6_b150,
+            0x1861_c054_0121_d013,
+            0x206c_c173_9153_a5a3,
+        ]),
+        pallas::Base::from_raw([
+            0xe0e9_cb82_5775_fbd5,
+            0x4376_49cc_7524_f7df,
+            0x7bd2_080e_2134_cd15,
+            0x31f0_de88_e2da_7e71,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfc72_8173_780b_d7a5,
+            0x7aef_d664_bcbf_065b,
+            0xb00b_a3b7_0b2c_e355,
+            0x3699_84a7_28c9_f5db,
+        ]),
+        pallas::Base::from_raw([
+            0xce09_1005_839f_4217,
+            0x3295_dcc5_fe7c_58a3,
+            0x5aa3_0609_bda0_b60a,
+            0x0241_cf89_cdbb_b0f2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1b00_1931_9eba_29b1,
+            0x7216_7d55_26f9_8da3,
+            0xe7cf_f705_a799_754f,
+            0x2990_fd50_70f8_dc2b,
+        ]),
+        pallas::Base::from_raw([
+            0x1eed_c7c4_49c6_3e99,
+            0xbbf4_2638_ef85_5544,
+            0xf755_cb96_23f0_a42e,
+            0x01ee_b0e0_5fe3_1d97,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe37e_1f9e_40b1_54a3,
+            0x652d_23f0_cc13_026d,
+            0x8e86_4190_1d49_7ee8,
+            0x0664_9f66_0725_b3b9,
+        ]),
+        pallas::Base::from_raw([
+            0xf17e_dcbc_83c0_56f4,
+            0xbb63_cec3_3dc1_383f,
+            0x8e3f_6121_894f_a536,
+            0x3c11_2d8a_1c60_b07c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1a3e_7d79_56bb_fe12,
+            0xa7a9_ca39_4c1d_37be,
+            0x9740_4aaf_c9c4_a82e,
+            0x38aa_35a0_3d7c_378a,
+        ]),
+        pallas::Base::from_raw([
+            0xb631_7d5e_8de0_bb5d,
+            0xdc67_9917_adbc_69d0,
+            0x68b9_71fe_c7f3_8566,
+            0x1989_cd89_9970_7a95,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb220_5013_ba92_96bb,
+            0x2058_da75_36fa_a776,
+            0x0436_5be3_f84a_c088,
+            0x1af4_7a2f_3b0f_a032,
+        ]),
+        pallas::Base::from_raw([
+            0x2abf_4796_3d43_d58f,
+            0xb235_0d75_403d_f0f1,
+            0xa021_f706_77fe_3e5a,
+            0x322f_cdad_4c07_7b90,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x06a9_ae6c_cbe5_d5d4,
+            0xaa6b_45d7_03a5_e6f6,
+            0x4614_a78b_bebe_0932,
+            0x18cc_6bd2_2c90_ec21,
+        ]),
+        pallas::Base::from_raw([
+            0x967c_718d_fed8_a0b8,
+            0x95a7_bc7f_31b3_4247,
+            0x5a19_1faf_19e0_da2c,
+            0x115b_c841_1338_488f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1d51_ca19_915e_a485,
+            0x0b43_77f8_251d_b7af,
+            0x0825_fb37_e0ea_5a48,
+            0x1548_072e_3b8c_9cbf,
+        ]),
+        pallas::Base::from_raw([
+            0x48eb_6bb8_ab54_4b29,
+            0xae66_f29c_ec75_ea3a,
+            0x3195_4ba2_167a_b49c,
+            0x3d57_aaaa_db93_5f7b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0c46_3390_d414_4397,
+            0xb683_52dc_4bf0_80f6,
+            0xa6a1_5861_0737_0e45,
+            0x2400_81aa_ffbc_d341,
+        ]),
+        pallas::Base::from_raw([
+            0xbbef_dfca_46b3_a803,
+            0xc3dd_0e85_0c04_6877,
+            0x71e3_e8e2_2feb_ec64,
+            0x08a9_eaf7_b5a5_39fc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5e06_c2b1_b31b_93b4,
+            0xc313_a37c_4320_dc75,
+            0x7efc_a295_2612_6f7b,
+            0x0aff_f83d_40bf_1741,
+        ]),
+        pallas::Base::from_raw([
+            0xc7cb_8f4c_fdc8_1d4b,
+            0x5a50_fd94_f40c_8457,
+            0x71d6_4791_1e74_f12b,
+            0x1541_6661_ee80_7c70,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2802_c3f2_89e9_5d61,
+            0xf33c_77fb_6c07_ea84,
+            0xbbc9_320f_0df4_143a,
+            0x356c_a3df_9cc0_4f80,
+        ]),
+        pallas::Base::from_raw([
+            0x4f45_fa2b_9fd8_1daa,
+            0x7f47_5e59_7199_616e,
+            0x7d3b_df29_ce4e_dfb5,
+            0x1dae_8d6b_f927_1f87,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x473f_87de_7e94_192f,
+            0xd393_9d88_1211_44b0,
+            0x963b_e798_1010_c5ea,
+            0x17ef_3597_df23_de2e,
+        ]),
+        pallas::Base::from_raw([
+            0x1e95_8dac_55e3_db76,
+            0x12d2_c681_d82e_ed9c,
+            0xd3d5_1684_1d5e_e0cf,
+            0x0ac9_26dd_9cea_3447,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6858_89c4_1505_8b08,
+            0x6db7_b0e4_db13_97af,
+            0x5b80_1548_f65c_a777,
+            0x0bc7_e844_145e_084b,
+        ]),
+        pallas::Base::from_raw([
+            0xe538_4d8c_3f79_208a,
+            0x151f_22e1_29fd_3354,
+            0x7a90_a95c_27ac_21db,
+            0x19ed_e445_2202_a655,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xded8_57fc_ee32_3789,
+            0x0bfe_aa0f_301d_6f33,
+            0xf39c_96d3_5d9b_bf6d,
+            0x2a9d_8309_fabf_976f,
+        ]),
+        pallas::Base::from_raw([
+            0x528c_0f45_53ee_3161,
+            0x6dca_d2cc_ef93_aa93,
+            0xe704_f08a_2ec9_996c,
+            0x1bfd_16da_cc0d_2d3f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x188b_8471_e40c_3640,
+            0xa201_8659_0697_76d0,
+            0xd08d_57e0_209d_0571,
+            0x1a90_63bb_e154_64ae,
+        ]),
+        pallas::Base::from_raw([
+            0x568d_9049_e597_c096,
+            0xdd50_78d0_87aa_87c5,
+            0x3c15_73d9_7187_5ef2,
+            0x388e_691e_ea9e_23f4,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x40ab_3fc1_9370_1560,
+            0x29ce_a290_2ec8_40f5,
+            0xd75d_0b95_a9f7_f97b,
+            0x0af0_7979_abd8_c613,
+        ]),
+        pallas::Base::from_raw([
+            0x5c15_cad2_0553_9ced,
+            0xc602_0943_036b_091b,
+            0x4c2c_78ce_e591_7f5e,
+            0x1959_acff_f5a3_4bf9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfa8d_876d_7cc0_0fb8,
+            0x5a9c_4a97_786d_19a1,
+            0x12be_8115_3b9b_aee9,
+            0x1a0f_2978_8594_d43f,
+        ]),
+        pallas::Base::from_raw([
+            0xed97_14bc_d4e8_8df7,
+            0xe734_c0d3_0dd8_9ea3,
+            0xec5d_2259_c86d_e1f5,
+            0x1322_03f3_5788_8faf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x93b5_3b69_0484_8f93,
+            0x1339_8c0d_df8c_cf22,
+            0xf46d_112e_a566_4f42,
+            0x0041_e2f5_f2d6_8640,
+        ]),
+        pallas::Base::from_raw([
+            0xb605_0c79_bc10_7760,
+            0xee50_15ea_4b49_adac,
+            0x65e3_2182_22f4_2268,
+            0x31cc_6994_41a9_c0ad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x94ae_ab7c_eb62_81ab,
+            0x5228_ca94_d8f1_56ab,
+            0x475a_af93_16b9_884e,
+            0x1986_0f4a_6c3e_b16d,
+        ]),
+        pallas::Base::from_raw([
+            0xebdc_e98f_ed8c_6d40,
+            0x0540_8297_454e_307f,
+            0xd024_3225_3f4a_6703,
+            0x1af1_a0e4_f57d_5be3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfa36_a92e_b85b_e634,
+            0xb44a_ed3d_eab7_8850,
+            0xbe32_58d6_6770_c14b,
+            0x35ff_5141_816d_634f,
+        ]),
+        pallas::Base::from_raw([
+            0x500c_0c1b_ceaa_bd2c,
+            0xf0d6_669b_f68a_ef2e,
+            0xbd8d_f904_9439_9c72,
+            0x2db1_ef2c_35ad_69d3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc0b4_8b5d_58ff_c10c,
+            0xe5ca_70be_a28e_8cd2,
+            0xf439_95af_87ab_fbbd,
+            0x0730_82f6_d583_d377,
+        ]),
+        pallas::Base::from_raw([
+            0x1062_30a0_d505_0d13,
+            0x4b6a_3c80_f34b_c350,
+            0xc6fe_8327_3096_a319,
+            0x2230_637f_0cc2_89f0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x25e8_9191_c18b_b009,
+            0x82f9_29c5_b2a1_8aad,
+            0x3f85_1520_6a2a_9706,
+            0x25fe_4261_1ed7_737c,
+        ]),
+        pallas::Base::from_raw([
+            0x8337_c552_d63e_02f6,
+            0x73cc_77a9_0b10_5fb4,
+            0x94db_e561_3bad_7a8c,
+            0x26e7_36b7_a39f_c440,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0946_b650_b1c0_8743,
+            0x9db9_c020_11b8_8c65,
+            0xfa3c_4dca_cbf8_ff13,
+            0x06e5_c844_eb13_24bc,
+        ]),
+        pallas::Base::from_raw([
+            0x3c8f_57f9_a8a3_70a1,
+            0x37c5_8b38_e0fc_1baf,
+            0x6b33_3515_afc8_813b,
+            0x1a82_f5f2_799f_573a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xbea1_5e63_420a_279b,
+            0x8e07_282b_8912_351d,
+            0x408f_f799_d86a_fd7d,
+            0x078f_7b8e_ce6e_22e4,
+        ]),
+        pallas::Base::from_raw([
+            0x88bc_d999_cef1_ecdf,
+            0x333d_9c44_d4e7_0bec,
+            0x8035_febd_691a_b18e,
+            0x1407_a098_70a5_1148,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x454c_97de_2584_aa5f,
+            0xeec7_9406_7a27_a899,
+            0x0955_d427_80d3_4702,
+            0x1d35_9759_c143_d6ff,
+        ]),
+        pallas::Base::from_raw([
+            0xa816_af30_15f6_605c,
+            0x0710_71d6_689b_a943,
+            0xdb02_148a_c73c_a8e1,
+            0x05dd_3dec_b765_a777,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdb80_38eb_d76a_fb2f,
+            0x0dc9_0a9f_1c88_325d,
+            0xcf8c_c81e_1622_6cf5,
+            0x2a99_7c7b_a771_a172,
+        ]),
+        pallas::Base::from_raw([
+            0xe8c2_d9bd_2155_e22f,
+            0x8a70_25a0_bd8f_e9a9,
+            0x5be9_c192_1d28_e841,
+            0x12ea_8763_5c8a_9c3b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4e5c_2298_84b8_933c,
+            0x4677_86a0_b2a8_994c,
+            0x1325_900b_c323_5b30,
+            0x2a1e_4623_a4ae_cc18,
+        ]),
+        pallas::Base::from_raw([
+            0x566c_512b_6e4b_d49b,
+            0xa74e_0f1c_1e2f_0b5d,
+            0xcb43_553c_5583_6e1d,
+            0x13a4_a175_6930_a346,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x503c_48f0_8921_2210,
+            0xed91_7232_785d_86d0,
+            0xc0c2_ad95_b9fd_35fa,
+            0x0b03_ca6a_1e38_17f6,
+        ]),
+        pallas::Base::from_raw([
+            0x4c85_4c2e_f43b_beb6,
+            0x3325_8fe3_0797_c712,
+            0x7b2b_65b2_71d7_d17f,
+            0x2608_45d2_59cb_fed7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5143_9665_16ca_1642,
+            0xfaa0_77c5_094f_ad4d,
+            0xcbc1_d869_aa7d_14eb,
+            0x2cf2_0f0a_34c2_1025,
+        ]),
+        pallas::Base::from_raw([
+            0xad36_eea9_9921_cdc6,
+            0x2e1d_370d_297f_0a41,
+            0xc957_086f_0915_9341,
+            0x22cc_cf10_e21e_1daf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfb44_e614_c314_ad4c,
+            0x8b24_db0b_dfd8_617d,
+            0xd17d_196f_3f6a_9e26,
+            0x27c8_ffd6_32df_7764,
+        ]),
+        pallas::Base::from_raw([
+            0xa5ca_43b4_390c_42dc,
+            0xd7a2_791f_6a1b_568b,
+            0x98a7_1f22_9c63_b251,
+            0x31a3_0d03_e7a9_779d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf4b4_4ce9_8722_550d,
+            0xdd93_8b22_0139_0ac8,
+            0xfe86_f423_5227_eeaa,
+            0x31d2_8dfe_adb7_adcb,
+        ]),
+        pallas::Base::from_raw([
+            0x5adb_7f33_74bc_7bdc,
+            0xc10f_d1b1_2bb8_8630,
+            0xae28_7ce5_935b_f41c,
+            0x2a20_9773_8054_a39f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3be7_413e_3d67_146b,
+            0xad57_cda9_2e17_75bd,
+            0x2c5f_f9c4_e371_aee9,
+            0x1b81_7a0e_2f33_4e49,
+        ]),
+        pallas::Base::from_raw([
+            0xa15d_8dfb_cd6d_2737,
+            0x2a49_ce19_5f43_8fcb,
+            0x4d38_1b52_1b1a_cfd1,
+            0x0e93_ce94_5828_a23c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1f51_ce5d_d476_cea2,
+            0xdd2f_92cf_2184_73d4,
+            0x666a_9231_c766_0b6b,
+            0x2b1a_a9ae_9756_b3fb,
+        ]),
+        pallas::Base::from_raw([
+            0x46a9_9cce_8c15_cca3,
+            0xbf85_bbce_c460_d9aa,
+            0x4e8a_a7b8_4aa4_1021,
+            0x1780_a81a_6a2a_e54c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe17a_6b50_9568_c08a,
+            0x259f_ae60_9e4e_fd82,
+            0xaf7f_d128_3ec4_4bdc,
+            0x1c09_ded3_74a6_91ad,
+        ]),
+        pallas::Base::from_raw([
+            0x70df_b9a3_3551_a4d5,
+            0xfe2e_eecc_1187_c582,
+            0x8586_f426_db21_1456,
+            0x26a6_2ba8_9350_0fca,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5ec3_cd23_5624_6658,
+            0x0bab_696b_14fe_b07f,
+            0xf70e_9a72_5b80_1b25,
+            0x22ff_987b_a1c6_cd80,
+        ]),
+        pallas::Base::from_raw([
+            0x7808_0fb5_8b7c_ee41,
+            0xce4d_d83d_b956_929b,
+            0xeac8_39ce_a74d_ddc4,
+            0x2317_33ea_2b06_a86d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaec8_6746_685d_fe1f,
+            0xc218_0c0a_b71e_5168,
+            0x8d76_6976_1a70_70fa,
+            0x0008_c8a2_7bfc_9cdb,
+        ]),
+        pallas::Base::from_raw([
+            0xaa4f_3a36_9871_ca77,
+            0x7b4c_0ea1_c1ad_696f,
+            0x4ed8_5210_fab0_f980,
+            0x3e6c_bd12_b49c_1bdb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8f6a_0cea_47e1_7bc8,
+            0x2864_1feb_0791_af26,
+            0x60a3_c179_c72a_2b89,
+            0x10ee_4430_7ce0_cbf3,
+        ]),
+        pallas::Base::from_raw([
+            0x66aa_db97_f4c0_a463,
+            0xe302_d7db_78d5_576d,
+            0x482d_9194_87cb_1e2f,
+            0x0e9a_4a4a_36ad_1881,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4c34_5c29_f898_6470,
+            0xdff4_47e0_e1f7_6080,
+            0xf9db_c0ba_062c_1970,
+            0x06cd_6193_ac7c_e277,
+        ]),
+        pallas::Base::from_raw([
+            0x6104_a761_347d_3597,
+            0x8280_faa1_48a1_e104,
+            0xa011_5d0a_2f37_3747,
+            0x0c73_50b8_829e_b73b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7a98_41a0_1d18_03f0,
+            0x9dcd_a639_ea9d_d030,
+            0xd91c_8c1f_f2fc_d414,
+            0x22b1_7e59_75fc_4d7f,
+        ]),
+        pallas::Base::from_raw([
+            0xcaea_f461_5474_dd21,
+            0x973b_49e9_4e35_150e,
+            0x1a20_3ee4_03cb_bc49,
+            0x2012_40e4_943d_2c2c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x75f1_33d9_1456_5351,
+            0x1896_214f_0087_2854,
+            0x0cd4_7ce7_26fe_ea9d,
+            0x2663_26f8_7005_286e,
+        ]),
+        pallas::Base::from_raw([
+            0x1737_3826_4271_f35f,
+            0xc7d8_f940_6e0a_7c1f,
+            0x5924_d283_767f_9d5c,
+            0x0eb5_0f0e_3127_577d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x68e2_0f5e_bd39_c14c,
+            0x477b_6956_a99f_77cb,
+            0x313a_9885_a170_99ce,
+            0x1a86_5d1d_04a2_df73,
+        ]),
+        pallas::Base::from_raw([
+            0x0623_0fc4_c152_65bb,
+            0x52dd_72d4_2781_e376,
+            0xa418_49f5_864e_6635,
+            0x10fa_c29d_eb03_270d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa57d_3895_4a64_fb15,
+            0xca09_c64e_7421_cae2,
+            0xf017_5c2b_ec60_fe7f,
+            0x0195_07a1_b05a_ac7e,
+        ]),
+        pallas::Base::from_raw([
+            0x6075_dd27_63ab_77ac,
+            0x1aa0_6090_7bb7_8a07,
+            0xef6a_bddb_8c68_635f,
+            0x1b09_b5e0_1b7a_f882,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7849_72ec_1ae0_37c3,
+            0x5a42_69be_4726_d8bd,
+            0x56a7_19a2_e165_6dc7,
+            0x1418_9c78_50da_d383,
+        ]),
+        pallas::Base::from_raw([
+            0x815b_cd2b_ca53_eb95,
+            0x556c_78b4_7751_dbf6,
+            0xf053_fd13_1a20_08c1,
+            0x2881_c78c_feab_68d2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf306_1913_4ae0_7a9e,
+            0xd306_6f26_bd6b_4a10,
+            0xd230_d8ea_c29a_51fc,
+            0x0e6c_d0f8_d1ea_c0f0,
+        ]),
+        pallas::Base::from_raw([
+            0x9fa4_27be_acec_9bb8,
+            0x2a2b_c250_80aa_697f,
+            0xdbf7_9c2f_db4d_bd95,
+            0x0028_bb6a_8622_43f5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf013_8449_cc96_1899,
+            0x379d_ac9d_9ebf_876a,
+            0xeb7f_99d0_31cd_e93d,
+            0x130b_5b85_19be_08fd,
+        ]),
+        pallas::Base::from_raw([
+            0xa4ed_7e43_422c_baeb,
+            0x15bd_a565_cfd0_99f1,
+            0x75e7_3fae_ef12_8208,
+            0x1196_b027_3cf1_1fbc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc311_f99e_5530_bae5,
+            0x5e96_2191_2f98_67c0,
+            0x0ec4_6179_0832_791f,
+            0x3ab8_8c62_791f_cabc,
+        ]),
+        pallas::Base::from_raw([
+            0xe30c_dbb2_d1a3_46f3,
+            0x300d_881b_2157_d573,
+            0xe362_292b_af62_b032,
+            0x02c4_23ea_26f4_a3a1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7244_fb82_f14a_5b15,
+            0x1716_dbf8_c880_c5a0,
+            0x134b_bb0d_fa04_d130,
+            0x2c80_0943_ac16_971f,
+        ]),
+        pallas::Base::from_raw([
+            0x978a_d2ca_089a_5c31,
+            0xe1e6_1bbd_0163_3f49,
+            0x3330_aaf3_b642_cbd0,
+            0x09a1_c6d2_ba6b_3d2c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x28a5_4ff3_bc33_d5be,
+            0x3bf6_b12e_cf48_395c,
+            0x222d_c71b_557c_9043,
+            0x2440_8b65_1f74_a85b,
+        ]),
+        pallas::Base::from_raw([
+            0x9066_0895_04af_52c0,
+            0x35e4_e8f7_66c0_15d1,
+            0xa386_9229_659f_2484,
+            0x207d_3198_11df_6bc7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x15d9_722b_d97c_c054,
+            0xc0a4_0440_6239_45f9,
+            0xb46b_37e5_73fd_989c,
+            0x2b58_6ce7_ac3a_9166,
+        ]),
+        pallas::Base::from_raw([
+            0xb9d6_2d9d_3f31_dbef,
+            0x7275_cd16_b7e6_a7a5,
+            0x8d85_c044_6dd5_7a4d,
+            0x0d86_a9fc_da53_0505,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6cc3_c1bc_2016_e727,
+            0x617b_0dd8_180a_164b,
+            0x4fd6_39de_9f61_971e,
+            0x3d4a_6fd8_19ba_27f0,
+        ]),
+        pallas::Base::from_raw([
+            0x3413_e80e_aa57_8bd4,
+            0x7b16_485e_63bb_769f,
+            0x62bb_5921_8c4c_4aa2,
+            0x1098_9857_f8af_586f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d33_b7d2_2e3a_e53d,
+            0xe888_af7e_b724_5aa1,
+            0x78e6_f0f3_0b76_b896,
+            0x15f9_f0ca_f850_8e61,
+        ]),
+        pallas::Base::from_raw([
+            0xbece_4f0d_e233_cb6a,
+            0xeb3f_a9df_d0c3_9b89,
+            0xb351_ff58_43cb_cac6,
+            0x372a_a61b_e920_3f30,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x74f7_4a0c_a5d5_f226,
+            0x3751_b852_e703_7cb6,
+            0x9ad1_c8fa_759a_1891,
+            0x10fd_b6b7_2434_8442,
+        ]),
+        pallas::Base::from_raw([
+            0xfcd7_aa2c_6716_e475,
+            0x4f9c_2246_cede_c392,
+            0x06aa_a436_01b9_97e3,
+            0x0a26_804b_d57e_c010,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x539f_f781_f164_4836,
+            0xd1dc_dc87_3d99_a0c6,
+            0x2de4_7396_8ef1_0b89,
+            0x0ff1_67a9_82ba_334c,
+        ]),
+        pallas::Base::from_raw([
+            0xb50d_ab91_5188_8e47,
+            0xc1e0_55fa_97df_88cb,
+            0x3547_e3a1_e0dd_755d,
+            0x2d28_735e_9afb_ed0a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa278_8a09_c089_d696,
+            0xf529_cbd9_0600_711e,
+            0xcb66_bb7a_1ef8_523e,
+            0x29b9_17aa_34eb_2bac,
+        ]),
+        pallas::Base::from_raw([
+            0xed7f_a639_85a4_bf96,
+            0xbc46_b5a4_cea4_8664,
+            0x2c0b_8691_1652_3fde,
+            0x3d30_43c2_7ddc_7417,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3c6e_e712_6545_c6fc,
+            0x361e_60a3_9a64_72b5,
+            0xa4fa_2bc5_6f5a_3772,
+            0x206b_0968_ab5d_844a,
+        ]),
+        pallas::Base::from_raw([
+            0x7cc3_6e87_ba43_ad08,
+            0xf915_23eb_eca6_b1dc,
+            0x2fa9_d1da_381f_945a,
+            0x25ff_57c6_8a6c_aa43,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7726_42a3_c1c2_2be0,
+            0x5061_8408_7ab7_daae,
+            0x67ee_d982_89e3_c3e4,
+            0x1c40_7832_12e1_7379,
+        ]),
+        pallas::Base::from_raw([
+            0xaa43_becb_fcb9_ce01,
+            0xe538_4afd_eab9_4a52,
+            0x3e9c_4b32_8d24_33ff,
+            0x0057_5aff_a2e5_24a2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xea0e_ce17_54e1_854f,
+            0x4459_6094_9fc0_86c4,
+            0x835e_6759_c23d_e766,
+            0x0be3_ab41_eeec_484d,
+        ]),
+        pallas::Base::from_raw([
+            0x48f9_a609_6201_6be1,
+            0x1909_3863_efb7_d549,
+            0x2b59_8ff2_accf_39ce,
+            0x389d_847e_e5a1_b1e9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x936a_c037_696b_6537,
+            0x3560_e5b4_a313_28a8,
+            0x1f47_fea4_cfcb_2890,
+            0x0c6b_bc4d_4957_3c28,
+        ]),
+        pallas::Base::from_raw([
+            0x2ac6_7e2f_fba6_8746,
+            0x80e1_d8ee_95b1_e538,
+            0x0ff9_37f0_4793_a319,
+            0x1094_a38b_a671_2718,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8ec7_df2c_b2b8_fae3,
+            0xeb40_cbe1_652c_ef89,
+            0xa02d_a353_aadf_1885,
+            0x2c64_885e_84cb_e485,
+        ]),
+        pallas::Base::from_raw([
+            0xccf9_06a7_d926_e277,
+            0x5d7e_8f08_57f5_5c3e,
+            0xdf71_1b47_1772_d5f2,
+            0x0ca8_260c_f185_b333,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xefba_501d_d999_2307,
+            0xcbce_e2bf_bc0a_86da,
+            0x7ba9_c366_8cca_0e58,
+            0x10e0_7bda_6733_fc28,
+        ]),
+        pallas::Base::from_raw([
+            0x0a72_e66f_df7d_ebc3,
+            0xf16a_67d6_2aa2_75b9,
+            0x03d2_5e00_aa84_2a6f,
+            0x26c7_55bc_dfdb_ce70,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1853_7664_9aef_2dff,
+            0x7f94_4c4f_10a4_9717,
+            0xe235_80ff_b9f5_ac99,
+            0x1d38_7fb6_5f7f_4a52,
+        ]),
+        pallas::Base::from_raw([
+            0xb59f_6906_b41f_c19e,
+            0x6ae3_f226_ba4b_d26b,
+            0x5171_2aca_d3e3_cb0c,
+            0x3019_b3ab_9250_0e25,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7405_db8c_8d13_97ec,
+            0x3a1f_5c63_44b8_b4b2,
+            0x3b16_175b_df99_eacb,
+            0x0e5c_3936_5a61_4966,
+        ]),
+        pallas::Base::from_raw([
+            0x3c2a_824f_2a3b_26ee,
+            0x0cb5_c814_2e77_4dc9,
+            0xe648_7df6_e45f_90f6,
+            0x3a37_71c5_e20a_e479,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0f51_40a8_9629_08a9,
+            0xab28_d099_4637_c6c5,
+            0x8d40_0c2d_dfbb_597d,
+            0x359a_fe63_b4f2_9823,
+        ]),
+        pallas::Base::from_raw([
+            0x1fc4_f014_db42_75cc,
+            0x136d_5fd6_5404_503c,
+            0x0844_9c43_ce86_523a,
+            0x0677_006e_034e_098f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7cb5_4bb7_ecfc_0a93,
+            0x64fc_3b54_53ba_a1af,
+            0xc453_e619_2e6a_86d5,
+            0x2838_035c_ac98_9917,
+        ]),
+        pallas::Base::from_raw([
+            0x0f6e_5839_dff8_8640,
+            0x1290_4182_7ebc_73df,
+            0x4735_3b6f_4a1f_7e8a,
+            0x31aa_a1ad_ca93_7f4c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9f43_37c3_6d2b_534d,
+            0x3bc4_bb39_ede7_0bc3,
+            0x2f38_79ae_104b_8a55,
+            0x13b0_c171_d97a_4fc8,
+        ]),
+        pallas::Base::from_raw([
+            0x0d46_d1fa_370c_5421,
+            0x8397_7f28_65be_b753,
+            0x63f4_7e7d_e49e_dfd8,
+            0x118c_46bf_17f3_a19f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb4eb_a0ce_8969_48bf,
+            0xad2a_98d9_656d_0cf3,
+            0xc651_741d_4d5c_668a,
+            0x039e_bf84_e942_4d6f,
+        ]),
+        pallas::Base::from_raw([
+            0xe095_c878_476c_81a2,
+            0xedc7_bc68_679d_680e,
+            0xf763_852b_4eed_2af1,
+            0x15e9_98b1_e98e_6e1b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8566_9a18_2b28_8d21,
+            0x9344_357f_0a1f_da13,
+            0x3772_d744_a179_b8ed,
+            0x1b03_8534_4ec0_b55a,
+        ]),
+        pallas::Base::from_raw([
+            0x4661_8dac_39b6_0421,
+            0x4ef5_5d88_b13c_01b6,
+            0x5315_7c47_50c6_9734,
+            0x2a3a_6e07_2174_0395,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1e17_b775_4399_3b91,
+            0x2837_ecac_c403_6f3d,
+            0x56b4_0a0a_664d_8fb4,
+            0x2f04_0f71_e7e4_d554,
+        ]),
+        pallas::Base::from_raw([
+            0xcbf0_51de_b98f_c269,
+            0x5c6a_a704_7588_9496,
+            0x42fa_c5f8_299f_bcfe,
+            0x1247_eccd_7849_645b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x163e_3aad_4d5f_7140,
+            0xb692_8158_7410_67a5,
+            0x26b5_6868_509f_8ba2,
+            0x05b1_5c3d_6a3f_a4ff,
+        ]),
+        pallas::Base::from_raw([
+            0x7cab_64a8_a8d0_1dc7,
+            0x5b3b_f269_2d68_3607,
+            0x2a15_8448_6787_3934,
+            0x259a_0f62_1c04_39a1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5bda_eacf_bdfb_6df5,
+            0xff6e_56d7_32b9_a43d,
+            0x4557_5d7b_eff9_afc9,
+            0x115f_3e25_b370_bb60,
+        ]),
+        pallas::Base::from_raw([
+            0xfa75_dfbd_dac8_8daa,
+            0x2f30_93f7_6e39_fdb3,
+            0xc8c1_e227_7dc5_95ff,
+            0x3ea1_7ec5_148c_679d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2447_5f8c_9993_6ad1,
+            0x51ee_6362_1f78_87c0,
+            0x475e_d1d0_ab29_f628,
+            0x0303_ffaa_2430_a0b7,
+        ]),
+        pallas::Base::from_raw([
+            0x1dd2_a952_d5a5_189d,
+            0x22cc_a0bf_5041_4271,
+            0x49b2_3458_622c_c627,
+            0x0130_c236_40f8_7f89,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xaaf1_9c5a_cad7_1c28,
+            0x8bb1_2918_8b7a_7858,
+            0x23e7_ce2d_92dc_d66a,
+            0x1942_3751_8e3a_2f23,
+        ]),
+        pallas::Base::from_raw([
+            0xa32c_eb66_4b3e_d4d9,
+            0xeb2b_683e_f2b0_6773,
+            0xa6f3_5519_396e_3a07,
+            0x1d2b_b94d_b61e_c34c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4d21_de83_ed0b_0ed9,
+            0xbddf_daab_a5f2_5e3b,
+            0x0bbc_a486_495e_59d5,
+            0x1685_4768_9da6_e3ad,
+        ]),
+        pallas::Base::from_raw([
+            0x8704_6afb_e059_6e25,
+            0xbf4f_ef21_6f4a_5988,
+            0x336a_e9d0_5d21_7097,
+            0x0a21_13b0_758e_02e5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1b2a_4f19_90f6_4ec2,
+            0x56ab_849f_5d02_0569,
+            0x2814_07aa_f7bf_a9ed,
+            0x0601_c91a_2106_8b41,
+        ]),
+        pallas::Base::from_raw([
+            0xcb15_a0dd_808e_bc3d,
+            0x07de_f385_c064_d556,
+            0x2d6e_5a28_1e93_64d8,
+            0x1039_dc0a_cb9e_a154,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xed0a_e905_2f8f_ec82,
+            0xc113_bd2c_e530_54b2,
+            0x0c7a_a4fc_f303_779b,
+            0x0874_2829_cd8c_a708,
+        ]),
+        pallas::Base::from_raw([
+            0x6882_2f87_7899_c3f0,
+            0x1896_a6ab_5b9e_67b3,
+            0xcd49_5299_356c_6330,
+            0x28a6_ee29_3adc_b613,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4b5e_4d5b_3583_5cb1,
+            0x7c02_2a85_aaa9_48e4,
+            0x8e1f_4a9b_8d4b_d320,
+            0x3a17_94db_a7a9_3fc6,
+        ]),
+        pallas::Base::from_raw([
+            0xdd55_72e9_e0fe_59d3,
+            0x7b10_d3c9_524a_5acb,
+            0xfdfd_2d82_7b63_647c,
+            0x0f9a_11b5_efe5_01ac,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8a46_db66_f88a_dfda,
+            0x231a_f130_d914_9161,
+            0x9afc_b0b8_a037_044d,
+            0x2f80_ba78_43d6_0676,
+        ]),
+        pallas::Base::from_raw([
+            0x7b8b_4486_b3b0_f9ac,
+            0xe9b8_0152_03ff_232a,
+            0x3152_b63f_bf6b_2e27,
+            0x2c41_0add_3b9a_25cd,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x346c_dbf0_be76_95e5,
+            0x67e3_f66a_ed16_d76a,
+            0x0461_f1a2_8763_60a3,
+            0x0a18_29ce_9f91_a1d5,
+        ]),
+        pallas::Base::from_raw([
+            0xf17b_9a2b_6fc8_8392,
+            0x2c4e_a7a2_bc5d_fd52,
+            0xf512_092f_5365_a2ac,
+            0x2c5f_2e6d_efce_5696,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5c1_e1f8_460d_9bd0,
+            0xb139_cee1_fbb6_2242,
+            0xf5e6_14a0_2785_2538,
+            0x133b_ce23_0971_df91,
+        ]),
+        pallas::Base::from_raw([
+            0x189c_cd97_00f7_da52,
+            0x0ebf_79f0_cb47_65ce,
+            0x749c_44ef_1e7d_1d11,
+            0x312f_ad99_bbe7_c204,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe752_8bbc_917a_6be2,
+            0x0bc2_ab1e_2504_cf52,
+            0x3a48_1726_09ca_4031,
+            0x2ce5_37e1_0a7c_529a,
+        ]),
+        pallas::Base::from_raw([
+            0x64f7_9aef_f4c4_2d79,
+            0x9fd8_db65_8592_ed64,
+            0xf842_04da_8886_9faf,
+            0x377a_985c_3a1b_860c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5d3e_bfc6_25d2_05fa,
+            0x10fa_dab3_20e6_ff3f,
+            0x1784_f663_e29a_30ca,
+            0x2a69_96bb_3ac5_9673,
+        ]),
+        pallas::Base::from_raw([
+            0x3fb6_a9c2_e6d6_0488,
+            0x90b5_9221_a401_79bf,
+            0xdc88_a94b_7528_facb,
+            0x2c29_eed6_7fbd_9a89,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfea6_2c82_74a6_af4c,
+            0x388c_7bcf_228c_73fe,
+            0xc0c7_ea19_e955_ddd7,
+            0x1e46_4602_7b2b_c1ca,
+        ]),
+        pallas::Base::from_raw([
+            0xca09_e0e1_e39c_3c01,
+            0x701a_20ec_477e_affc,
+            0x0fa5_db8e_79e9_4367,
+            0x3cfc_3c48_e73a_04d1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd84c_ccf5_eb33_4179,
+            0xce23_1898_15de_f8c7,
+            0xe76c_8dea_7db5_8e1f,
+            0x3aca_479f_f6b4_9d8a,
+        ]),
+        pallas::Base::from_raw([
+            0x17f1_246d_f123_7a60,
+            0x2e17_9d8f_8d2f_2fa6,
+            0x32d0_e613_423e_f64f,
+            0x067c_293d_8b6e_c1ae,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8ecd_0c0a_17a7_8a19,
+            0x7136_7ba6_7f60_b188,
+            0xff5a_bf2c_d1aa_d63a,
+            0x3656_099b_d15e_edb5,
+        ]),
+        pallas::Base::from_raw([
+            0xc0df_1063_d1e2_9ebc,
+            0x9aec_45eb_3df3_5ab5,
+            0x6e71_3f49_7b86_cba1,
+            0x2e44_9f1d_b523_59ca,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa56e_440e_afba_0e69,
+            0x10fb_4ac0_433e_be1a,
+            0xd95f_392c_8d71_ee6d,
+            0x34ef_089e_8af4_75db,
+        ]),
+        pallas::Base::from_raw([
+            0x9cde_8968_4faf_ee29,
+            0xd390_7c2b_4645_4693,
+            0xf858_c045_9eb2_6def,
+            0x2a59_6136_fc96_199e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd341_83b8_68a0_094b,
+            0x46c5_6330_1224_b24f,
+            0x939f_ac11_dc0b_394b,
+            0x1198_5ddc_b45f_ed85,
+        ]),
+        pallas::Base::from_raw([
+            0x4503_5252_8c23_bdac,
+            0x818c_e278_0479_31a8,
+            0x4d8b_05af_33be_0a68,
+            0x2854_b240_01fe_2947,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x21ea_923b_9dba_2757,
+            0x102d_32ee_7267_baa4,
+            0xe07e_8d17_ff5b_d96d,
+            0x0539_fe92_593b_cb44,
+        ]),
+        pallas::Base::from_raw([
+            0x89a6_e78c_a798_2cda,
+            0x776a_98ae_c6c1_fc45,
+            0xa4c1_cc4e_5efb_20c5,
+            0x2f15_1e00_8953_fe2c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1023_5041_83b9_1d97,
+            0x81fe_bc2a_8877_ca60,
+            0x1924_5c49_fe3f_bb4c,
+            0x0d38_a13f_e3f3_74f3,
+        ]),
+        pallas::Base::from_raw([
+            0xd643_1731_44a1_45de,
+            0xcd95_d78b_7357_5f87,
+            0x6ed2_6c3f_d329_09e3,
+            0x0960_8380_e85f_342a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4291_8cdb_be2f_c05e,
+            0x9acf_4a57_b166_d495,
+            0xca99_c923_f45e_49ab,
+            0x3fa1_33ab_04b7_a1e9,
+        ]),
+        pallas::Base::from_raw([
+            0xd731_a982_524d_4da0,
+            0x55ec_878d_0321_1172,
+            0x48d5_eaed_e324_92cd,
+            0x0cff_b957_d167_7198,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf528_ad8a_c429_a4c2,
+            0xd99b_85cd_8bcb_927e,
+            0x853a_6c3f_3ecd_f11d,
+            0x3fb4_d9e9_0d91_ecb0,
+        ]),
+        pallas::Base::from_raw([
+            0x9137_5cbd_7088_a770,
+            0xbc73_46bd_4063_fc5d,
+            0x52ee_b5a0_1934_a31c,
+            0x3597_389b_0dc1_1334,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdb04_e2bd_c6a3_3802,
+            0x4896_61c3_cebe_0978,
+            0x21f9_61cc_a49e_f597,
+            0x0fc8_c0b7_b394_2242,
+        ]),
+        pallas::Base::from_raw([
+            0x8f85_9b56_948a_bed6,
+            0x72b1_52a1_bb7c_2347,
+            0xfcda_82d5_34b4_88d3,
+            0x3e4d_040b_c1bf_dcf7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x24a9_d7d9_f5f8_fb4c,
+            0xa84b_e92f_da7a_6564,
+            0x7c10_a2c0_1bac_9ff6,
+            0x343d_ecbb_2e70_9ef9,
+        ]),
+        pallas::Base::from_raw([
+            0xf538_642e_d7fd_e654,
+            0x6d30_faa6_432e_584b,
+            0x18f2_02ad_2856_2bcc,
+            0x1a0c_7166_2352_d21d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x08e8_9011_14d3_3f6a,
+            0x0d82_62ea_f48c_28a2,
+            0x89fe_087b_2750_6546,
+            0x0895_2f7a_efaa_e8e6,
+        ]),
+        pallas::Base::from_raw([
+            0xca63_280f_9555_84ad,
+            0xc7be_a103_e8a5_d522,
+            0xb795_d913_5441_e491,
+            0x3aa2_13ad_62ab_a032,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x154d_e3e2_a46d_afa1,
+            0xef1b_cb7e_af7c_9641,
+            0xc4cc_1e3f_0b9c_48b7,
+            0x227b_14a3_1a99_2a2e,
+        ]),
+        pallas::Base::from_raw([
+            0xe7e2_e290_71fb_4a61,
+            0x28f4_a7fe_9e2c_3b73,
+            0x2fc8_8036_1925_c86a,
+            0x2cde_373d_3d92_f96a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6c19_1842_a7d6_f4c8,
+            0xa31d_ba99_3039_3d70,
+            0x3514_6c26_3e06_7076,
+            0x3803_9a47_4646_486b,
+        ]),
+        pallas::Base::from_raw([
+            0x27af_d249_5982_96c5,
+            0xfcf6_b6aa_f5b2_d252,
+            0x5c22_b91e_7495_dfec,
+            0x2d57_9b70_dfa4_6507,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x50af_b111_4376_64df,
+            0x1a85_72f4_fe6f_5325,
+            0x1388_bf8b_eacf_630e,
+            0x386b_3799_e109_7613,
+        ]),
+        pallas::Base::from_raw([
+            0x1d70_2f5b_9143_e12a,
+            0xaac6_af7e_c5f3_428d,
+            0x17dc_6b11_551f_52f2,
+            0x0f7c_38b0_e835_e793,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc6e1_bd75_9bd4_3e46,
+            0xb4a0_cc52_41e1_0baf,
+            0x9b77_ed75_c46e_f6ab,
+            0x0c02_f929_5248_ff03,
+        ]),
+        pallas::Base::from_raw([
+            0xc445_5024_0956_6825,
+            0x0996_b65c_b2e1_7918,
+            0xec22_9f0f_1eb1_49a6,
+            0x0c64_8828_4462_5887,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc412_8bbd_2797_ba18,
+            0xbd47_1f04_69d3_5b08,
+            0x021a_0ae6_846c_2364,
+            0x1e0d_3b1e_f4ea_6379,
+        ]),
+        pallas::Base::from_raw([
+            0xd0bd_8eb2_1cab_9f78,
+            0x1bfb_e611_fe72_74e3,
+            0xf844_8815_10e3_d7de,
+            0x150b_00bb_a5ac_9396,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x752e_2b2b_9169_c0de,
+            0xf2e4_7feb_5a2b_1656,
+            0x61f7_7831_314b_7912,
+            0x29d5_36bf_1530_146c,
+        ]),
+        pallas::Base::from_raw([
+            0xc890_bb54_9aff_0c72,
+            0x197d_a4e0_76db_b42a,
+            0x746f_0142_3821_5206,
+            0x2512_c57e_4c5a_951e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe7e6_6a45_c1aa_686c,
+            0x8c98_b474_bd46_1267,
+            0x8ae1_d414_4cc1_4cdf,
+            0x1b9f_33fa_945c_8c67,
+        ]),
+        pallas::Base::from_raw([
+            0x9802_7495_ad6d_6b21,
+            0xccc8_ed29_cecc_1b1b,
+            0x74c8_0f51_6930_7044,
+            0x334b_d2ec_3b06_2238,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe2e3_e34a_e48a_4542,
+            0x77a7_9d9d_ee72_233a,
+            0x9290_2fcd_5d97_3f99,
+            0x0e28_df80_537b_d86b,
+        ]),
+        pallas::Base::from_raw([
+            0xb257_f5b7_a198_5b9a,
+            0xaddd_7e70_cbc2_8f19,
+            0xc35b_17df_11d3_bb77,
+            0x28f4_8a76_e85b_984c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xc1d2_64b9_7aa5_7f83,
+            0xc8a7_697d_1031_d3ba,
+            0x1e54_33c8_d6c1_c1ba,
+            0x1a28_4362_7c85_7a95,
+        ]),
+        pallas::Base::from_raw([
+            0x5c00_7005_f638_803b,
+            0x153c_6810_33d1_3436,
+            0x39ca_84fa_65ec_c4cf,
+            0x36a5_7369_ebe3_2da1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xcb3b_fab7_1ed6_88d1,
+            0x959d_75b1_c3da_4470,
+            0xff6b_cf88_212e_3d2b,
+            0x1ab4_0ee5_990b_6b99,
+        ]),
+        pallas::Base::from_raw([
+            0x18fc_cc71_d6e5_8e43,
+            0x52fa_e1cf_1c00_0d21,
+            0xfe55_97c1_42a4_a225,
+            0x0a8a_53ab_72a3_13ba,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf4ce_3a37_5416_8e4b,
+            0x61c7_546a_ec52_434a,
+            0x7d70_ac66_6893_57e8,
+            0x1c12_4475_9a7d_efc8,
+        ]),
+        pallas::Base::from_raw([
+            0x3b5f_2cb6_a96e_db5a,
+            0xef71_e886_2359_5d4f,
+            0xe5a2_7436_5afd_c9e0,
+            0x110a_f91f_2774_3efe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6895_e22a_e677_de95,
+            0x9fbb_9b3d_937b_3dc3,
+            0x0bc1_f4d9_d4d5_bd66,
+            0x27f2_b67f_1fec_e78a,
+        ]),
+        pallas::Base::from_raw([
+            0x7234_9411_50bc_efc4,
+            0xac8e_5753_a8f5_0362,
+            0xf7e3_8c41_e428_466c,
+            0x315e_645b_5d4d_cf13,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5494_bb94_e808_6993,
+            0x909a_795b_c421_efe8,
+            0x038b_cb01_6b45_f433,
+            0x2fc4_4636_cbb6_d6dd,
+        ]),
+        pallas::Base::from_raw([
+            0xa37f_6fe0_0cbd_bb87,
+            0x0aae_cb06_be08_0506,
+            0xdd80_a12f_e84d_f36f,
+            0x1dc8_84e0_7af9_e250,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xdaa4_1d05_a56d_0e0b,
+            0x6fed_5c75_13eb_443c,
+            0x7a8b_0e4c_65b1_cd50,
+            0x214f_7c8e_ed8b_b0ef,
+        ]),
+        pallas::Base::from_raw([
+            0xfe49_d9d5_1881_ea16,
+            0x2353_dd64_ed34_1337,
+            0x56b2_0c8e_d9f1_26d9,
+            0x2c22_92b4_4c2b_0de8,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa74d_964e_9b7c_04bb,
+            0x335c_bb5b_4ec0_2dec,
+            0x8a84_7bec_6994_329f,
+            0x1aa7_1c22_0de7_c5d4,
+        ]),
+        pallas::Base::from_raw([
+            0xc3b8_82a6_d6f9_f593,
+            0x9ba7_9e1b_259f_8ae6,
+            0x8ab6_b763_bd79_cc26,
+            0x2183_61af_34fa_b740,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x97b6_5e79_5bd5_3661,
+            0x560b_b24b_f4dc_8b38,
+            0x16ce_dcc1_c055_12da,
+            0x1571_6cae_b4f2_105b,
+        ]),
+        pallas::Base::from_raw([
+            0x3f1a_b4a4_ab91_7f25,
+            0x4597_f16e_4e48_2ec7,
+            0x43c4_b3e2_9f78_544b,
+            0x0abf_eec2_26bf_1c59,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9beb_a739_41b6_91d7,
+            0xcf15_e49b_9d08_eba3,
+            0xd443_2465_4f9b_bb6e,
+            0x2542_f10c_5975_b4f6,
+        ]),
+        pallas::Base::from_raw([
+            0x410d_c2a6_f3c7_221c,
+            0x9e64_ef82_f138_821d,
+            0x3607_68e2_df2a_cb50,
+            0x2af0_280c_a2a1_a946,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x40aa_4da4_2525_32cc,
+            0xa047_25f5_6850_6918,
+            0xd096_8644_fefc_e14a,
+            0x0591_ae22_96a9_a185,
+        ]),
+        pallas::Base::from_raw([
+            0xc59d_ea56_2de9_c223,
+            0x1548_1b85_8a62_94f1,
+            0x0aac_a08d_c1b6_25a2,
+            0x0f05_cf9a_21ce_dda1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd14b_b7d1_5076_72cc,
+            0x6330_7f6f_52ce_3ad5,
+            0x7ce5_1e25_ad24_3072,
+            0x07dc_2bac_dd7c_6ea0,
+        ]),
+        pallas::Base::from_raw([
+            0x5836_c3d5_7c40_ffae,
+            0x46f5_819e_44b7_ae09,
+            0xb796_fb55_e09c_9785,
+            0x2d95_737b_55d5_5dd1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x86dd_a9bf_0115_82af,
+            0x40d9_e41e_3690_6b44,
+            0x5787_20aa_8983_bfa2,
+            0x2f1a_1706_18f1_8afb,
+        ]),
+        pallas::Base::from_raw([
+            0x09f8_9309_75e4_a8c6,
+            0xef85_967d_be1c_9f79,
+            0x4a38_18ba_32b7_bcd4,
+            0x0a8f_1295_63b5_5cb7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x64e5_850f_a84e_2a38,
+            0x67a1_f9d2_a1cb_2892,
+            0x34b6_e8a9_6a3d_1adc,
+            0x2e6f_30e3_86d6_a0c0,
+        ]),
+        pallas::Base::from_raw([
+            0xb9d1_3f17_8e65_ff6a,
+            0x4ffb_0b20_e25a_7848,
+            0x6c2f_dcd2_e668_e2d3,
+            0x1e93_9c54_a6fa_239c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3316_8467_79ce_e7f6,
+            0xfb6e_d07b_5560_c360,
+            0x4a8f_2f59_55ff_6357,
+            0x28fb_77fc_9375_6d8d,
+        ]),
+        pallas::Base::from_raw([
+            0xe3e2_1b78_b2cf_5612,
+            0xc8d4_70e2_cb22_7688,
+            0x731b_0c6e_e1d4_f24b,
+            0x30cd_02ff_4619_55c2,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8e9c_4a02_e5ea_9126,
+            0x6fb9_f18e_4e5e_96dd,
+            0x494c_3274_6849_1131,
+            0x18b5_fe24_35aa_0912,
+        ]),
+        pallas::Base::from_raw([
+            0x4956_0a92_8dfc_8d75,
+            0xc948_7b69_3b11_267e,
+            0x315e_da1d_1b42_789f,
+            0x35d4_3503_9f73_bf9a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0010_6821_9f96_2f62,
+            0x3931_2d4d_6b30_e2e7,
+            0x94be_b29a_ad36_c2c6,
+            0x36f4_5328_c007_73d2,
+        ]),
+        pallas::Base::from_raw([
+            0xe4f3_0b41_1e5d_d8b5,
+            0x65e5_1f6f_4823_cbd8,
+            0xf47f_3fd3_d0b6_f299,
+            0x1427_8ff8_e951_56be,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe14f_d0ad_d91e_2015,
+            0xa2bc_ccd9_60a9_fdab,
+            0x715f_aab5_f71c_b572,
+            0x1960_ed3b_e23f_8c8c,
+        ]),
+        pallas::Base::from_raw([
+            0x6d4d_e792_32d9_75b0,
+            0xa0e0_d86f_f79c_4490,
+            0x947e_ec8e_5f3c_08d9,
+            0x162a_f9d0_f176_eeb6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x77be_2a89_644f_4e4f,
+            0xdac2_fd2f_f979_19f8,
+            0x482d_415e_0aa4_336e,
+            0x12b4_8f67_c25d_ddea,
+        ]),
+        pallas::Base::from_raw([
+            0x1447_b356_5495_fdc2,
+            0xfa86_152d_2046_a6bd,
+            0x0e48_3cee_96b6_3430,
+            0x310a_f969_9f04_356b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x49d9_568f_4b49_90b2,
+            0xff1d_52e9_6c43_0eed,
+            0x9dab_c67e_0ab6_7fbc,
+            0x15b8_acf0_dafc_6bd0,
+        ]),
+        pallas::Base::from_raw([
+            0x04db_2abc_c8af_ebe1,
+            0x858a_4302_b8ed_aede,
+            0x857e_f9df_9683_371a,
+            0x0ed5_6792_c5bc_56a9,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8fc8_c4bb_97be_29b8,
+            0x723f_ec3a_c6fd_9388,
+            0xcc18_5b44_14ce_3800,
+            0x1903_31a9_ed7c_af8c,
+        ]),
+        pallas::Base::from_raw([
+            0x6e48_8eb0_820c_1768,
+            0x7fcb_5d2c_98f1_ca49,
+            0x32c6_8966_238e_4125,
+            0x06ca_d05e_b165_eacc,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x05d6_73c0_9942_4c38,
+            0x9b1c_e944_65d8_d36c,
+            0x4192_c0f4_f365_0b99,
+            0x3383_b385_084d_b871,
+        ]),
+        pallas::Base::from_raw([
+            0x41a3_b162_abb4_42dc,
+            0x017f_86b0_2583_46ed,
+            0x458e_9783_e3ed_a2b5,
+            0x083e_e1cb_29d3_6b81,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe476_9543_7977_767d,
+            0xed9c_7b2a_f66c_175f,
+            0xb833_a588_5741_cd5e,
+            0x363d_b7fb_cd58_d72c,
+        ]),
+        pallas::Base::from_raw([
+            0xf313_93cb_d9f8_02e3,
+            0xe6eb_366c_2b43_078b,
+            0xbca3_b4dc_3212_594e,
+            0x08b1_1978_df11_1b34,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x77ce_a705_9e6f_006c,
+            0xa35b_db7d_dc08_66ab,
+            0x715a_f92e_56f1_97ea,
+            0x3664_9345_05c4_d86e,
+        ]),
+        pallas::Base::from_raw([
+            0x9c53_e468_a11d_cffc,
+            0x1c3e_0f67_68dd_602c,
+            0x1ba5_77b8_d65c_4577,
+            0x1d42_09b8_67f6_9ae6,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x260a_5380_a10f_5880,
+            0x7a1b_b8cc_b65a_04e5,
+            0x27a8_f9ff_d28b_2308,
+            0x3a32_fb37_acbe_f3c3,
+        ]),
+        pallas::Base::from_raw([
+            0x914a_9b46_a374_9954,
+            0xfed9_b9fc_0c61_8135,
+            0xfe45_3ec9_a172_f21e,
+            0x1c9f_90fd_5778_ec0f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9910_a461_c209_3108,
+            0x2c2e_d023_b39e_9004,
+            0x2c03_9b33_a27f_913b,
+            0x0a0e_6954_9577_4dec,
+        ]),
+        pallas::Base::from_raw([
+            0xe6b9_b73d_4549_90d8,
+            0x47ba_dd67_2352_1eed,
+            0x40be_e046_81a5_cc00,
+            0x36b5_ea1f_1eff_932d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xd2e0_0398_4661_f7a3,
+            0xca79_c17c_09e6_51e1,
+            0x7836_47d3_410b_a538,
+            0x217c_55a4_8acb_9a5d,
+        ]),
+        pallas::Base::from_raw([
+            0x1bd2_0b6c_04fd_e263,
+            0x02c7_b694_dc6d_a359,
+            0x3a71_9cfc_8a1b_9a1c,
+            0x3fff_5323_5b48_9bbe,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xe25b_d2f6_66fc_16d2,
+            0xf999_b1a1_db9c_75c2,
+            0xd0f6_f6cf_794f_162d,
+            0x3366_32de_5352_5f98,
+        ]),
+        pallas::Base::from_raw([
+            0x1c68_3a79_9230_e098,
+            0x807c_7b25_a72c_04ed,
+            0x534e_0c05_0c08_e762,
+            0x2bc6_1d1f_88b2_bab0,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6ee1_ad02_6d11_3806,
+            0xc402_cf86_0c69_c2f8,
+            0x1b43_0a98_7ad4_7948,
+            0x3123_cab0_04e7_4073,
+        ]),
+        pallas::Base::from_raw([
+            0x28ac_c01e_af74_1193,
+            0x3d35_2c06_3e65_b2b5,
+            0x5da6_8188_3d2a_52ab,
+            0x38f2_4ab3_5569_517a,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6baf_341c_2702_9a80,
+            0x31d7_cf3d_2326_22c1,
+            0xb56b_e361_456f_7da3,
+            0x22d9_07c2_5b47_0494,
+        ]),
+        pallas::Base::from_raw([
+            0x8110_08ea_9321_b2e1,
+            0x9e15_c19c_8b04_0ec1,
+            0xc7b4_860c_a4fd_0f1a,
+            0x3fb3_5b5c_9ff2_ce92,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3eb4_cbe9_57c3_215d,
+            0xe3bb_1c30_aa5a_2018,
+            0x6829_f364_04df_ce6a,
+            0x1e4c_9bb8_5e77_3502,
+        ]),
+        pallas::Base::from_raw([
+            0xf927_5406_c35a_b692,
+            0xedb3_cacf_43f8_d2eb,
+            0x5b04_6f41_e82f_fa8d,
+            0x16c2_b490_1be1_772e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x91f2_5bb0_0df3_b325,
+            0x9fa2_042e_bf14_310e,
+            0x440d_8c06_8bb1_5a05,
+            0x000a_e05a_1117_51b6,
+        ]),
+        pallas::Base::from_raw([
+            0x71a9_f252_e8dc_96fc,
+            0x93e9_0e94_a948_47fc,
+            0x35bd_756d_82e4_6522,
+            0x0dd4_182d_0922_90ad,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xac7d_898a_152e_395a,
+            0x893e_8851_1ab3_33da,
+            0xf069_82b1_791e_1812,
+            0x1fb6_f3c4_cf65_d002,
+        ]),
+        pallas::Base::from_raw([
+            0x65c5_e104_bca2_bc38,
+            0xcd1b_883c_113f_a262,
+            0x96bc_af49_58ae_d45e,
+            0x3c4c_e7d2_6eb9_a372,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x867f_b40f_ed90_02ea,
+            0x40a5_041b_7cba_a776,
+            0xc206_37a4_c7c4_ac98,
+            0x2570_9da2_0e46_8fbe,
+        ]),
+        pallas::Base::from_raw([
+            0x651a_689f_4ec0_fd53,
+            0x4a1e_3008_41ea_e098,
+            0x9e4d_ec05_ca83_49d2,
+            0x2fcb_ed31_57c6_0795,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xa5b5_1c60_e817_6fd1,
+            0x2e8f_21e3_bfb9_750f,
+            0xf45c_e53c_8b74_a941,
+            0x04fd_1a36_e04a_7b99,
+        ]),
+        pallas::Base::from_raw([
+            0x5ca7_72c9_9b5a_d4f9,
+            0xea3c_aa3d_8393_caee,
+            0x3508_ad20_2818_0ba6,
+            0x1b7d_cd69_c52c_070f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xf076_4e26_b3f1_d20e,
+            0x18c7_142e_8625_e9c8,
+            0x51f7_7d4f_7dde_dce2,
+            0x2373_bf50_232b_3f22,
+        ]),
+        pallas::Base::from_raw([
+            0x47b8_d63d_328c_c660,
+            0xdafe_f5c4_0e05_ae5d,
+            0x98b5_a965_47c9_1289,
+            0x01ad_0491_0905_0a6c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1144_a189_947f_94df,
+            0xe428_df16_cd10_22ba,
+            0x7565_d9ea_3476_c4a8,
+            0x2070_a6e3_1265_c3dc,
+        ]),
+        pallas::Base::from_raw([
+            0x91df_7f7d_dec9_e146,
+            0x9135_871c_349e_dbe7,
+            0x7edb_dcb4_d0e8_bb0a,
+            0x0c90_c909_0575_8d15,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x497e_9d18_b31f_1ea6,
+            0x087a_5e39_1bec_b0e3,
+            0xe8de_4d9c_6a44_8c64,
+            0x141d_4aad_df85_22b8,
+        ]),
+        pallas::Base::from_raw([
+            0xff15_6277_b7ae_3c64,
+            0x3455_b096_0f5b_a73c,
+            0x2051_cfe3_04f9_e861,
+            0x19f8_6f8b_52e2_d6d7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x9eb2_3cac_ee0c_46a4,
+            0xe61a_c293_cba7_7cd6,
+            0xc50e_6571_9c07_30af,
+            0x2225_2c4f_0dc9_d926,
+        ]),
+        pallas::Base::from_raw([
+            0x99ee_8f10_2d20_4335,
+            0x09d9_c154_3bf6_02d3,
+            0x61d7_e3d0_9e64_c519,
+            0x1b3f_b8bc_c227_b8f3,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x6b9e_a4ea_df65_cb3f,
+            0xc1fe_f822_6717_eb27,
+            0xfb69_b82e_a0f3_4f2c,
+            0x2594_f3af_922c_6c4c,
+        ]),
+        pallas::Base::from_raw([
+            0xc431_a2b7_6a21_a9ae,
+            0xba4f_fa4e_a749_4caa,
+            0x354d_e308_ab36_c4f9,
+            0x244b_96c7_5d78_711b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4768_edc3_6542_5192,
+            0x6635_8e8a_a347_fefe,
+            0xb5f4_dfd5_e5b9_73ce,
+            0x1a59_51c5_25bf_f454,
+        ]),
+        pallas::Base::from_raw([
+            0x7e01_049a_8df5_fd8a,
+            0x6b01_2890_41d2_19dd,
+            0x3844_3e89_e500_e012,
+            0x2be0_f234_4af5_6d77,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xae1e_74fc_1860_213a,
+            0x3fe4_3c3a_2886_f22c,
+            0xdefa_9b1e_edbe_c1e1,
+            0x31bc_5ab6_4e9f_5faf,
+        ]),
+        pallas::Base::from_raw([
+            0xbd19_b196_572a_8513,
+            0x4272_e09b_f426_f2c9,
+            0x9925_f875_ae11_ddf7,
+            0x1fb9_5b9e_53fb_0d63,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xb236_a763_08e8_7326,
+            0x8974_b02e_45e8_dca3,
+            0x0575_b904_ff33_10d8,
+            0x0347_ed41_4f04_efca,
+        ]),
+        pallas::Base::from_raw([
+            0x18eb_fd89_32b5_0ad8,
+            0x82a2_5574_4ed0_515d,
+            0xb135_d6bf_0377_152a,
+            0x3419_a1db_bc9a_9880,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x8c84_0714_8c42_e400,
+            0xee8a_bd72_6199_8367,
+            0xfe4e_c3e9_5c51_4cd9,
+            0x2b7d_7f9a_0bc8_cf07,
+        ]),
+        pallas::Base::from_raw([
+            0xe58f_7f61_3068_dfd4,
+            0x31c9_d482_7192_7dd4,
+            0xa09f_1e90_db5e_fe74,
+            0x2e12_f957_7e54_b546,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3d25_c1f3_eb56_14c1,
+            0x78b0_2ff0_db91_5adc,
+            0x52e4_595a_4745_1abb,
+            0x20c0_812b_5d28_2662,
+        ]),
+        pallas::Base::from_raw([
+            0xc166_e032_a3ff_9774,
+            0xbf21_613f_887f_5cc1,
+            0x6666_23cc_e45a_acb3,
+            0x1f8a_670a_47ae_5415,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0e32_ea98_b294_1bb3,
+            0x0040_f5f6_d5d0_174b,
+            0x137c_87e7_3271_65a4,
+            0x0614_8c65_f99b_da0a,
+        ]),
+        pallas::Base::from_raw([
+            0x6348_5e06_f44d_7edc,
+            0x3b2b_37a4_b180_07ab,
+            0xfe96_302e_4023_3b6d,
+            0x0c86_9dda_efca_80d1,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x74e3_303e_17d4_1cf1,
+            0xb9b5_5056_8945_d1c1,
+            0xf5ca_f3d6_bab0_c8ee,
+            0x20aa_c0ce_dcdc_1816,
+        ]),
+        pallas::Base::from_raw([
+            0x465b_2a4b_f80c_a876,
+            0x7f65_deed_eb30_4907,
+            0xcf39_c880_9f38_77e2,
+            0x0286_a346_71e5_743b,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfb50_a168_127f_b04b,
+            0x40f8_01e3_04f5_df03,
+            0xb4e1_c034_c959_50eb,
+            0x1126_9317_caf7_5d07,
+        ]),
+        pallas::Base::from_raw([
+            0x42c5_97bd_71be_93ad,
+            0xe220_1b27_f87d_2e4b,
+            0x11f2_a2f5_a81c_6934,
+            0x25a7_0d53_1d5b_addf,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x86c3_b612_1d8d_3fa4,
+            0x4914_c783_0ca4_f15f,
+            0x04ea_4fe6_f986_a7ec,
+            0x2026_f468_4a50_7b0c,
+        ]),
+        pallas::Base::from_raw([
+            0x435e_50f3_7974_66eb,
+            0x8b5c_73b6_b70e_0033,
+            0x7ed9_4ab6_144a_18bf,
+            0x2b10_91f0_ffa9_d775,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x7335_a5d6_15f2_85a5,
+            0x65e3_ce55_379a_4653,
+            0xc59c_ed4a_cc76_2af0,
+            0x0429_7a2c_6046_7f76,
+        ]),
+        pallas::Base::from_raw([
+            0x38f3_ec3f_0286_6257,
+            0x1e13_f010_a49e_a5c0,
+            0xdaf1_e8bb_06ca_2eec,
+            0x329d_3ddb_9b5a_922d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x400a_e7f0_113b_1b88,
+            0x6505_dd5a_729f_0ed9,
+            0xf46d_81a6_8261_b4c8,
+            0x2450_8490_e887_3820,
+        ]),
+        pallas::Base::from_raw([
+            0x35b8_1e5b_7fea_8621,
+            0x9ab1_93bd_5e06_6a86,
+            0x8692_12f1_d266_8fc3,
+            0x15ea_d070_2b54_0d1e,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x958c_8b6a_f42e_66da,
+            0xdfcd_951f_1c14_d6f5,
+            0xb5bc_07dc_6f54_f30a,
+            0x1d82_d649_7016_56da,
+        ]),
+        pallas::Base::from_raw([
+            0x05be_a7e3_a36e_01f9,
+            0x77ab_d96c_4618_47be,
+            0xa7b5_16d3_9767_5ff3,
+            0x1785_5e76_cc3c_e4be,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xfd0a_310a_b4fb_5f5a,
+            0xd05f_e1c2_4618_bb6f,
+            0x5741_e067_013d_e384,
+            0x2373_0ed6_879c_4bf1,
+        ]),
+        pallas::Base::from_raw([
+            0x7e9f_f7bc_b94c_5d16,
+            0xd75e_56b3_9f76_fd96,
+            0x5562_35b1_256d_ea0f,
+            0x3ecd_11be_4f08_056d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x3d04_4438_d2b7_8ca6,
+            0xa679_db14_51f3_dcb0,
+            0x922b_166c_a2b2_bb15,
+            0x1107_3835_6e3d_778a,
+        ]),
+        pallas::Base::from_raw([
+            0x95ce_a45d_d63e_b7e2,
+            0x2af0_c617_e626_d526,
+            0x9d55_3537_9131_d95d,
+            0x0d84_161a_6b99_3a77,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x4df8_74c2_f161_5191,
+            0xd297_0d9a_0843_1ff4,
+            0x66c1_4b9b_525d_f889,
+            0x3b83_8a77_8a22_ed9a,
+        ]),
+        pallas::Base::from_raw([
+            0x6786_9621_06cb_caae,
+            0x83f2_0b98_433f_f62b,
+            0xff05_c2a9_4d11_970e,
+            0x32db_3f0c_596c_894c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x18d2_6b17_c5b7_95b4,
+            0x5097_014c_31df_3d6b,
+            0xc1bc_54b7_a9a3_6f47,
+            0x003f_0149_4252_2ca4,
+        ]),
+        pallas::Base::from_raw([
+            0xe704_1773_6871_2b5d,
+            0x012a_3a17_1425_6ed0,
+            0x750f_6ae1_dac8_4dba,
+            0x39fa_e6ac_0da9_dcec,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0022_fc4f_c196_3017,
+            0x6e6d_a891_b75a_a6f2,
+            0x8e65_aa60_d9c7_8441,
+            0x2ff0_f181_181a_9fa8,
+        ]),
+        pallas::Base::from_raw([
+            0x08ea_646a_eaa0_74f3,
+            0xe893_09ca_01bb_be00,
+            0x0021_c936_55f7_2464,
+            0x2e6f_5fdc_b38c_af4f,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x99bf_57d6_5784_c501,
+            0x7017_bd72_7c8e_b52c,
+            0xe919_d31c_2d32_8f5d,
+            0x0bcd_43af_aaf5_2fb7,
+        ]),
+        pallas::Base::from_raw([
+            0x60d0_5ba3_c3d4_e2a8,
+            0x03a1_39f0_df52_02d2,
+            0xe5c8_8a6e_21e1_9481,
+            0x384a_d0a4_1d52_9ba5,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xac1f_1153_693b_c3fb,
+            0x95cb_3d54_26f8_0864,
+            0xacc9_531f_91c2_17a7,
+            0x37a0_65ab_2b62_bad6,
+        ]),
+        pallas::Base::from_raw([
+            0x2556_2833_d728_cc98,
+            0x157a_5fe3_6bdc_7a86,
+            0x45a9_fabe_1703_6e96,
+            0x15a6_2e9a_3e84_6efb,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x84eb_0966_60b5_7d7e,
+            0xbcb3_c183_689f_69b6,
+            0xc179_6b0c_1aa2_7a8d,
+            0x1f47_12b0_6b77_73e3,
+        ]),
+        pallas::Base::from_raw([
+            0x2e00_a10a_f3c4_6f66,
+            0xd4d2_d9a4_4958_e31e,
+            0xaae5_c9f9_9f8c_6e6a,
+            0x0ffb_5c9c_6c4a_c3aa,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0xebdf_427c_e6aa_6032,
+            0x2284_d8b0_888f_cc3a,
+            0x3f9c_8166_83f2_fe8d,
+            0x3be0_c3d2_1862_d2b0,
+        ]),
+        pallas::Base::from_raw([
+            0xd068_4fe3_7825_0382,
+            0x29a3_85cf_563b_538f,
+            0xb401_2ac9_07b0_9161,
+            0x3fe4_fabe_5f26_0616,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x0bc2_86a7_8d4d_c29a,
+            0xa808_bac0_57cb_7c72,
+            0x1e71_e213_e7ad_d6cd,
+            0x3d6b_987c_9596_0b11,
+        ]),
+        pallas::Base::from_raw([
+            0xe4ac_cdd3_7e1d_475a,
+            0xe6b1_afb2_8e9a_e97c,
+            0xb43c_7942_dc38_771b,
+            0x0a9f_622c_5b76_581d,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x346d_1c37_d315_d20d,
+            0x2f90_33b6_9759_2232,
+            0x19fa_9995_c446_fd03,
+            0x0e97_a5fa_b367_fc42,
+        ]),
+        pallas::Base::from_raw([
+            0xa4f9_7858_7b47_3a80,
+            0x5c3a_72cf_5848_9bcc,
+            0x812b_72e4_2421_a299,
+            0x2b11_99ab_416d_bef7,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x5e07_f1b3_b73a_4e48,
+            0x19b0_925f_6f8f_6b83,
+            0xcf98_c5cc_7f9a_9cb2,
+            0x0f1a_0d41_9b39_1617,
+        ]),
+        pallas::Base::from_raw([
+            0x632f_c83e_f090_fdec,
+            0x2f3c_0e5b_a18e_d660,
+            0xce90_d880_46e7_cabf,
+            0x0cad_fd0b_a42e_ea59,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x238c_cf74_76ab_5023,
+            0x074a_888a_fb1b_0035,
+            0x3763_56e8_efeb_ecee,
+            0x203e_1e97_4451_db54,
+        ]),
+        pallas::Base::from_raw([
+            0x205f_a8cc_d857_d1b7,
+            0xa271_379b_274f_7284,
+            0x3d47_8f66_532f_d8fc,
+            0x1366_88be_56b9_e771,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2b08_b53d_bb1c_746f,
+            0xded6_6332_130e_59f9,
+            0xec3e_7d70_890f_11b3,
+            0x070b_8394_0557_a571,
+        ]),
+        pallas::Base::from_raw([
+            0x9320_2c85_006c_febc,
+            0x679f_3693_3fc6_5b4d,
+            0xea12_f030_0d2a_06e1,
+            0x2e11_4723_802f_792c,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x356f_e85c_2e67_e247,
+            0x1d0d_775e_a300_5f6d,
+            0x80f8_64c6_bbd0_c16c,
+            0x317a_eda0_114e_e9f0,
+        ]),
+        pallas::Base::from_raw([
+            0xcda6_4589_4bfc_0455,
+            0xf9fc_3a76_ac88_3c1f,
+            0x61f6_a208_798d_28ec,
+            0x2c02_1be9_a8c2_9b49,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x717a_a137_f5c5_be89,
+            0x9028_5359_3102_985b,
+            0x4ffc_0b33_2c5a_0750,
+            0x2494_2c9c_ed84_3a53,
+        ]),
+        pallas::Base::from_raw([
+            0xfbdb_198d_0cae_4fa7,
+            0x301e_d666_339f_ae29,
+            0xe8db_271b_351f_54c1,
+            0x1ec6_b81d_e40c_48da,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x1fad_ffb9_7149_61e3,
+            0xa176_3927_04e4_6feb,
+            0x335d_89f8_2091_038d,
+            0x0556_0da5_b68a_034a,
+        ]),
+        pallas::Base::from_raw([
+            0x7cbc_a061_15ef_3129,
+            0x8e19_e08d_db9c_008d,
+            0xa745_abb6_b7a1_36fb,
+            0x2ccc_b707_6bde_5545,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x66ba_c59c_6f88_1b40,
+            0xae9b_1f86_51c5_f96c,
+            0x688e_7e00_9bdc_52e1,
+            0x27e4_380e_842e_d733,
+        ]),
+        pallas::Base::from_raw([
+            0x1be8_47f3_618d_78db,
+            0xcbf1_c63d_6c8b_f57f,
+            0x62cb_3b48_a39f_91dc,
+            0x0ced_7d2b_0b84_8552,
+        ]),
+    ),
+    (
+        pallas::Base::from_raw([
+            0x2bc3_ed47_d3b1_9dae,
+            0x7929_235c_2bdf_6880,
+            0x4ec8_7166_4d23_deae,
+            0x026a_bf29_d792_9647,
+        ]),
+        pallas::Base::from_raw([
+            0x8951_204b_5262_6b96,
+            0x15ba_29c7_c672_fad2,
+            0x0d49_9ba7_a480_134c,
+            0x397c_dfb1_4d54_65ce,
+        ]),
+    ),
+];

+ 48 - 0
examples/halo2/src/spec.rs

@@ -0,0 +1,48 @@
+use group::Curve;
+use halo2::{
+    arithmetic::{CurveAffine, FieldExt},
+    pasta::pallas,
+};
+use subtle::CtOption;
+
+use crate::circuit::gadget::utilities::lookup_range_check::lebs2ip;
+use crate::constants::util::gen_const_array;
+
+/// Coordinate extractor for Pallas.
+///
+/// Defined in [Zcash Protocol Spec § 5.4.9.7: Coordinate Extractor for Pallas][concreteextractorpallas].
+///
+/// [concreteextractorpallas]: https://zips.z.cash/protocol/nu5.pdf#concreteextractorpallas
+pub(crate) fn extract_p(point: &pallas::Point) -> pallas::Base {
+    point
+        .to_affine()
+        .coordinates()
+        .map(|c| *c.x())
+        .unwrap_or_else(pallas::Base::zero)
+}
+
+/// Coordinate extractor for Pallas.
+///
+/// Defined in [Zcash Protocol Spec § 5.4.9.7: Coordinate Extractor for Pallas][concreteextractorpallas].
+///
+/// [concreteextractorpallas]: https://zips.z.cash/protocol/nu5.pdf#concreteextractorpallas
+pub(crate) fn extract_p_bottom(point: CtOption<pallas::Point>) -> CtOption<pallas::Base> {
+    point.map(|p| extract_p(&p))
+}
+
+/// The field element representation of a u64 integer represented by
+/// an L-bit little-endian bitstring.
+pub fn lebs2ip_field<F: FieldExt, const L: usize>(bits: &[bool; L]) -> F {
+    F::from_u64(lebs2ip::<L>(bits))
+}
+
+/// The sequence of bits representing a u64 in little-endian order.
+///
+/// # Panics
+///
+/// Panics if the expected length of the sequence `NUM_BITS` exceeds
+/// 64.
+pub fn i2lebsp<const NUM_BITS: usize>(int: u64) -> [bool; NUM_BITS] {
+    assert!(NUM_BITS <= 64);
+    gen_const_array(|mask: usize| (int & (1 << mask)) != 0)
+}