Agent I-3: criterion-6 round-trip and golden lock on the real Engraver
Criterion 6 (the Chapter 7 layout round-trip) and the render goldens previously
exercised only the verbatim StubSolver, so a regression in the real Engraver's
geometry could land unseen. I-3 drives both through the Engraver.
- round_trip_with<S: ConstraintSolver> factors the solver-agnostic provenance
contract out of round_trip (now a one-line stub wrapper): coverage, the
complete Provenance surviving constrained -> resolved -> render, the source
surjection, and no duplicate stable ids hold for *any* conformant solver. The
Stub tier's verbatim-geometry clause is gated behind solver.tier() == Stub;
every other tier re-spaces. The status gate accepts any renderable status
(Solved / SolvedWithWarnings / PartialBudgetExhausted), not exactly Solved, so
the helper matches its "arbitrary conformant solver" contract while still
rejecting the diagnostic-only statuses that carry no authoritative layout.
- criterion_six_round_trips_through_the_engravers_respacing (epiphany-engrave)
runs the full graph -> logical -> constrained -> *engraved* -> render round
trip over the criterion-6 hand-off fixtures -- ten_measure_single_staff (the
measured fixture) and valid_score_rich (cross-cutting tuplet/tie/spanner),
plus valid_score for breadth -- and asserts the whole provenance contract
survives the Engraver's re-spacing. A non-vacuity check confirms the Engraver
genuinely moved geometry, so provenance is preserved *through* a real geometry
change -- the statement the verbatim stub can never make. This adds an
epiphany-testkit dev-dep (no cycle: testkit does not depend on this crate).
- The render-svg engraver acceptance test is upgraded from invariant-only to
byte-locked: new .engrave.snapshot.txt / .engrave.svg goldens for both
fixtures capture the Engraver's re-spaced output (e.g. ten_measure view_box
width 82.26 vs the stub's 88.88, same glyph/stroke/class counts), so an
Engraver geometry regression is caught at the byte level. A companion test
asserts the engrave goldens genuinely differ from the stub goldens, catching
the degeneracy where the Engraver echoes the stub (which would otherwise pass
both golden checks independently).
Also corrects the epiphany-engrave package description, which still claimed it
reports SolverTier::Stub until it earns Minimal (it earned Minimal in I-2).
Full gate green: build, fmt, clippy, 580 tests, conformance scale 1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1c147534bf
commit
af297881e2
|
|
@ -99,6 +99,7 @@ version = "0.0.0"
|
|||
dependencies = [
|
||||
"epiphany-core",
|
||||
"epiphany-layout-ir",
|
||||
"epiphany-testkit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ edition.workspace = true
|
|||
rust-version.workspace = true
|
||||
authors.workspace = true
|
||||
repository.workspace = true
|
||||
description = "Agent I's Epiphany engraving solver (spec Chapter 9): turns a ConstrainedLayoutIR into a ResolvedLayoutIR with real geometry. Phase-2 scaffold — a deterministic horizontal-spacing pass (the first axis of the planned two-pass spring layout) that honestly reports SolverTier::Stub until it evaluates the declared hard constraints and earns the Minimal tier."
|
||||
description = "Agent I's Epiphany engraving solver (spec Chapter 9): turns a ConstrainedLayoutIR into a ResolvedLayoutIR with real geometry. A deterministic horizontal-spacing pass (the first axis of the planned two-pass spring layout) that evaluates the declared hard constraints and reports SolverTier::Minimal. The vertical spring pass and casting-off are deferred to a later tier."
|
||||
|
||||
[dependencies]
|
||||
# The solver consumes/produces the Chapter 7 IR stages and implements the
|
||||
|
|
@ -17,3 +17,7 @@ epiphany-layout-ir.workspace = true
|
|||
# Tests drive the solver from real score fixtures via epiphany-core's generators
|
||||
# (and a couple of leaf id/time types).
|
||||
epiphany-core.workspace = true
|
||||
# The criterion-6 round-trip test mirrors the hand-off gate's fixtures, including
|
||||
# epiphany-testkit's `ten_measure_single_staff` (testkit does not depend on this
|
||||
# crate, so this dev-dep introduces no cycle).
|
||||
epiphany-testkit.workspace = true
|
||||
|
|
|
|||
|
|
@ -919,4 +919,62 @@ mod tests {
|
|||
);
|
||||
assert_eq!(full.layout, inc.layout);
|
||||
}
|
||||
|
||||
/// Acceptance criterion 6 (the Chapter 7 layout round-trip) against the **real**
|
||||
/// Engraver, not the verbatim stub. `round_trip_with` drives graph -> logical ->
|
||||
/// constrained -> *engraved* -> render and asserts the whole provenance contract
|
||||
/// internally: every laid-out object is covered, the complete `Provenance`
|
||||
/// (source, synthesis, dependencies, stable id) survives the engrave pass and the
|
||||
/// render unchanged, the recovered source set is exactly the set laid out, and no
|
||||
/// two objects share a stable id. The point the stub can never make: provenance is
|
||||
/// preserved *through a real geometry change* — the Engraver re-spaces every glyph
|
||||
/// and the strokes that track them, yet not one back-reference is lost.
|
||||
#[test]
|
||||
fn criterion_six_round_trips_through_the_engravers_respacing() {
|
||||
use epiphany_core::generators::valid_score;
|
||||
use epiphany_layout_ir::{round_trip_with, SolveStatus};
|
||||
use epiphany_testkit::fixtures::ten_measure_single_staff;
|
||||
|
||||
for seed in 0..32u64 {
|
||||
// Mirror the criterion-6 hand-off gate's own fixtures — the 10-measure
|
||||
// single staff (measures + barlines) and the rich score (cross-cutting
|
||||
// tuplet/tie/spanner/marker) — and keep `valid_score` for added breadth.
|
||||
let scores = [
|
||||
ten_measure_single_staff(seed),
|
||||
valid_score(seed),
|
||||
valid_score_rich(seed),
|
||||
];
|
||||
for score in scores {
|
||||
// round_trip_with asserts the full provenance contract; a Solved
|
||||
// status also confirms the Engraver satisfied the pipeline's hard
|
||||
// constraints (the stub pipeline declares none, so vacuously).
|
||||
let report = round_trip_with(&score, &Engraver);
|
||||
assert_eq!(report.status, SolveStatus::Solved);
|
||||
}
|
||||
}
|
||||
|
||||
// Non-vacuity: the contract above held *through* a genuine re-spacing — the
|
||||
// Engraver's geometry differs from the stub's verbatim columns, so provenance
|
||||
// survived a real geometry change rather than a pass-through.
|
||||
let constrained = to_constrained(&to_logical(&valid_score_rich(11)));
|
||||
assert!(constrained.glyphs.len() >= 2);
|
||||
let engraved = Engraver
|
||||
.solve(&constrained, &SolverConfig::default())
|
||||
.layout;
|
||||
let stub = StubSolver
|
||||
.solve(&constrained, &SolverConfig::default())
|
||||
.layout;
|
||||
assert_ne!(
|
||||
engraved
|
||||
.glyphs
|
||||
.iter()
|
||||
.map(|g| g.position.x.0)
|
||||
.collect::<Vec<_>>(),
|
||||
stub.glyphs
|
||||
.iter()
|
||||
.map(|g| g.position.x.0)
|
||||
.collect::<Vec<_>>(),
|
||||
"the Engraver must re-space, not echo the stub's verbatim columns"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ pub use render::{
|
|||
pub use resolved::{
|
||||
ResolvedGlyph, ResolvedLayoutIR, ResolvedMeasure, ResolvedPage, ResolvedStaff, ResolvedSystem,
|
||||
};
|
||||
pub use roundtrip::{laid_out_object_ids, round_trip, RoundTripReport};
|
||||
pub use roundtrip::{laid_out_object_ids, round_trip, round_trip_with, RoundTripReport};
|
||||
pub use solver::{
|
||||
ConstraintId, ConstraintSolver, ExtensionMetric, ExtensionMetricId, ExtensionWarningId,
|
||||
InvalidationScope, InvalidationSet, NormalizedMetric, QualityMetricKind, QualityMetricVector,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ use crate::constrained::to_constrained;
|
|||
use crate::logical::{cross_cutting_objects, identified_pitch_ids, to_logical, LayoutObject};
|
||||
use crate::provenance::{LayoutObjectId, Provenance};
|
||||
use crate::render::to_render;
|
||||
use crate::solver::{ConstraintSolver, SolveStatus, SolverConfig, StubSolver};
|
||||
use crate::solver::{ConstraintSolver, SolveStatus, SolverConfig, SolverTier, StubSolver};
|
||||
|
||||
/// The set of score-graph objects the pipeline lays out — the [`TypedObjectId`]s
|
||||
/// the round-trip expects to recover from the RenderIR. Kept in lockstep with
|
||||
|
|
@ -111,7 +111,22 @@ fn provenance_map<'a>(
|
|||
/// laid out — a surjection onto graph identity (every laid-out source is
|
||||
/// recovered and nothing spurious appears; one source may back several layout
|
||||
/// objects, which the distinct stable ids account for).
|
||||
///
|
||||
/// Runs against the [`StubSolver`]; [`round_trip_with`] runs the same contract
|
||||
/// against any conformant solver (a real solver re-spaces, so the verbatim-geometry
|
||||
/// clause is checked only for the [`SolverTier::Stub`] tier).
|
||||
pub fn round_trip(score: &Score) -> RoundTripReport {
|
||||
round_trip_with(score, &StubSolver)
|
||||
}
|
||||
|
||||
/// Criterion 6 for an arbitrary conformant `solver`: every provenance-preservation
|
||||
/// guarantee of [`round_trip`] *except* the verbatim-geometry clause, which is the
|
||||
/// [`SolverTier::Stub`] tier's specific promise. A real solver re-spaces the glyphs,
|
||||
/// but the [`Provenance`] back-references — `source`, `synthesis`, `dependencies`,
|
||||
/// and `stable_id` — must survive that re-spacing unchanged, and the recovered
|
||||
/// source set must still be exactly the set laid out. This is the strictly stronger
|
||||
/// statement: a solver may move geometry, never lose a provenance trace.
|
||||
pub fn round_trip_with<S: ConstraintSolver>(score: &Score, solver: &S) -> RoundTripReport {
|
||||
let logical = to_logical(score);
|
||||
let constrained = to_constrained(&logical);
|
||||
|
||||
|
|
@ -148,42 +163,51 @@ pub fn round_trip(score: &Score) -> RoundTripReport {
|
|||
);
|
||||
}
|
||||
|
||||
let report = StubSolver.solve(&constrained, &SolverConfig::default());
|
||||
assert_eq!(
|
||||
report.status,
|
||||
SolveStatus::Solved,
|
||||
"the stub solver must report Solved"
|
||||
let report = solver.solve(&constrained, &SolverConfig::default());
|
||||
// A conformant solver need not report exactly `Solved`: any renderable status
|
||||
// (`Solved`, `SolvedWithWarnings`, `PartialBudgetExhausted`) carries a layout
|
||||
// whose hard constraints are satisfied (Chapter 9 §"The Solver Report"), which
|
||||
// is all the round-trip needs — the provenance contract below is independent of
|
||||
// quality. The non-renderable, diagnostic-only statuses (Unsatisfiable,
|
||||
// InternalError) have no authoritative layout to round-trip.
|
||||
assert!(
|
||||
report.status.is_renderable(),
|
||||
"the solver must return a renderable layout, got {:?}",
|
||||
report.status
|
||||
);
|
||||
assert!(
|
||||
report.satisfied_hard_constraints,
|
||||
"the stub solver must satisfy all hard constraints"
|
||||
"the solver must satisfy all hard constraints"
|
||||
);
|
||||
|
||||
// The stub solver's geometry contract: it returns the input geometry
|
||||
// *verbatim* — each resolved glyph's position is exactly its constrained
|
||||
// baseline (Chapter 9 / QUICKSTART: "the input geometry verbatim"). The
|
||||
// solver preserves order, so glyphs line up by index.
|
||||
assert_eq!(
|
||||
report.layout.glyphs.len(),
|
||||
constrained.glyphs.len(),
|
||||
"the solver must not add or drop glyphs"
|
||||
);
|
||||
for (constrained_glyph, resolved_glyph) in constrained.glyphs.iter().zip(&report.layout.glyphs)
|
||||
{
|
||||
// The Stub tier's geometry contract: it returns the input geometry *verbatim*
|
||||
// — each resolved glyph's position is exactly its constrained baseline (Chapter
|
||||
// 9 / QUICKSTART: "the input geometry verbatim"), strokes pass through in order.
|
||||
// A higher tier re-spaces, so this clause is the stub's alone; provenance
|
||||
// preservation (asserted below) holds for *every* tier regardless.
|
||||
if solver.tier() == SolverTier::Stub {
|
||||
assert_eq!(
|
||||
resolved_glyph.position, constrained_glyph.baseline,
|
||||
"stub solver must return the input geometry verbatim"
|
||||
report.layout.glyphs.len(),
|
||||
constrained.glyphs.len(),
|
||||
"the stub solver must not add or drop glyphs"
|
||||
);
|
||||
for (constrained_glyph, resolved_glyph) in
|
||||
constrained.glyphs.iter().zip(&report.layout.glyphs)
|
||||
{
|
||||
assert_eq!(
|
||||
resolved_glyph.position, constrained_glyph.baseline,
|
||||
"stub solver must return the input geometry verbatim"
|
||||
);
|
||||
assert_eq!(resolved_glyph.glyph, constrained_glyph.glyph);
|
||||
assert_eq!(resolved_glyph.bounding_box, constrained_glyph.bounding_box);
|
||||
assert_eq!(resolved_glyph.style, constrained_glyph.style);
|
||||
assert_eq!(resolved_glyph.layer, constrained_glyph.layer);
|
||||
}
|
||||
assert_eq!(
|
||||
report.layout.strokes, constrained.strokes,
|
||||
"stub solver must return the input strokes verbatim"
|
||||
);
|
||||
assert_eq!(resolved_glyph.glyph, constrained_glyph.glyph);
|
||||
assert_eq!(resolved_glyph.bounding_box, constrained_glyph.bounding_box);
|
||||
assert_eq!(resolved_glyph.style, constrained_glyph.style);
|
||||
assert_eq!(resolved_glyph.layer, constrained_glyph.layer);
|
||||
}
|
||||
// Strokes likewise pass through the stub verbatim, in order.
|
||||
assert_eq!(
|
||||
report.layout.strokes, constrained.strokes,
|
||||
"stub solver must return the input strokes verbatim"
|
||||
);
|
||||
|
||||
let resolved_map = provenance_map(
|
||||
"resolved",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,14 @@ fn pipeline(score: &Score) -> (ConstrainedLayoutIR, RenderOutput) {
|
|||
|
||||
/// A deterministic, human-diffable serialization of the machine acceptance
|
||||
/// snapshot.
|
||||
fn snapshot_text(fixture: &str, constrained: &ConstrainedLayoutIR, out: &RenderOutput) -> String {
|
||||
fn snapshot_text(
|
||||
fixture: &str,
|
||||
solver: &str,
|
||||
constrained: &ConstrainedLayoutIR,
|
||||
out: &RenderOutput,
|
||||
) -> String {
|
||||
let mut s = String::new();
|
||||
s.push_str(&format!("fixture={fixture} solver=stub\n"));
|
||||
s.push_str(&format!("fixture={fixture} solver={solver}\n"));
|
||||
s.push_str(&format!("glyph_count={}\n", out.stats.glyph_count));
|
||||
s.push_str(&format!("path_count={}\n", out.stats.path_count));
|
||||
s.push_str(&format!(
|
||||
|
|
@ -162,7 +167,7 @@ fn fixtures_render_to_golden_locked_svg_and_snapshot() {
|
|||
// Golden locks: the machine snapshot and the full SVG bytes.
|
||||
assert_golden(
|
||||
&format!("{fixture}.stub.snapshot.txt"),
|
||||
&snapshot_text(fixture, &constrained, &out),
|
||||
&snapshot_text(fixture, "stub", &constrained, &out),
|
||||
);
|
||||
assert_golden(&format!("{fixture}.stub.svg"), &out.svg);
|
||||
}
|
||||
|
|
@ -252,15 +257,29 @@ fn svg_validates_under_xmllint_when_available() {
|
|||
let _ = std::fs::remove_file(&tmp);
|
||||
}
|
||||
|
||||
/// Drives the full pipeline through Agent I's real `Engraver` — whose
|
||||
/// horizontal-spacing pass re-spaces every glyph and the strokes that track them.
|
||||
fn engrave_pipeline(score: &Score) -> (ConstrainedLayoutIR, RenderOutput) {
|
||||
use epiphany_engrave::Engraver;
|
||||
|
||||
let constrained = to_constrained(&to_logical(score));
|
||||
let layout = Engraver
|
||||
.solve(&constrained, &SolverConfig::default())
|
||||
.layout;
|
||||
let out = render(&layout, &RenderOptions::default());
|
||||
(constrained, out)
|
||||
}
|
||||
|
||||
/// The renderer's contract is "consumes *any* solver's `ResolvedLayoutIR`", but
|
||||
/// the goldens above only exercise the stub. This drives Agent I's real
|
||||
/// the `.stub.*` goldens above only exercise the stub. This drives the real
|
||||
/// `Engraver` — whose horizontal-spacing pass produces geometry that *differs*
|
||||
/// from the stub's verbatim columns — through the same renderer and asserts the
|
||||
/// output is still well-formed with every glyph drawn and traced, so an
|
||||
/// `Engraver` geometry regression cannot slip through unnoticed (the stub
|
||||
/// goldens would not catch it).
|
||||
/// from the stub's verbatim columns — through the same renderer and **golden-locks
|
||||
/// its SVG bytes and machine snapshot** under `.engrave.*`, so an `Engraver`
|
||||
/// geometry regression is caught at the byte level (the stub goldens cannot see
|
||||
/// it), while the same structural invariants (every glyph drawn, every primitive
|
||||
/// traced, well-formed XML, no fallbacks) hold as for the stub.
|
||||
#[test]
|
||||
fn engraver_output_renders_well_formed_with_every_glyph_drawn() {
|
||||
fn engraver_output_is_golden_locked_well_formed_with_every_glyph_drawn() {
|
||||
use epiphany_engrave::Engraver;
|
||||
use epiphany_layout_ir::SolveStatus;
|
||||
|
||||
|
|
@ -272,8 +291,11 @@ fn engraver_output_renders_well_formed_with_every_glyph_drawn() {
|
|||
SolveStatus::Solved,
|
||||
"{fixture}: engrave should solve the constraint-free stub pipeline"
|
||||
);
|
||||
let out = render(&report.layout, &RenderOptions::default());
|
||||
|
||||
let (_, out) = engrave_pipeline(&score);
|
||||
|
||||
// Structural invariants — identical to the stub's, because the Engraver
|
||||
// re-spaces geometry without adding, dropping, or un-tracing a primitive.
|
||||
check_well_formed(&out.svg)
|
||||
.unwrap_or_else(|e| panic!("{fixture}: engraver SVG is not well-formed: {e}"));
|
||||
assert!(out.stats.glyph_count > 0, "{fixture}: nothing was laid out");
|
||||
|
|
@ -291,5 +313,36 @@ fn engraver_output_renders_well_formed_with_every_glyph_drawn() {
|
|||
out.diagnostics.is_empty(),
|
||||
"{fixture}: stub-pipeline glyphs are all bundled, so no fallback is expected"
|
||||
);
|
||||
|
||||
// Provenance survival into the SVG, as for the stub goldens.
|
||||
for g in &out_glyph_ids(&score) {
|
||||
assert!(
|
||||
out.svg.contains(&format!("data-prov=\"{g:032x}\"")),
|
||||
"{fixture}: provenance {g:032x} did not survive the engrave into the SVG"
|
||||
);
|
||||
}
|
||||
|
||||
// Golden locks: the engraver's machine snapshot and full SVG bytes.
|
||||
assert_golden(
|
||||
&format!("{fixture}.engrave.snapshot.txt"),
|
||||
&snapshot_text(fixture, "engrave", &constrained, &out),
|
||||
);
|
||||
assert_golden(&format!("{fixture}.engrave.svg"), &out.svg);
|
||||
}
|
||||
}
|
||||
|
||||
/// The two solvers' goldens must genuinely differ: the Engraver re-spaces, so its
|
||||
/// SVG cannot be byte-identical to the stub's verbatim-column SVG. A regression
|
||||
/// that made the Engraver echo the stub would pass both golden checks above (each
|
||||
/// would just match its own committed file) — this catches that degeneracy.
|
||||
#[test]
|
||||
fn engraver_goldens_differ_from_the_stub_goldens() {
|
||||
for (fixture, score) in fixtures() {
|
||||
let (_, stub_out) = pipeline(&score);
|
||||
let (_, engrave_out) = engrave_pipeline(&score);
|
||||
assert_ne!(
|
||||
stub_out.svg, engrave_out.svg,
|
||||
"{fixture}: the Engraver must re-space, so its SVG must differ from the stub's"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
fixture=ten_measure_single_staff solver=engrave
|
||||
glyph_count=51
|
||||
path_count=51
|
||||
fallback_rect_count=0
|
||||
stroke_count=51
|
||||
provenance_count=102
|
||||
layer_count=1
|
||||
hard_constraint_count=0
|
||||
xml_well_formed=true
|
||||
view_box=[-3.0113542 -3.632 82.26242 11.632]
|
||||
class_counts:
|
||||
barline=10
|
||||
clef=1
|
||||
notehead=40
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="822.6242" height="116.32" viewBox="0 0 82.2624 11.632">
|
||||
<!-- epiphany-render-svg: glyphs are genuine Bravura SMuFL outlines; geometry is the resolved layout verbatim, no engraving performed here -->
|
||||
<g transform="translate(3.0114 8) scale(1 -1)">
|
||||
<g data-layer="0">
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="2ef8d2dba955aee38147023b72bdabb7" data-source-kind="6" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="0" x2="76.581" y2="0" stroke="#000000" stroke-width="0.13" data-prov="a2b28d85f329dbc90f5b6c27789b129b" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="1" x2="76.581" y2="1" stroke="#000000" stroke-width="0.13" data-prov="8cc8596297e2f64822b7d596f27b928a" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="2" x2="76.581" y2="2" stroke="#000000" stroke-width="0.13" data-prov="c802edfce37280f9b7a5280850fefb1f" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="3" x2="76.581" y2="3" stroke="#000000" stroke-width="0.13" data-prov="374ec294c78d169fdd371dafcc590a90" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="4" x2="76.581" y2="4" stroke="#000000" stroke-width="0.13" data-prov="1ba95e41d7bee35526357d6d68d7d885" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="299bf2a93f24f45bbad8cd9368623750" data-source-kind="2" data-kind="stroke"/>
|
||||
<line x1="5.4172" y1="-1" x2="5.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="f180ab2f8fefa5fd114a522262781511" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="6.9172" y1="-1" x2="6.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="00cff43b791d393f0132b2b1fefa97fb" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="8.4172" y1="-1" x2="8.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="ce8b8ed3f423f2233ee0349407382e86" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="9.9172" y1="-1" x2="9.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="3454bf92ac286b4fa89f0711eb8406ab" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="12.9172" y1="-1" x2="12.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="78705817c33095fd68585149efa39693" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="14.4172" y1="-1" x2="14.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e7010481978598b50f2d16247c9e536f" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="15.9172" y1="-1" x2="15.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="9d2e5b21bd83575f4a739897b23903f8" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="17.4172" y1="-1" x2="17.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="4ae7a4d1adce3e02f9617f49301b790e" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="20.4172" y1="-1" x2="20.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="8d1e19dc98ef35c36a61bf40c10e078a" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="21.9172" y1="-1" x2="21.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="722042f4225d40465081128a28b9ba6d" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="23.4172" y1="-1" x2="23.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="7979e5ca0cc41e36adf997ca73e3f11f" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="24.9172" y1="-1" x2="24.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="6ea8506bc1beb9e26dd4f0a962b47e5c" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="27.9172" y1="-1" x2="27.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="3381c124bd495652c03209c9137ad1d6" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="29.4172" y1="-1" x2="29.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="c6bd0131d5d8b7f7084ce352fe03b9ee" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="30.9172" y1="-1" x2="30.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d1444672c538461a35616863866dd529" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="32.4172" y1="-1" x2="32.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="36be7aa63cfa919f189daf8907b33414" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="35.4172" y1="-1" x2="35.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="a9abf87e1178566e992ad27a605625db" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="36.9172" y1="-1" x2="36.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="663911388f594e9faf492ca1bef4424c" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="38.4172" y1="-1" x2="38.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e13d5950ccece94e0e78721af7a9b7ff" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="39.9172" y1="-1" x2="39.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="2d4b55ae05bb8a68647b9f53172d15f3" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="42.9172" y1="-1" x2="42.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="fabd84e3712a5226d704896a4711856d" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="44.4172" y1="-1" x2="44.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="254b610b6e96d8977e752e1e329c242c" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="45.9172" y1="-1" x2="45.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="45aaeb27e4587d964fe054d9da91a55d" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="47.4172" y1="-1" x2="47.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="9db9470ac3ce354bf774ef612c676c1f" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="50.4172" y1="-1" x2="50.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="b934ef5e3771b425d5e646d1ec905ba7" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="51.9172" y1="-1" x2="51.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="9ee165a1b754cf15a94af8ce1a2ed74a" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="53.4172" y1="-1" x2="53.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e7c3cefbeaf0c7b182f61938f50b84b7" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="54.9172" y1="-1" x2="54.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="43269b2ba973f7d04f787e51fa30d2fe" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="57.9172" y1="-1" x2="57.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="dbb189030d3fb922021f944ac8aa8c6d" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="59.4172" y1="-1" x2="59.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="65ff34e6e9f8e9b1bbf795ffe3eaa2e6" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="60.9172" y1="-1" x2="60.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="b00773cbb8db6a4218f1f956ebce9e25" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="62.4172" y1="-1" x2="62.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="2d8c211fa0abbeb102ecafd986ec9f32" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="65.4172" y1="-1" x2="65.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="b28b480792b411f3928a16c150a2a231" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="66.9172" y1="-1" x2="66.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="67a80c74cc078028d23262082a6467af" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="68.4172" y1="-1" x2="68.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="c4f5b4a9375f3dcc6dd566865df0c92f" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="69.9172" y1="-1" x2="69.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="ba2739c661b9acb3d32494f0f1adae98" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="71.4172" y1="-1" x2="71.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="baea3329fdb0f32274fe3b9985ffe572" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="72.9172" y1="-1" x2="72.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="4dbd0d2bd320be9b9f333e3f8f4dad92" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="74.4172" y1="-1" x2="74.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="21e0c4e7089e613815b7a5d6bf2c103f" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="75.3955" y1="-1" x2="75.3955" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d9c5b62c4340d6bd9038a1a8ff081b3a" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="ad675e7f174a140139e2959e3ebdc8ad" data-source-kind="12" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="14cf3b9c808d0467e40ee355ef4329a8" data-source-kind="14" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="82ca9c2a2208e28338167ec9151748d2" data-source-kind="15" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="33b51b69dbfc551be0448fbb257675b2" data-source-kind="25" data-kind="stroke"/>
|
||||
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(0 1)" fill="#000000" data-prov="7979bb59896a39443f4602af4f2ee4fb" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(4.3391 -1)" fill="#000000" data-prov="b94bca553a7a2dbe815bef6d8b770dc8" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(5.8391 -1)" fill="#000000" data-prov="a3820f9b52ab61a5c70d077f37b1dfbe" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(7.3391 -1)" fill="#000000" data-prov="893ce7ac8d0b518dd85d53aae07485a6" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(8.8391 -1)" fill="#000000" data-prov="e0a27906823095e45f5f8acb6e5784ab" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(11.8391 -1)" fill="#000000" data-prov="111d36d0544df9583dc71243a02cbace" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(13.3391 -1)" fill="#000000" data-prov="5abc05432af9047dd37a867f5508d366" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(14.8391 -1)" fill="#000000" data-prov="cb42d5aafb0af3c41ab468790c214695" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(16.3391 -1)" fill="#000000" data-prov="463525d1acbd9e2cfeb6bf72b8a3bb2a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(19.3391 -1)" fill="#000000" data-prov="a673ee8395ee4b4d9652eebb4ded695b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(20.8391 -1)" fill="#000000" data-prov="963cd4bce2dec2fc217d92c9691cfa10" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(22.3391 -1)" fill="#000000" data-prov="3bff036aa7f994b09edf4cdea0bbd625" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(23.8391 -1)" fill="#000000" data-prov="d63ffa0c7268bf23fcfeac0a1afde7f4" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(26.8391 -1)" fill="#000000" data-prov="184c7ae4b9e86ee27d0bd85ff4b3ec7f" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(28.3391 -1)" fill="#000000" data-prov="fb85357d0a96b2eb7a677d6edc58977e" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(29.8391 -1)" fill="#000000" data-prov="c5bb48e08cef8b001fa7953f02590464" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(31.3391 -1)" fill="#000000" data-prov="4f5cb48ae83cce69bc9907b49f2c55d8" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(34.3391 -1)" fill="#000000" data-prov="0cb38d85c0821f1a91f93d13cba6edc8" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(35.8391 -1)" fill="#000000" data-prov="4a111579a942ea99be4094d257b9229c" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(37.3391 -1)" fill="#000000" data-prov="edfdfb91c37ae76bfa51efd66c0f310a" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(38.8391 -1)" fill="#000000" data-prov="6361d185baa8ed77f350287e10ed2176" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(41.8391 -1)" fill="#000000" data-prov="c2caa10ac0cf05f631b91d334ef24493" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(43.3391 -1)" fill="#000000" data-prov="c16110f407e5c8ac507641d79d932fe6" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(44.8391 -1)" fill="#000000" data-prov="cf10c843c33809009e9333526dd0879f" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(46.3391 -1)" fill="#000000" data-prov="2aecf8993db2e9bf833e391d8824cac9" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(49.3391 -1)" fill="#000000" data-prov="b523a1a70a99069c4258e9a7f62744b8" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(50.8391 -1)" fill="#000000" data-prov="e970cb6a1cac78405c15ceaf6627f370" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(52.3391 -1)" fill="#000000" data-prov="e3eb76921ae215aa98331a9d1ad26804" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(53.8391 -1)" fill="#000000" data-prov="0fba3a760b42655a82fb25596d29fd02" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(56.8391 -1)" fill="#000000" data-prov="66fa0c6a9dfef2806751936f0360c782" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(58.3391 -1)" fill="#000000" data-prov="b546aac49da2b4624d759aed4527fe1d" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(59.8391 -1)" fill="#000000" data-prov="0275a564c27b5031f71cce54b0a8f830" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(61.3391 -1)" fill="#000000" data-prov="a5b5cfea1a313032df813df1dcb06bc8" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(64.3391 -1)" fill="#000000" data-prov="6c3f374430ab9118c68bf368ccf35357" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(65.8391 -1)" fill="#000000" data-prov="e95f370ea65c0f5c664b994bce3040ad" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(67.3391 -1)" fill="#000000" data-prov="c27abce6ad5e01170068a491b9424cbb" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(68.8391 -1)" fill="#000000" data-prov="682d690f334af9f63b1a71a7d6cb10d8" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(70.3391 -1)" fill="#000000" data-prov="b6f35f534dabfbb2ff75515cdd1713c5" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(71.8391 -1)" fill="#000000" data-prov="5bc064cf9ed41d380fddb186477aeb78" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(73.3391 -1)" fill="#000000" data-prov="8e06e0b817d3359c9e251afed6d58cee" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(74.8391 -1)" fill="#000000" data-prov="86405f19f3e47252c21d628ae33e94c2" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(2.8391 2)" fill="#000000" data-prov="913e510f5e3d36b6ab5a21a0bd531816" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(10.3391 2)" fill="#000000" data-prov="e8f4fdf6d757a83af167a7d7b0d268b9" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(17.8391 2)" fill="#000000" data-prov="aa6e5be72b5517b089a04363f42a1d1c" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(25.3391 2)" fill="#000000" data-prov="ee1eea474c5d0d997d284a2610206922" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(32.8391 2)" fill="#000000" data-prov="a353d60fd103f7a61e55a2b8aa95114e" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(40.3391 2)" fill="#000000" data-prov="55d172d9d863190758f311e8b5c69c9b" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(47.8391 2)" fill="#000000" data-prov="7552f781fca3b72788a57822d143ee69" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(55.3391 2)" fill="#000000" data-prov="4e04c5515de885c96a377123738e0397" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0Z" transform="translate(62.8391 2)" fill="#000000" data-prov="65d223b9dca9579949a3a134b8d06182" data-source-kind="9" data-glyph="barlineSingle" data-class="barline"/>
|
||||
<path d="M0.144 0V4H0V0ZM0.912 4H0.412V0H0.912Z" transform="translate(76.3391 2)" fill="#000000" data-prov="8f49273e29ce144556b73f0e914cf377" data-source-kind="9" data-glyph="barlineFinal" data-class="barline"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 25 KiB |
|
|
@ -0,0 +1,14 @@
|
|||
fixture=valid_score_rich solver=engrave
|
||||
glyph_count=11
|
||||
path_count=11
|
||||
fallback_rect_count=0
|
||||
stroke_count=33
|
||||
provenance_count=44
|
||||
layer_count=1
|
||||
hard_constraint_count=0
|
||||
xml_well_formed=true
|
||||
view_box=[-3.0113542 -3.632 27.468542 11.632]
|
||||
class_counts:
|
||||
barline=1
|
||||
clef=3
|
||||
notehead=7
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="274.6854" height="116.32" viewBox="0 0 27.4685 11.632">
|
||||
<!-- epiphany-render-svg: glyphs are genuine Bravura SMuFL outlines; geometry is the resolved layout verbatim, no engraving performed here -->
|
||||
<g transform="translate(3.0114 8) scale(1 -1)">
|
||||
<g data-layer="0">
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="bd56ad529a36a7bbf2b4c343886b55e5" data-source-kind="6" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="0" x2="7.5057" y2="0" stroke="#000000" stroke-width="0.13" data-prov="f6b4640bbb87f4c52d2e8bb00667c1c4" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="1" x2="7.5057" y2="1" stroke="#000000" stroke-width="0.13" data-prov="576ce5892fe554d096e5842d3d1fc1a2" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="2" x2="7.5057" y2="2" stroke="#000000" stroke-width="0.13" data-prov="dd8a37a522ad3b0a5d5349dd123b2e54" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="3" x2="7.5057" y2="3" stroke="#000000" stroke-width="0.13" data-prov="37fd5692db0c0904ede5a67d2f85feeb" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="-0.9464" y1="4" x2="7.5057" y2="4" stroke="#000000" stroke-width="0.13" data-prov="d8d766432ab5a036bcb136abc9353807" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="c9e2f7b92061893043380eabfe8fbcd2" data-source-kind="2" data-kind="stroke"/>
|
||||
<line x1="3.9172" y1="-1" x2="3.9172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="fb2b9c85e73e553a05ccc47d55af4811" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="5.4172" y1="-1" x2="5.4172" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="109fe59f980a1b9bfa00a76e41b78dba" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="6.3955" y1="-1" x2="6.3955" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="d4ef3689df957acec175a1396cebd27c" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="a647c465b9e490a52c23029a2c906cda" data-source-kind="12" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="8ed9d2ef46e84abf412a1b82e125d3a6" data-source-kind="22" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="7b42d513243366bc1409bbb4cf418fac" data-source-kind="14" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="c8ad1fa9386570a1f3e49ccbf43b17f8" data-source-kind="15" data-kind="stroke"/>
|
||||
<line x1="0" y1="0" x2="0" y2="0" stroke="#000000" stroke-width="0" data-prov="9f8b66aae47123317fae42a521a8ea1a" data-source-kind="25" data-kind="stroke"/>
|
||||
<line x1="8.8391" y1="0" x2="8.8391" y2="0" stroke="#000000" stroke-width="0" data-prov="311476ddcf5ddef3b76e9d807237a21a" data-source-kind="6" data-kind="stroke"/>
|
||||
<line x1="8.5057" y1="0" x2="13.8887" y2="0" stroke="#000000" stroke-width="0.13" data-prov="ead033c623ec6fc4eab9fd3839b7caa9" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="8.5057" y1="1" x2="13.8887" y2="1" stroke="#000000" stroke-width="0.13" data-prov="878244625d3b30db37ee716c607b3131" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="8.5057" y1="2" x2="13.8887" y2="2" stroke="#000000" stroke-width="0.13" data-prov="33be23946d80fa61db93990bb8ce3090" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="8.5057" y1="3" x2="13.8887" y2="3" stroke="#000000" stroke-width="0.13" data-prov="497e490bbe54d5dffa7b6e498e561aba" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="8.5057" y1="4" x2="13.8887" y2="4" stroke="#000000" stroke-width="0.13" data-prov="0de0bf3d70a45dda0bcad9c291c8399a" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="8.8391" y1="0" x2="8.8391" y2="0" stroke="#000000" stroke-width="0" data-prov="c36e7a12ef652f2f8e8cf771489cdcdc" data-source-kind="2" data-kind="stroke"/>
|
||||
<line x1="12.7562" y1="-1" x2="12.7562" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="e01815eeb89bc5fcd5157c32311ccf10" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="13.4051" y1="-0.5" x2="13.4051" y2="3" stroke="#000000" stroke-width="0.12" data-prov="119c53a4e3bf288ded2bd28178d6fcbe" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="14.6781" y1="0" x2="14.6781" y2="0" stroke="#000000" stroke-width="0" data-prov="973e800421dc74ca8f5d1b5be644a433" data-source-kind="6" data-kind="stroke"/>
|
||||
<line x1="14.4808" y1="0" x2="22.3922" y2="0" stroke="#000000" stroke-width="0.13" data-prov="5909bb98de8ef36fa41f0493dd500023" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="14.4808" y1="1" x2="22.3922" y2="1" stroke="#000000" stroke-width="0.13" data-prov="e994e0b2b56dd52f254e7bbfa045973a" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="14.4808" y1="2" x2="22.3922" y2="2" stroke="#000000" stroke-width="0.13" data-prov="ef2e4986f9259c1be99015db776cc9cf" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="14.4808" y1="3" x2="22.3922" y2="3" stroke="#000000" stroke-width="0.13" data-prov="5de2776918f9997a484f5a80167007b1" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="14.4808" y1="4" x2="22.3922" y2="4" stroke="#000000" stroke-width="0.13" data-prov="2b697bcb6cc7418ce5ddbe47fdb84406" data-source-kind="3" data-kind="stroke"/>
|
||||
<line x1="14.6781" y1="0" x2="14.6781" y2="0" stroke="#000000" stroke-width="0" data-prov="3550b79c14ba8069d76656ff5347dc71" data-source-kind="2" data-kind="stroke"/>
|
||||
<line x1="18.5953" y1="-1" x2="18.5953" y2="2.5" stroke="#000000" stroke-width="0.12" data-prov="2a1a8f5701737dac37ac7249833d1b7c" data-source-kind="0" data-kind="stroke"/>
|
||||
<line x1="20.0953" y1="-0.5" x2="20.0953" y2="3" stroke="#000000" stroke-width="0.12" data-prov="ec08ad9ddf4f78c806a81632fe2ae1e4" data-source-kind="0" data-kind="stroke"/>
|
||||
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(0 1)" fill="#000000" data-prov="31186a3ef9c061378bfd5da443b88aa8" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(2.8391 -1)" fill="#000000" data-prov="1c92743d8b3afa333dde4fc1bbe503ba" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(4.3391 -1)" fill="#000000" data-prov="56a954e9547cffd75e82fdad63afb684" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(5.8391 -1)" fill="#000000" data-prov="290c3f76bff74030da13f651df94fd4b" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.144 0V4H0V0ZM0.912 4H0.412V0H0.912Z" transform="translate(7.3391 2)" fill="#000000" data-prov="3111f6a4a6bc3100a78fa6f04b2e2f86" data-source-kind="9" data-glyph="barlineFinal" data-class="barline"/>
|
||||
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(8.8391 1)" fill="#000000" data-prov="5a3ada73e6c7dab552b6c44a6aa8f9b6" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(11.6781 -1)" fill="#000000" data-prov="23cf4d4c63aa6a23024a756ec4aabc6d" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(13.1781 -0.5)" fill="#000000" data-prov="866d5e0219f737a3aa929bcff3d98833" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M1.504 1.66C1.496 1.708 1.504 1.712 1.528 1.736C1.96 2.14 2.288 2.648 2.288 3.26C2.288 3.608 2.192 3.952 2.028 4.192C1.968 4.28 1.864 4.392 1.82 4.392C1.764 4.392 1.64 4.288 1.56 4.2C1.264 3.872 1.168 3.372 1.168 2.956C1.168 2.724 1.196 2.464 1.224 2.3C1.232 2.252 1.236 2.244 1.188 2.204C0.612 1.728 0 1.156 0 0.348C0 -0.348 0.476 -1.008 1.456 -1.008C1.548 -1.008 1.652 -1 1.732 -0.984C1.776 -0.976 1.784 -0.972 1.792 -1.02C1.84 -1.288 1.9 -1.636 1.9 -1.824C1.9 -2.416 1.5 -2.488 1.264 -2.488C1.048 -2.488 0.944 -2.424 0.944 -2.372C0.944 -2.344 0.98 -2.332 1.072 -2.304C1.196 -2.268 1.34 -2.16 1.34 -1.928C1.34 -1.708 1.2 -1.52 0.956 -1.52C0.688 -1.52 0.528 -1.732 0.528 -1.98C0.528 -2.24 0.684 -2.632 1.288 -2.632C1.556 -2.632 2.076 -2.512 2.076 -1.832C2.076 -1.604 2.004 -1.224 1.96 -0.976C1.952 -0.928 1.956 -0.932 2.012 -0.908C2.416 -0.748 2.684 -0.408 2.684 0.044C2.684 0.556 2.308 1.008 1.72 1.008C1.616 1.008 1.616 1.008 1.604 1.08ZM1.88 3.772C2.012 3.772 2.12 3.664 2.12 3.444C2.12 3 1.74 2.64 1.424 2.364C1.396 2.34 1.38 2.344 1.372 2.396C1.356 2.5 1.348 2.636 1.348 2.764C1.348 3.388 1.636 3.772 1.88 3.772ZM1.444 1.048C1.456 0.972 1.456 0.976 1.384 0.952C1.032 0.832 0.804 0.516 0.804 0.176C0.804 -0.184 0.992 -0.44 1.264 -0.532C1.296 -0.544 1.344 -0.556 1.372 -0.556C1.404 -0.556 1.42 -0.536 1.42 -0.512C1.42 -0.484 1.388 -0.472 1.36 -0.46C1.192 -0.388 1.072 -0.216 1.072 -0.032C1.072 0.196 1.228 0.368 1.472 0.436C1.536 0.452 1.544 0.448 1.552 0.404L1.752 -0.788C1.76 -0.832 1.756 -0.832 1.696 -0.844C1.632 -0.856 1.552 -0.864 1.472 -0.864C0.772 -0.864 0.32 -0.476 0.32 0.08C0.32 0.316 0.36 0.632 0.692 1.008C0.932 1.276 1.116 1.424 1.304 1.576C1.344 1.608 1.352 1.604 1.36 1.56ZM1.72 0.412C1.712 0.46 1.716 0.472 1.764 0.468C2.088 0.44 2.356 0.168 2.356 -0.184C2.356 -0.436 2.204 -0.64 1.98 -0.752C1.932 -0.776 1.924 -0.776 1.916 -0.728Z" transform="translate(14.6781 1)" fill="#000000" data-prov="c46ea45155710bbe02c7dc32cfe32bc2" data-source-kind="4" data-glyph="gClef" data-class="clef"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(17.5172 -1)" fill="#000000" data-prov="7d6b27caefc21b2a04761b299840e44d" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
<path d="M0.388 -0.5C0.744 -0.5 1.18 -0.172 1.18 0.168C1.18 0.372 1.02 0.5 0.792 0.5C0.352 0.5 0 0.176 0 -0.168C0 -0.376 0.172 -0.5 0.388 -0.5Z" transform="translate(19.0172 -0.5)" fill="#000000" data-prov="8311e890285ee9cffb3e19c98277caa4" data-source-kind="1" data-glyph="noteheadBlack" data-class="notehead"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
Loading…
Reference in New Issue