Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fda9ad0de6
|
||
|
|
c6aa0bf6b0
|
||
|
|
3ba676106f
|
||
|
|
ea776391ca
|
||
|
|
9a355670c0 | ||
|
|
228931a937
|
||
|
|
cfbf0744f9
|
||
|
|
1dc265647d | ||
|
|
e762dac5d5
|
||
|
|
e19feb01a8
|
||
|
|
d8a57607fd |
No files matched your search
@@ -72,7 +72,7 @@ The root `pom.xml` is an aggregator only and lists every module, so one build pr
|
||||
|
||||
Run `./mvnw verify` (`.\mvnw.cmd verify` on Windows) at the repository root. The foundation's tests include disposable MySQL 8.4 and PostgreSQL suites started with Testcontainers, so Docker access is required. They verify publication concurrency/commit/rollback, physical pooled-connection restoration, mapping/settings drift refusal, bounded lock contention, current-authorized context selection and immutable pins, audit/receipt failures, restart and incomplete results. They do not qualify production storage, hostile workers or physical printer output.
|
||||
|
||||
The build enforces Checkstyle plus 85% instruction/90% class coverage in the foundation. The published `qbit-build-parent` POMs leave `${revision}` in their own version, which causes a Maven parent-resolution warning despite a successful build. That upstream publication issue remains open; it is neither suppressed nor patched.
|
||||
The build enforces Checkstyle plus 85% instruction/90% class coverage in the foundation, and holds the renderer (94% instructions, 91% lines) and its bridge (85% instructions, 82% lines) to their measured baselines; the new packages and classes named in each `pom.xml` must reach 100% line coverage. Bounded mutation campaigns over the scene parser and the host printer gate run in the test phase; see [docs/security/fuzzing.md](docs/security/fuzzing.md). The published `qbit-build-parent` POMs leave `${revision}` in their own version, which causes a Maven parent-resolution warning despite a successful build. That upstream publication issue remains open; it is neither suppressed nor patched.
|
||||
|
||||
## Maven publication
|
||||
|
||||
|
||||
@@ -1,9 +1,22 @@
|
||||
# Build only on an operator-approved, immutable existing renderer image.
|
||||
# This file does not build/download the engine or confer isolation qualification.
|
||||
# Build only on an operator-approved, immutable existing renderer image (RENDERER_IMAGE, the engine image from
|
||||
# renderer/Dockerfile). This file does not build the engine or confer isolation qualification.
|
||||
# The service is the RELEASED transport artifact, resolved at the exact TRANSPORT_VERSION from the QRun-IO Gitea Maven
|
||||
# registry and Maven Central (no SNAPSHOT, no local build, no default). BUILD_IMAGE must be an immutable digest.
|
||||
# docker build --build-arg BUILD_IMAGE=... --build-arg RENDERER_IMAGE=... --build-arg TRANSPORT_VERSION=1.0.0 bridges/remote-renderer/
|
||||
ARG BUILD_IMAGE
|
||||
ARG RENDERER_IMAGE
|
||||
FROM ${BUILD_IMAGE} AS release
|
||||
ARG TRANSPORT_VERSION
|
||||
WORKDIR /release
|
||||
COPY release-image/pom.xml ./pom.xml
|
||||
RUN test -n "${TRANSPORT_VERSION}" && case "${TRANSPORT_VERSION}" in *SNAPSHOT*|*forge*) echo "TRANSPORT_VERSION must be a released version" >&2; exit 1;; esac \
|
||||
&& mvn -B -Dtransport.version="${TRANSPORT_VERSION}" -Dmaven.repo.local=/release/.m2 package \
|
||||
&& mv "target/lib/qqq-remote-renderer-transport-${TRANSPORT_VERSION}.jar" target/service.jar \
|
||||
&& test -f target/service.jar && ls target/lib
|
||||
|
||||
FROM ${RENDERER_IMAGE}
|
||||
COPY transport/target/qqq-remote-renderer-transport-0.1.0-SNAPSHOT.jar /remote/service.jar
|
||||
COPY transport/target/lib/ /remote/lib/
|
||||
COPY --from=release /release/target/service.jar /remote/service.jar
|
||||
COPY --from=release /release/target/lib/ /remote/lib/
|
||||
COPY LICENSE NOTICE /usr/share/doc/qqq-remote-renderer/
|
||||
USER 65532:65532
|
||||
EXPOSE 18445
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Image-assembly project, not a published module. It resolves the RELEASED remote renderer transport service and its runtime
|
||||
libraries from the QRun-IO Gitea Maven registry (and Maven Central) at one exact version, so the service image
|
||||
carries release bytes and not a local build. transport.version has no default: pass -Dtransport.version=<released>. -->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.kingsrook.qbits</groupId><artifactId>qqq-remote-renderer-image</artifactId><version>0</version><packaging>pom</packaging>
|
||||
<repositories>
|
||||
<repository><id>central</id><url>https://repo.maven.apache.org/maven2</url><snapshots><enabled>false</enabled></snapshots></repository>
|
||||
<repository><id>qrun-io</id><url>https://git.kof22.com/api/packages/QRun-IO/maven</url><snapshots><enabled>false</enabled></snapshots><releases><checksumPolicy>fail</checksumPolicy></releases></repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency><groupId>com.kingsrook.qbits</groupId><artifactId>qqq-remote-renderer-transport</artifactId><version>${transport.version}</version></dependency>
|
||||
</dependencies>
|
||||
<build><plugins>
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.9.0</version>
|
||||
<executions><execution><id>release-libraries</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals>
|
||||
<configuration><includeScope>runtime</includeScope><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration>
|
||||
</execution></executions></plugin>
|
||||
</plugins></build>
|
||||
</project>
|
||||
@@ -37,6 +37,23 @@
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.5.4</version><configuration><dependenciesToScan combine.self="override"/></configuration></plugin>
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.8.1</version><executions><execution><id>runtime-distribution</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><includeScope>runtime</includeScope><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin>
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.3.1</version><dependencies><dependency><groupId>com.puppycrawl.tools</groupId><artifactId>checkstyle</artifactId><version>10.12.6</version></dependency></dependencies><configuration><configLocation>${project.basedir}/checkstyle/config.xml</configLocation><propertyExpansion>checkstyle.reactor.root=${project.basedir}</propertyExpansion><includeTestSourceDirectory>true</includeTestSourceDirectory><consoleOutput>true</consoleOutput><violationSeverity>warning</violationSeverity><failOnViolation>true</failOnViolation></configuration><executions><execution><phase>validate</phase><goals><goal>check</goal></goals></execution></executions></plugin>
|
||||
<plugin>
|
||||
<!-- Coverage gates. The BUNDLE rule is the measured baseline of the existing bridge, rounded down (2026-11-11: 85.6% of instructions and 82.6% of lines); raise it when coverage rises and
|
||||
never lower it. The PACKAGE and CLASS rules hold new code to 100% line coverage from its first commit; a pattern matches nothing until its package or class exists, so the package that adds
|
||||
it needs no change here. Nothing is excluded: JaCoCo skips only code annotated as generated, and this build defines no such annotation. There is no skip switch. -->
|
||||
<groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.15</version><executions>
|
||||
<execution><goals><goal>prepare-agent</goal></goals></execution>
|
||||
<execution><id>report</id><phase>verify</phase><goals><goal>report</goal></goals></execution>
|
||||
<execution><id>coverage</id><phase>verify</phase><goals><goal>check</goal></goals><configuration><rules>
|
||||
<rule><element>BUNDLE</element><limits>
|
||||
<limit><counter>INSTRUCTION</counter><value>COVEREDRATIO</value><minimum>0.85</minimum></limit>
|
||||
<limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.82</minimum></limit>
|
||||
</limits></rule>
|
||||
<rule><element>CLASS</element><includes><include>com.kingsrook.qbits.documentgeneration.renderer.ZplRaster</include><include>com.kingsrook.qbits.documentgeneration.renderer.ZplRaster.*</include></includes><limits>
|
||||
<limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>1.00</minimum></limit>
|
||||
</limits></rule>
|
||||
</rules></configuration></execution>
|
||||
</executions></plugin>
|
||||
<plugin>
|
||||
<!-- Publish a self-contained POM: ${revision}/property versions are resolved at build time, so a consumer needs no -Drevision -->
|
||||
<groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.7.3</version>
|
||||
|
||||
+11
@@ -43,6 +43,13 @@ import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
*******************************************************************************/
|
||||
public final class IsolatedRendererBridge implements GenerationPorts.IsolatedRenderer
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// the refusals renderer 0.1.0 can name. FailureCode also holds the version 2 scene refusals; a 0.1.0 worker //
|
||||
// cannot produce those, so one that names them is rejected like any other unknown code //
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
private static final Set<GenerationPorts.FailureCode> RENDERER_0_1_REFUSALS = java.util.EnumSet.range(
|
||||
GenerationPorts.FailureCode.BARCODE_FIT_TOO_SMALL, GenerationPorts.FailureCode.UNSUPPORTED_BARCODE_OPTION);
|
||||
|
||||
private final RendererLimits config;
|
||||
private final AssetReader assets;
|
||||
private final Exchange exchange;
|
||||
@@ -268,6 +275,10 @@ public final class IsolatedRendererBridge implements GenerationPorts.IsolatedRen
|
||||
{
|
||||
throw new IllegalArgumentException("WORKER_ERROR_REJECTED");
|
||||
}
|
||||
if(!RENDERER_0_1_REFUSALS.contains(code))
|
||||
{
|
||||
throw new IllegalArgumentException("WORKER_ERROR_REJECTED");
|
||||
}
|
||||
throw new GenerationPorts.RenderException(code);
|
||||
}
|
||||
int expectedFields = operation.equals("VALIDATE") ? 5 : 10;
|
||||
|
||||
+13
-1
@@ -183,13 +183,25 @@ class BridgeTest
|
||||
@Test
|
||||
void exactWorkerErrorsPreserveClosedFailureCodes() throws Exception
|
||||
{
|
||||
assertEquals(13, GenerationPorts.FailureCode.values().length);
|
||||
var released = java.util.EnumSet.range(GenerationPorts.FailureCode.BARCODE_FIT_TOO_SMALL, GenerationPorts.FailureCode.UNSUPPORTED_BARCODE_OPTION);
|
||||
assertEquals(13, released.size());
|
||||
assertEquals(28, GenerationPorts.FailureCode.values().length);
|
||||
for(var code : GenerationPorts.FailureCode.values())
|
||||
{
|
||||
var bridge = new IsolatedRendererBridge(config(directory), (actor, asset, maximum) -> new byte[0], (id, input, maximum) ->
|
||||
(RendererJson.JSON.writeValueAsString(Map.of("protocol", RendererJson.PROTOCOL, "requestId", id, "outcome", "ERROR",
|
||||
"rendererVersion", "qqq-renderer-0.1.0", "catalogVersion", "qqq-barcodes-9", "code", code.name())) + "\n").getBytes(StandardCharsets.UTF_8));
|
||||
var request = request(Map.of(), List.of());
|
||||
if(!released.contains(code))
|
||||
{
|
||||
// A version 2 scene refusal named by a 0.1.0 worker stays as unknown as it was before the vocabulary grew.
|
||||
for(var generic : List.of(assertThrows(QException.class, () -> bridge.render(request)), assertThrows(QException.class, () -> bridge.validate("actor-1", request.revision()))))
|
||||
{
|
||||
assertEquals(QException.class, generic.getClass(), code.name());
|
||||
assertEquals("Isolated renderer rejected or could not complete the request.", generic.getMessage());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
var failure = assertThrows(GenerationPorts.RenderException.class, () -> bridge.render(request));
|
||||
assertEquals(code, failure.code());
|
||||
assertEquals(code.name(), failure.getMessage());
|
||||
|
||||
+218
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration.renderer;
|
||||
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.SplittableRandom;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Seeded, bounded mutation campaign for a parser of untrusted input. A seed, an
|
||||
** iteration number, the corpus and the dictionary fully determine every input:
|
||||
** there is no clock and no unseeded randomness, so a finding replays exactly.
|
||||
** Targets, limits and the replay command are in `docs/security/fuzzing.md`. The
|
||||
** same class is kept in the test tree of `renderer`.
|
||||
*******************************************************************************/
|
||||
final class MutationCampaign
|
||||
{
|
||||
static final int MAXIMUM_ITERATIONS = 100_000;
|
||||
static final int MAXIMUM_INPUT_BYTES = 1024 * 1024;
|
||||
|
||||
private static final byte[] INTERESTING = {0, 9, 10, 13, ' ', '"', '\\', '^', '~', '_', ',', '{', '}', '[', ']', '0', '9', '-', (byte) 0x7F, (byte) 0x80, (byte) 0xC0, (byte) 0xFF};
|
||||
|
||||
private final List<byte[]> corpus;
|
||||
private final List<byte[]> dictionary;
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The parser under test. Returning normally means the input was accepted; a
|
||||
** target asserts its own property on what it accepts.
|
||||
***************************************************************************/
|
||||
@FunctionalInterface
|
||||
interface Target
|
||||
{
|
||||
/************************************************************************
|
||||
** Parse one generated input.
|
||||
************************************************************************/
|
||||
void accept(byte[] input) throws Exception;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** An input that was neither accepted nor refused in the declared way, with
|
||||
** the coordinates that regenerate it: `input(seed, iteration)`.
|
||||
***************************************************************************/
|
||||
record Finding(long seed, int iteration, String failure)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** What a campaign saw. A campaign that accepted or refused nothing has not
|
||||
** exercised both sides of the parser, so callers assert on the counts too.
|
||||
***************************************************************************/
|
||||
record Result(int accepted, int refused, List<Finding> findings)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Valid inputs to start from, and tokens of the format to splice in.
|
||||
***************************************************************************/
|
||||
MutationCampaign(List<byte[]> corpus, List<String> dictionary)
|
||||
{
|
||||
if(corpus.isEmpty() || corpus.stream().anyMatch(seedInput -> seedInput.length > MAXIMUM_INPUT_BYTES))
|
||||
{
|
||||
throw new IllegalArgumentException("A campaign needs a corpus of inputs within the input limit.");
|
||||
}
|
||||
this.corpus = corpus.stream().map(byte[]::clone).toList();
|
||||
this.dictionary = dictionary.stream().map(token -> token.getBytes(StandardCharsets.UTF_8)).toList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The seeds for this run: the fixed ones, or only `-Dfuzz.seed=<n>` when a
|
||||
** finding is replayed or a longer campaign is run by hand.
|
||||
***************************************************************************/
|
||||
static long[] seeds(long... fixed)
|
||||
{
|
||||
Long replay = Long.getLong("fuzz.seed");
|
||||
return (replay == null ? fixed : new long[] {replay});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The iteration count for this run: `-Dfuzz.iterations=<n>`, never unbounded.
|
||||
***************************************************************************/
|
||||
static int iterations(int fallback)
|
||||
{
|
||||
int iterations = Integer.getInteger("fuzz.iterations", fallback);
|
||||
if(iterations < 1 || iterations > MAXIMUM_ITERATIONS)
|
||||
{
|
||||
throw new IllegalArgumentException("fuzz.iterations must be between 1 and " + MAXIMUM_ITERATIONS);
|
||||
}
|
||||
return (iterations);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The input of one iteration: a corpus entry with one to four mutations.
|
||||
***************************************************************************/
|
||||
byte[] input(long seed, int iteration)
|
||||
{
|
||||
SplittableRandom random = new SplittableRandom(seed + 0x9E3779B97F4A7C15L * (iteration + 1L));
|
||||
byte[] value = corpus.get(random.nextInt(corpus.size())).clone();
|
||||
int steps = 1 + random.nextInt(4);
|
||||
for(int step = 0; step < steps; step++)
|
||||
{
|
||||
value = mutate(value, random);
|
||||
}
|
||||
return (value.length > MAXIMUM_INPUT_BYTES ? Arrays.copyOf(value, MAXIMUM_INPUT_BYTES) : value);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Run iterations 0 to `iterations - 1`. A thrown failure that `refusal`
|
||||
** recognises is the parser saying no; any other, including a failed assertion
|
||||
** in the target and a stack overflow, is a finding.
|
||||
***************************************************************************/
|
||||
Result run(long seed, int iterations, Target target, Predicate<Throwable> refusal)
|
||||
{
|
||||
if(iterations < 1 || iterations > MAXIMUM_ITERATIONS)
|
||||
{
|
||||
throw new IllegalArgumentException("A campaign runs between 1 and " + MAXIMUM_ITERATIONS + " iterations.");
|
||||
}
|
||||
int accepted = 0;
|
||||
int refused = 0;
|
||||
List<Finding> findings = new ArrayList<>();
|
||||
for(int iteration = 0; iteration < iterations; iteration++)
|
||||
{
|
||||
try
|
||||
{
|
||||
target.accept(input(seed, iteration));
|
||||
accepted++;
|
||||
}
|
||||
catch(Exception | AssertionError | StackOverflowError failure)
|
||||
{
|
||||
if(refusal.test(failure))
|
||||
{
|
||||
refused++;
|
||||
}
|
||||
else
|
||||
{
|
||||
findings.add(new Finding(seed, iteration, failure.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return (new Result(accepted, refused, List.copyOf(findings)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** One structural or byte-level change at a random position.
|
||||
***************************************************************************/
|
||||
private byte[] mutate(byte[] value, SplittableRandom random)
|
||||
{
|
||||
int at = value.length == 0 ? 0 : random.nextInt(value.length);
|
||||
int span = value.length == 0 ? 0 : 1 + random.nextInt(Math.min(16, value.length - at));
|
||||
byte[] noise = new byte[1 + random.nextInt(8)];
|
||||
random.nextBytes(noise);
|
||||
return (switch(random.nextInt(8))
|
||||
{
|
||||
case 0 -> splice(value, at, span, new byte[0]);
|
||||
case 1 -> splice(value, at, 0, Arrays.copyOfRange(value, at, at + span));
|
||||
case 2 -> Arrays.copyOf(value, at);
|
||||
case 3 -> splice(value, at, 0, dictionary.isEmpty() ? noise : dictionary.get(random.nextInt(dictionary.size())));
|
||||
case 4 -> splice(value, at, 0, noise);
|
||||
case 5 -> splice(value, at, Math.min(1, value.length), new byte[] {INTERESTING[random.nextInt(INTERESTING.length)]});
|
||||
case 6 -> splice(value, at, Math.min(1, value.length), new byte[] {noise[0]});
|
||||
default -> splice(value, at, Math.min(1, value.length), value.length == 0 ? noise : new byte[] {(byte) (value[at] ^ (1 << random.nextInt(8)))});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Replace `removed` bytes at `at` with `inserted`.
|
||||
***************************************************************************/
|
||||
private static byte[] splice(byte[] value, int at, int removed, byte[] inserted)
|
||||
{
|
||||
byte[] result = new byte[value.length - removed + inserted.length];
|
||||
System.arraycopy(value, 0, result, 0, at);
|
||||
System.arraycopy(inserted, 0, result, at, inserted.length);
|
||||
System.arraycopy(value, at + removed, result, at + inserted.length, value.length - at - removed);
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration.renderer;
|
||||
|
||||
|
||||
import java.nio.charset.CharacterCodingException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.HexFormat;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import com.kingsrook.qbits.documentgeneration.GenerationPorts;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** The mutation harness is deterministic and reports what it should, and one
|
||||
** bounded campaign runs in the normal test phase over the host printer gate.
|
||||
** Seeds, limits and the replay command: `docs/security/fuzzing.md`.
|
||||
*******************************************************************************/
|
||||
class MutationCampaignTest
|
||||
{
|
||||
private static final long[] SEEDS = {20261111L, 7919L};
|
||||
private static final int ITERATIONS = 20_000;
|
||||
private static final Path CORPUS = Path.of("..", "..", "renderer", "src", "test", "resources", "compat-v1", "zpl");
|
||||
private static final GenerationPorts.Stock STOCK = new GenerationPorts.Stock(76200, 50800, 0, 0, 0, 0, 203);
|
||||
private static final Set<String> COMMANDS = Set.of("XA", "XZ", "PW", "LL", "LH", "CI", "FO", "A0", "FH", "FD", "FS", "GB", "GF");
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** A seed and an iteration name one input, on every run and every machine.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aSeedAndAnIterationAlwaysGiveTheSameInput()
|
||||
{
|
||||
MutationCampaign campaign = new MutationCampaign(List.of("^XA^FO10,20^GB30,40,2^FS^XZ".getBytes(StandardCharsets.US_ASCII)), List.of("^FO", "^GB"));
|
||||
MutationCampaign again = new MutationCampaign(List.of("^XA^FO10,20^GB30,40,2^FS^XZ".getBytes(StandardCharsets.US_ASCII)), List.of("^FO", "^GB"));
|
||||
Set<String> distinct = new HashSet<>();
|
||||
for(int iteration = 0; iteration < 200; iteration++)
|
||||
{
|
||||
byte[] input = campaign.input(42L, iteration);
|
||||
assertArrayEquals(input, again.input(42L, iteration));
|
||||
assertTrue(input.length <= MutationCampaign.MAXIMUM_INPUT_BYTES);
|
||||
distinct.add(HexFormat.of().formatHex(input));
|
||||
}
|
||||
assertTrue(distinct.size() > 100, "mutations should rarely repeat: " + distinct.size());
|
||||
assertNotEquals(HexFormat.of().formatHex(campaign.input(42L, 0)), HexFormat.of().formatHex(campaign.input(43L, 0)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The harness fails when it should: a crash and an unsafe acceptance are both
|
||||
** findings, each carrying the coordinates that regenerate its input.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aCrashAndAnUnsafeAcceptanceAreFindingsThatReplay()
|
||||
{
|
||||
MutationCampaign campaign = new MutationCampaign(List.of("0123456789".getBytes(StandardCharsets.US_ASCII)), List.of());
|
||||
MutationCampaign.Result result = campaign.run(42L, 300, input ->
|
||||
{
|
||||
if(input.length % 3 == 0)
|
||||
{
|
||||
throw new IllegalArgumentException("REFUSED");
|
||||
}
|
||||
if(input.length % 3 == 1)
|
||||
{
|
||||
throw new IllegalStateException("crash");
|
||||
}
|
||||
assertTrue(input.length < 11, "accepted an input it should have refused");
|
||||
}, IllegalArgumentException.class::isInstance);
|
||||
assertEquals(300, result.accepted() + result.refused() + result.findings().size());
|
||||
assertTrue(result.accepted() > 0 && result.refused() > 0);
|
||||
assertTrue(result.findings().stream().anyMatch(finding -> finding.failure().startsWith("java.lang.IllegalStateException")));
|
||||
assertTrue(result.findings().stream().anyMatch(finding -> finding.failure().contains("AssertionFailedError")));
|
||||
for(MutationCampaign.Finding finding : result.findings())
|
||||
{
|
||||
int length = campaign.input(finding.seed(), finding.iteration()).length;
|
||||
assertTrue(length % 3 == 1 || (length % 3 == 2 && length >= 11), finding.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** A campaign is always bounded and always has something to mutate.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void campaignsAreBounded()
|
||||
{
|
||||
MutationCampaign campaign = new MutationCampaign(List.of(new byte[0]), List.of());
|
||||
assertThrows(IllegalArgumentException.class, () -> campaign.run(1L, 0, input -> {}, failure -> true));
|
||||
assertThrows(IllegalArgumentException.class, () -> campaign.run(1L, MutationCampaign.MAXIMUM_ITERATIONS + 1, input -> {}, failure -> true));
|
||||
assertThrows(IllegalArgumentException.class, () -> new MutationCampaign(List.of(), List.of()));
|
||||
assertThrows(IllegalArgumentException.class, () -> new MutationCampaign(List.of(new byte[MutationCampaign.MAXIMUM_INPUT_BYTES + 1]), List.of()));
|
||||
assertEquals(50, campaign.run(1L, 50, input -> {}, failure -> false).accepted());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Property: whatever the host printer gate accepts holds only the commands
|
||||
** the renderer may emit, and no tilde command. Every other input is refused
|
||||
** with the gate's own IllegalArgumentException, or with the strict decoder's
|
||||
** CharacterCodingException for field text that is not UTF-8; any other
|
||||
** failure is a finding.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void theHostPrinterGateAcceptsOnlyTheRendererCommandSet() throws Exception
|
||||
{
|
||||
List<byte[]> corpus = new ArrayList<>();
|
||||
for(String name : List.of("box-203", "text-font0-203", "image-203", "barcode-scale-203", "raster-text-rotation-203"))
|
||||
{
|
||||
byte[] released = Files.readAllBytes(CORPUS.resolve(name + ".zpl"));
|
||||
ZplOutputPolicy.validate(released, STOCK);
|
||||
corpus.add(released);
|
||||
}
|
||||
MutationCampaign campaign = new MutationCampaign(corpus, List.of("^XA", "^XZ\n", "^FO", "^GFA,", "^GB", "^FS\n", "^A0N,", "^FH_^FD", "^PW", "^LL", "^LH0,0", "^CI28\n",
|
||||
"~DG", "~JR", "^XG", "^DF", "^JU", "^FX", "^FB", "99999", "0", ",", "\n", "_5E", "_7E"));
|
||||
int iterations = MutationCampaign.iterations(ITERATIONS);
|
||||
for(long seed : MutationCampaign.seeds(SEEDS))
|
||||
{
|
||||
MutationCampaign.Result result = campaign.run(seed, iterations, MutationCampaignTest::gate,
|
||||
failure -> failure instanceof IllegalArgumentException || failure instanceof CharacterCodingException);
|
||||
assertEquals(List.of(), result.findings(), "replay with -Dfuzz.seed=" + seed + " -Dfuzz.iterations=" + iterations);
|
||||
assertFalse(result.accepted() == 0 || result.refused() == 0, "the campaign must reach both acceptance and refusal: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The target, and an independent reading of what it let through.
|
||||
***************************************************************************/
|
||||
private static void gate(byte[] zpl) throws Exception
|
||||
{
|
||||
ZplOutputPolicy.validate(zpl, STOCK);
|
||||
for(int index = 0; index < zpl.length; index++)
|
||||
{
|
||||
assertNotEquals('~', (char) zpl[index], "accepted a tilde command");
|
||||
if(zpl[index] == '^')
|
||||
{
|
||||
assertTrue(index + 2 < zpl.length && COMMANDS.contains(new String(zpl, index + 1, 2, StandardCharsets.US_ASCII)), "accepted a command outside the renderer set");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration.renderer;
|
||||
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.HexFormat;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.kingsrook.qbits.documentgeneration.GenerationPorts;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** The released version 1 bytes, as the host receives them: each stored ZPL of
|
||||
** the renderer's `compat-v1` corpus is exactly the bytes its manifest names and
|
||||
** passes the unchanged host printer gate for the stock it was rendered for. The
|
||||
** corpus has one copy, in the renderer module, so the two tests cannot drift.
|
||||
*******************************************************************************/
|
||||
class ZplSceneOneCompatibilityTest
|
||||
{
|
||||
private static final Path CORPUS = Path.of("..", "..", "renderer", "src", "test", "resources", "compat-v1");
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** One manifest line per stored output: hash, two spaces, path.
|
||||
***************************************************************************/
|
||||
static List<String> outputs() throws Exception
|
||||
{
|
||||
List<String> lines = Files.readAllLines(CORPUS.resolve("SHA256SUMS"), StandardCharsets.US_ASCII);
|
||||
assertFalse(lines.isEmpty());
|
||||
return (lines);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** A released label that the host gate refused could never have printed.
|
||||
***************************************************************************/
|
||||
@ParameterizedTest(name = "{0}")
|
||||
@MethodSource("outputs")
|
||||
void releasedBytesAreIntactAndPassTheHostPrinterGate(String line) throws Exception
|
||||
{
|
||||
assertTrue(line.matches("[0-9a-f]{64} zpl/[a-z0-9-]+\\.zpl"), line);
|
||||
String name = line.substring(70, line.length() - 4);
|
||||
byte[] bytes = Files.readAllBytes(CORPUS.resolve("zpl").resolve(name + ".zpl"));
|
||||
assertEquals(line.substring(0, 64), HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256").digest(bytes)), name);
|
||||
JsonNode stock = RendererJson.JSON.readTree(Files.readAllBytes(CORPUS.resolve("cases").resolve(name + ".json"))).path("stock");
|
||||
GenerationPorts.Stock printed = new GenerationPorts.Stock(stock.path("widthMicrons").intValue(), stock.path("heightMicrons").intValue(), stock.path("topMicrons").intValue(),
|
||||
stock.path("rightMicrons").intValue(), stock.path("bottomMicrons").intValue(), stock.path("leftMicrons").intValue(), stock.path("dpi").intValue());
|
||||
assertDoesNotThrow(() -> ZplOutputPolicy.validate(bytes, printed), name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
# Parser fuzzing
|
||||
|
||||
## Scope and properties
|
||||
|
||||
K22-TEST-25 applies: this repository parses untrusted input at two boundaries. Templates are written by users,
|
||||
and the isolated renderer is treated as compromisable, so its output is untrusted to the host.
|
||||
|
||||
| Target | Module | Input | Campaign |
|
||||
|---|---|---|---|
|
||||
| Version 1 scene parser, `ZplRenderer.validate` | `renderer` | A `qqq-zpl-scene/1` source | `MutationCampaignTest.theVersionOneSceneParserAcceptsOnlyVersionOneScenes` |
|
||||
| Host printer gate, `ZplOutputPolicy.validate` | `bridges/renderer` | ZPL bytes returned by the worker | `MutationCampaignTest.theHostPrinterGateAcceptsOnlyTheRendererCommandSet` |
|
||||
|
||||
The harness is `MutationCampaign`, one copy in each module's test tree (the modules share no test code). It
|
||||
mutates valid inputs from the version 1 compatibility corpus (`renderer/src/test/resources/compat-v1`): bit
|
||||
flips, byte and range edits, truncation, duplication and tokens of the format spliced in. Each campaign checks
|
||||
unsafe acceptance, not only crashes:
|
||||
|
||||
- **Scene parser.** An accepted input, read again by a second and differently configured JSON parser, is a
|
||||
version 1 scene of known element types within the element limit. Any exception is a refusal, because the
|
||||
worker turns every exception into its opaque error answer. A stack overflow or a failed acceptance check is a
|
||||
finding.
|
||||
- **Printer gate.** An accepted input contains only the commands the renderer may emit and no tilde command.
|
||||
A refusal is the gate's `IllegalArgumentException`, or the strict decoder's `CharacterCodingException` for
|
||||
field text that is not UTF-8. Any other failure, or a failed acceptance check, is a finding.
|
||||
|
||||
Each campaign also asserts that it reached both acceptance and refusal, so a campaign that only ever refuses
|
||||
cannot pass.
|
||||
|
||||
This is seeded generated-input fuzzing, not coverage-guided instrumentation. Do not claim OSS-Fuzz or
|
||||
ClusterFuzzLite enrolment.
|
||||
|
||||
## Running and replaying
|
||||
|
||||
The campaigns run in the normal test phase, so every `./mvnw verify`, and therefore every CI build of a pull
|
||||
request or a push, runs them. No network, clock or unseeded randomness is used: a seed and an iteration
|
||||
number determine the input.
|
||||
|
||||
```sh
|
||||
# What CI runs: seeds 20261111 and 7919, 20000 iterations each, per target.
|
||||
./mvnw -B -pl renderer,bridges/renderer -am verify
|
||||
|
||||
# Replay a finding, or run a longer campaign before a MINOR or MAJOR release (both seeds at 100000).
|
||||
./mvnw -B -pl renderer -am test -Dtest=MutationCampaignTest -Dsurefire.failIfNoSpecifiedTests=false -Dfuzz.seed=20261111 -Dfuzz.iterations=100000
|
||||
./mvnw -B -pl bridges/renderer -am test -Dtest=MutationCampaignTest -Dsurefire.failIfNoSpecifiedTests=false -Dfuzz.seed=20261111 -Dfuzz.iterations=100000
|
||||
```
|
||||
|
||||
A failure lists each finding as `Finding[seed, iteration, failure]`. `MutationCampaign.input(seed, iteration)`
|
||||
returns that exact input against the same checkout. Reduce it to a named regression test beside the parser's
|
||||
other tests, fix the parser, and rerun both seeds. Report a suspected vulnerability privately rather than in a
|
||||
public issue.
|
||||
|
||||
Limits: inputs are at most 1 MiB, a campaign is at most 100000 iterations, and the corpus entries used are
|
||||
under 20 KiB. The harness writes no files, launches no process and reads no credentials. Generated ZPL is never
|
||||
sent to a printer and generated scenes are only validated, not rendered.
|
||||
|
||||
## Adding a target
|
||||
|
||||
A new parser of untrusted input adds one test method to the `MutationCampaignTest` of its module, with a
|
||||
corpus of valid inputs, a dictionary of the format's tokens, the refusal it declares and an independent check
|
||||
of what it accepts, and adds a row to the table above. The version 2 scene parser and `ZplRaster` are the next
|
||||
two targets.
|
||||
|
||||
## Review record
|
||||
|
||||
- **Added:** 2026-11-11, with the two campaigns above.
|
||||
- The first run of the printer gate campaign showed the `CharacterCodingException` refusal, which the property
|
||||
had not declared. It is a refusal, not a defect; the property now names it.
|
||||
- Not yet done: a weekly long campaign and the `docs/security/assurance.json` record that K22-TEST-25 also asks
|
||||
for. The long campaign is the manual command above until a scheduled job exists.
|
||||
- Reassess the targets when a parser boundary changes.
|
||||
@@ -48,6 +48,22 @@
|
||||
<execution><id>coverage</id><phase>verify</phase><goals><goal>check</goal></goals><configuration><rules><rule><element>BUNDLE</element><limits>
|
||||
<limit><counter>INSTRUCTION</counter><value>COVEREDRATIO</value><minimum>0.85</minimum></limit>
|
||||
<limit><counter>CLASS</counter><value>COVEREDRATIO</value><minimum>0.90</minimum></limit>
|
||||
</limits></rule>
|
||||
<!-- Classes added since the label layout design (section 10.7) are held to 100% line coverage from their first commit. A pattern matches nothing until its class exists,
|
||||
so a later package only adds its class here if the design did not already name it. The BUNDLE rule above is unchanged and is never lowered. -->
|
||||
<rule><element>CLASS</element><includes>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationPorts.Diagnostic*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationPorts.Preview*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationPreviewProcesses*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationPreviewWidget*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationAssetProcesses*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationAssetTables*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationAssetStore*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.GenerationUpgradeProcesses*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.DocumentPreviewService*</include>
|
||||
<include>com.kingsrook.qbits.documentgeneration.DocumentAvailability*</include>
|
||||
</includes><limits>
|
||||
<limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>1.00</minimum></limit>
|
||||
</limits></rule></rules></configuration></execution>
|
||||
</executions></plugin>
|
||||
<plugin>
|
||||
|
||||
+5
-1
@@ -24,6 +24,7 @@ package com.kingsrook.qbits.documentgeneration;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
import java.util.stream.Stream;
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerMultiOutput;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
@@ -138,7 +139,7 @@ public class DocumentGenerationQBitProducer implements QBitMetaDataProducer<Docu
|
||||
QBitMetaData bit = getQBitMetaData();
|
||||
instance.addQBit(bit);
|
||||
MetaDataProducerMultiOutput output = new MetaDataProducerMultiOutput();
|
||||
GenerationTables.tables(config).forEach(table ->
|
||||
Stream.concat(GenerationTables.tables(config).stream(), GenerationAssetTables.tables(config).stream()).forEach(table ->
|
||||
{
|
||||
table.setSourceQBitName(bit.getName());
|
||||
output.add(table);
|
||||
@@ -146,6 +147,9 @@ public class DocumentGenerationQBitProducer implements QBitMetaDataProducer<Docu
|
||||
output.addSelfToInstance(instance);
|
||||
GenerationProcesses.register(instance, config.getSourceTables());
|
||||
GenerationAuthoringProcesses.register(instance, config);
|
||||
GenerationPreviewProcesses.register(instance, config);
|
||||
GenerationAssetProcesses.register(instance, config);
|
||||
GenerationUpgradeProcesses.register(instance, config);
|
||||
return (new MetaDataProducerMultiOutput());
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
|
||||
/*******************************************************************************
|
||||
** Processes that upload and manage built-in template assets such as fonts.
|
||||
** The producer already calls this registration point; it registers nothing yet.
|
||||
*******************************************************************************/
|
||||
final class GenerationAssetProcesses
|
||||
{
|
||||
/*******************************************************************************
|
||||
** Metadata namespace.
|
||||
*******************************************************************************/
|
||||
private GenerationAssetProcesses()
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Called once by the producer after the generation and authoring processes.
|
||||
*******************************************************************************/
|
||||
static void register(QInstance instance, DocumentGenerationQBitConfig config) throws QException
|
||||
{
|
||||
}
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import java.util.List;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
|
||||
/*******************************************************************************
|
||||
** Tables of the built-in asset store. The producer already registers whatever
|
||||
** this returns, with the QBit's own tables; it returns none yet.
|
||||
*******************************************************************************/
|
||||
final class GenerationAssetTables
|
||||
{
|
||||
/*******************************************************************************
|
||||
** Metadata namespace.
|
||||
*******************************************************************************/
|
||||
private GenerationAssetTables()
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Complete table metadata, on the configured backend, for the producer to add.
|
||||
*******************************************************************************/
|
||||
static List<QTableMetaData> tables(DocumentGenerationQBitConfig config)
|
||||
{
|
||||
return (List.of());
|
||||
}
|
||||
}
|
||||
+230
-2
@@ -38,6 +38,17 @@ public final class GenerationPorts
|
||||
{
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A render target is absent or one of the resolutions the renderer supports.
|
||||
***************************************************************************/
|
||||
private static void renderTarget(Integer dpi)
|
||||
{
|
||||
if(dpi != null && !List.of(203, 300, 600).contains(dpi))
|
||||
{
|
||||
throw new IllegalArgumentException("A render target is 203, 300 or 600 dpi.");
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Initial output contracts; new formats require a qualified renderer adapter.
|
||||
*******************************************************************************/
|
||||
@@ -93,7 +104,99 @@ public final class GenerationPorts
|
||||
SCANNER_BARCODE_PAYLOAD_UNSUPPORTED,
|
||||
SCANNER_BARCODE_CHECKSUM_REQUIRED,
|
||||
SCANNER_BARCODE_CHECKSUM_MISMATCH,
|
||||
UNSUPPORTED_BARCODE_OPTION
|
||||
UNSUPPORTED_BARCODE_OPTION,
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
// version 2 scene refusals; no released renderer names these for a version 1 scene //
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
SCENE_INVALID,
|
||||
STOCK_MISMATCH,
|
||||
TARGET_REQUIRES_SCENE_2,
|
||||
ELEMENT_OUTSIDE_PRINTABLE_AREA,
|
||||
TEXT_DOES_NOT_FIT,
|
||||
VALUE_MISSING,
|
||||
VALUE_TOO_LONG,
|
||||
FONT_UNKNOWN,
|
||||
FONT_MISSING_GLYPH,
|
||||
RESERVED_FONT_NAME,
|
||||
BARCODE_DOES_NOT_FIT,
|
||||
GS1_INVALID,
|
||||
ASSET_UNKNOWN,
|
||||
PREVIEW_TOO_LARGE,
|
||||
RENDERER_TOO_OLD
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** One renderer finding about a layout: a code from a closed vocabulary, the
|
||||
** element id the template author wrote, and numbers. It has no free text, so
|
||||
** no record value, context text or exception message can travel in it.
|
||||
***************************************************************************/
|
||||
public record Diagnostic(String code, Severity severity, String element, List<Integer> box, Map<String, Integer> measured, Map<String, Integer> limit)
|
||||
{
|
||||
private static final java.util.Set<String> WARNINGS = java.util.Set.of("TEXT_TRUNCATED", "TEXT_SMALL_FOR_DPI", "TEXT_LIGHT_FACE", "FIT_NOT_PROVEN",
|
||||
"BARCODE_MODULE_BELOW_RECOMMENDED", "QUIET_ZONE_INTRUDED", "ELEMENTS_OVERLAP", "IMAGE_UPSCALED", "DEVICE_UNIT_USED", "PRINTER_FONT_NOT_SHOWN");
|
||||
private static final java.util.Set<String> INFORMATION = java.util.Set.of("TEXT_SHRUNK", "TEXT_WRAPPED", "BARCODE_MODULE", "IMAGE_SCALED");
|
||||
|
||||
/************************************************************************
|
||||
** An error stops printing; a warning and information do not.
|
||||
************************************************************************/
|
||||
public enum Severity
|
||||
{
|
||||
ERROR, WARNING, INFO
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
** Admit only the vocabulary: an error is a FailureCode name, a warning or
|
||||
** information is one of the fixed names. The element is absent or an
|
||||
** author-written id, the box is absent or x, y, width and height in dots,
|
||||
** and measured values and limits are at most eight named integers each.
|
||||
************************************************************************/
|
||||
public Diagnostic
|
||||
{
|
||||
if(severity == null || code == null || !known(code, severity))
|
||||
{
|
||||
throw new IllegalArgumentException("Unknown diagnostic code for its severity.");
|
||||
}
|
||||
if(element != null && !element.matches("[A-Za-z][A-Za-z0-9_-]{0,31}"))
|
||||
{
|
||||
throw new IllegalArgumentException("Invalid diagnostic element id.");
|
||||
}
|
||||
if(box != null && (box.size() != 4 || box.stream().anyMatch(java.util.Objects::isNull) || box.get(2) < 0 || box.get(3) < 0))
|
||||
{
|
||||
throw new IllegalArgumentException("A diagnostic box is x, y, width and height in dots.");
|
||||
}
|
||||
box = box == null ? null : List.copyOf(box);
|
||||
measured = numbers(measured);
|
||||
limit = numbers(limit);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
** The closed vocabulary, by severity.
|
||||
************************************************************************/
|
||||
private static boolean known(String code, Severity severity)
|
||||
{
|
||||
return (switch(severity)
|
||||
{
|
||||
case ERROR -> java.util.Arrays.stream(FailureCode.values()).anyMatch(failure -> failure.name().equals(code));
|
||||
case WARNING -> WARNINGS.contains(code);
|
||||
case INFO -> INFORMATION.contains(code);
|
||||
});
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
** Freeze named integers; a name is a short identifier, never a sentence.
|
||||
************************************************************************/
|
||||
private static Map<String, Integer> numbers(Map<String, Integer> values)
|
||||
{
|
||||
if(values == null)
|
||||
{
|
||||
return (Map.of());
|
||||
}
|
||||
if(values.size() > 8 || values.entrySet().stream().anyMatch(entry -> entry.getKey() == null || !entry.getKey().matches("[a-z][A-Za-z0-9]{0,31}") || entry.getValue() == null))
|
||||
{
|
||||
throw new IllegalArgumentException("Diagnostic values are at most eight named integers.");
|
||||
}
|
||||
return (Map.copyOf(values));
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@@ -103,14 +206,29 @@ public final class GenerationPorts
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final FailureCode code;
|
||||
private final transient Diagnostic diagnostic;
|
||||
|
||||
/***************************************************************************
|
||||
** Construct a native process error whose public message is the safe code.
|
||||
***************************************************************************/
|
||||
public RenderException(FailureCode code)
|
||||
{
|
||||
this(code, null);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A refusal that also says where and by how much: the diagnostic, when
|
||||
** present, is the error with this same code. The message stays the code.
|
||||
***************************************************************************/
|
||||
public RenderException(FailureCode code, Diagnostic diagnostic)
|
||||
{
|
||||
super(java.util.Objects.requireNonNull(code).name());
|
||||
if(diagnostic != null && (diagnostic.severity() != Diagnostic.Severity.ERROR || !code.name().equals(diagnostic.code())))
|
||||
{
|
||||
throw new IllegalArgumentException("A refusal's diagnostic must be the error with the same code.");
|
||||
}
|
||||
this.code = code;
|
||||
this.diagnostic = diagnostic;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@@ -120,6 +238,14 @@ public final class GenerationPorts
|
||||
{
|
||||
return (code);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** The detail the worker gave with the refusal, or null when it gave none.
|
||||
***************************************************************************/
|
||||
public Diagnostic diagnostic()
|
||||
{
|
||||
return (diagnostic);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
@@ -223,7 +349,99 @@ public final class GenerationPorts
|
||||
** Bounded worker job with all revision inputs captured before dispatch.
|
||||
*******************************************************************************/
|
||||
public record RenderRequest(String requestId, String actorId, Source source, Format format, Revision revision,
|
||||
Map<String, Object> context, Integer maximumBytes) {}
|
||||
Map<String, Object> context, Integer maximumBytes, Integer targetDpi)
|
||||
{
|
||||
/***************************************************************************
|
||||
** The render target is absent (the stock's own resolution) or a resolution
|
||||
** the renderer supports.
|
||||
***************************************************************************/
|
||||
public RenderRequest
|
||||
{
|
||||
renderTarget(targetDpi);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Existing callers render at the stock's own resolution.
|
||||
***************************************************************************/
|
||||
public RenderRequest(String requestId, String actorId, Source source, Format format, Revision revision,
|
||||
Map<String, Object> context, Integer maximumBytes)
|
||||
{
|
||||
this(requestId, actorId, source, format, revision, context, maximumBytes, null);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A layout preview job: the print path stopped before retention. It has no
|
||||
** request id and no source record because nothing is written for it.
|
||||
***************************************************************************/
|
||||
public record PreviewRequest(String actorId, Format format, Revision revision, Map<String, Object> context, Integer targetDpi, Integer maximumBytes)
|
||||
{
|
||||
/***************************************************************************
|
||||
** Refuse a job that names no format or content, an unsupported render
|
||||
** target or no output bound.
|
||||
***************************************************************************/
|
||||
public PreviewRequest
|
||||
{
|
||||
if(format == null || revision == null || maximumBytes == null || maximumBytes < 1)
|
||||
{
|
||||
throw new IllegalArgumentException("A preview needs a format, a revision and an output limit.");
|
||||
}
|
||||
renderTarget(targetDpi);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** One preview page: a PNG whose pixels are printer dots at the render target.
|
||||
***************************************************************************/
|
||||
public record PreviewPage(byte[] png, Integer widthDots, Integer heightDots)
|
||||
{
|
||||
private static final byte[] SIGNATURE = {(byte) 0x89, 'P', 'N', 'G', 13, 10, 26, 10};
|
||||
|
||||
/***************************************************************************
|
||||
** Only a PNG with a stated size is a page; the bytes cannot change later.
|
||||
***************************************************************************/
|
||||
public PreviewPage
|
||||
{
|
||||
if(png == null || png.length < SIGNATURE.length || !java.util.Arrays.equals(png, 0, SIGNATURE.length, SIGNATURE, 0, SIGNATURE.length)
|
||||
|| widthDots == null || widthDots < 1 || heightDots == null || heightDots < 1)
|
||||
{
|
||||
throw new IllegalArgumentException("A preview page is a PNG with its size in dots.");
|
||||
}
|
||||
png = png.clone();
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Never expose the stored byte array to a consumer.
|
||||
***************************************************************************/
|
||||
@Override
|
||||
public byte[] png()
|
||||
{
|
||||
return (png.clone());
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** What a preview shows: the pages, whether they are exactly what prints,
|
||||
** whether the layout can print at all, every diagnostic, and the size and
|
||||
** hash of the output the pages were decoded from.
|
||||
***************************************************************************/
|
||||
public record Preview(List<PreviewPage> pages, Boolean exact, Boolean printable, List<Diagnostic> diagnostics, Long outputBytes, String outputSha256)
|
||||
{
|
||||
/***************************************************************************
|
||||
** Freeze the lists and refuse a contradiction: a layout with an error
|
||||
** diagnostic is not printable.
|
||||
***************************************************************************/
|
||||
public Preview
|
||||
{
|
||||
pages = List.copyOf(pages);
|
||||
diagnostics = List.copyOf(diagnostics);
|
||||
if(exact == null || printable == null || outputBytes == null || outputBytes < 0 || outputSha256 == null || !outputSha256.matches("[a-f0-9]{64}")
|
||||
|| (printable && diagnostics.stream().anyMatch(diagnostic -> diagnostic.severity() == Diagnostic.Severity.ERROR)))
|
||||
{
|
||||
throw new IllegalArgumentException("Invalid preview result.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Temporary bounded worker result, discarded after retained intake.
|
||||
@@ -393,6 +611,16 @@ public final class GenerationPorts
|
||||
throw new QException("Renderer barcode reference is unavailable.");
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
** Optional layout preview: the print path stopped before retention, with
|
||||
** the pages decoded from the validated output. A renderer that does not
|
||||
** provide it refuses, so an existing adapter is unchanged.
|
||||
***********************************************************************/
|
||||
default Preview preview(PreviewRequest request) throws QException
|
||||
{
|
||||
throw new QException("Renderer preview is unavailable.");
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Authorize assets and validate user source outside the application JVM.
|
||||
*******************************************************************************/
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
|
||||
/*******************************************************************************
|
||||
** Layout preview processes for a template: sample, stress and record data.
|
||||
** The producer already calls this registration point; it registers nothing yet.
|
||||
*******************************************************************************/
|
||||
final class GenerationPreviewProcesses
|
||||
{
|
||||
/*******************************************************************************
|
||||
** Metadata namespace.
|
||||
*******************************************************************************/
|
||||
private GenerationPreviewProcesses()
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Called once by the producer after the generation and authoring processes.
|
||||
*******************************************************************************/
|
||||
static void register(QInstance instance, DocumentGenerationQBitConfig config) throws QException
|
||||
{
|
||||
}
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
|
||||
/*******************************************************************************
|
||||
** The "Label preview" section of the template record screen. The template
|
||||
** table already offers itself here after its own sections; nothing is added yet.
|
||||
*******************************************************************************/
|
||||
final class GenerationPreviewWidget
|
||||
{
|
||||
/*******************************************************************************
|
||||
** Metadata namespace.
|
||||
*******************************************************************************/
|
||||
private GenerationPreviewWidget()
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Called once for the template table, after its standard sections.
|
||||
*******************************************************************************/
|
||||
static void section(QTableMetaData table)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -182,6 +182,7 @@ public final class GenerationTables
|
||||
table.withSection(new QFieldSection("advanced", new QIcon("settings"), Tier.T3, List.of("id", "createDate", "scriptArtifact", "assetIds")).withLabel("Advanced references")
|
||||
.withCollapsible(CollapsibleMetaData.INITIALLY_CLOSED)
|
||||
.withHelpContent(help("These are exact stored identities for support and provenance. Change scripts and included assets through the named actions; do not edit integrity references.")));
|
||||
GenerationPreviewWidget.section(table);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
|
||||
/*******************************************************************************
|
||||
** The authoring action that converts a version 1 scene to version 2.
|
||||
** The producer already calls this registration point; it registers nothing yet.
|
||||
*******************************************************************************/
|
||||
final class GenerationUpgradeProcesses
|
||||
{
|
||||
/*******************************************************************************
|
||||
** Metadata namespace.
|
||||
*******************************************************************************/
|
||||
private GenerationUpgradeProcesses()
|
||||
{
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
** Called once by the producer after the generation and authoring processes.
|
||||
*******************************************************************************/
|
||||
static void register(QInstance instance, DocumentGenerationQBitConfig config) throws QException
|
||||
{
|
||||
}
|
||||
}
|
||||
+305
@@ -0,0 +1,305 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import com.kingsrook.qbits.documentgeneration.GenerationPorts.Diagnostic;
|
||||
import com.kingsrook.qbits.documentgeneration.GenerationPorts.Diagnostic.Severity;
|
||||
import com.kingsrook.qbits.documentgeneration.GenerationPorts.FailureCode;
|
||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
/*******************************************************************************
|
||||
** The preview, diagnostic and render target ports: what each value admits, what
|
||||
** the defaults refuse, and that every existing constructor and adapter still
|
||||
** compiles and means what it did.
|
||||
*******************************************************************************/
|
||||
class GenerationPortsContractTest
|
||||
{
|
||||
private static final GenerationPorts.Stock STOCK = new GenerationPorts.Stock(101600, 25400, 3000, 3000, 3000, 3000, 203);
|
||||
private static final GenerationPorts.Revision REVISION = new GenerationPorts.Revision(1, 2, "orders", STOCK, null, "{}", null, List.of());
|
||||
private static final GenerationPorts.Source SOURCE = new GenerationPorts.Source("orders", "1");
|
||||
private static final byte[] PNG = {(byte) 0x89, 'P', 'N', 'G', 13, 10, 26, 10, 0};
|
||||
private static final String SHA = "0".repeat(64);
|
||||
|
||||
/***************************************************************************
|
||||
** An adapter written before the preview port: it implements what it always
|
||||
** did, and this class compiling is the source compatibility proof.
|
||||
***************************************************************************/
|
||||
private static final class ExistingAdapter implements GenerationPorts.IsolatedRenderer
|
||||
{
|
||||
/************************************************************************
|
||||
** Accept every revision.
|
||||
************************************************************************/
|
||||
@Override
|
||||
public void validate(String actorId, GenerationPorts.Revision revision)
|
||||
{
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
** Return fixed bytes.
|
||||
************************************************************************/
|
||||
@Override
|
||||
public GenerationPorts.Content render(GenerationPorts.RenderRequest request)
|
||||
{
|
||||
return (new GenerationPorts.Content(new byte[] {1}));
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** The seven-argument request and the one-argument refusal are unchanged, and
|
||||
** an existing adapter refuses the optional operations it never had.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void existingConstructorsAndAdaptersMeanWhatTheyDid() throws Exception
|
||||
{
|
||||
var request = new GenerationPorts.RenderRequest("request-1", "actor-1", SOURCE, GenerationPorts.Format.ZPL, REVISION, Map.of("record", Map.of()), 1024);
|
||||
assertNull(request.targetDpi());
|
||||
assertEquals(request, new GenerationPorts.RenderRequest("request-1", "actor-1", SOURCE, GenerationPorts.Format.ZPL, REVISION, Map.of("record", Map.of()), 1024, null));
|
||||
var refusal = new GenerationPorts.RenderException(FailureCode.BARCODE_FIT_TOO_SMALL);
|
||||
assertEquals(FailureCode.BARCODE_FIT_TOO_SMALL, refusal.code());
|
||||
assertEquals("BARCODE_FIT_TOO_SMALL", refusal.getMessage());
|
||||
assertNull(refusal.diagnostic());
|
||||
assertThrows(NullPointerException.class, () -> new GenerationPorts.RenderException(null));
|
||||
var adapter = new ExistingAdapter();
|
||||
assertArrayEquals(new byte[] {1}, adapter.render(request).bytes());
|
||||
adapter.validate("actor-1", REVISION);
|
||||
assertEquals("Renderer preview is unavailable.", assertThrows(QException.class,
|
||||
() -> adapter.preview(new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.ZPL, REVISION, Map.of(), null, 1024))).getMessage());
|
||||
assertEquals("Renderer barcode reference is unavailable.", assertThrows(QException.class, adapter::barcodeReference).getMessage());
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Stored error codes are read back by name, so the released names keep their
|
||||
** order and the version 2 refusals follow them.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void failureCodesKeepTheReleasedNamesThenAddTheSceneTwoRefusals()
|
||||
{
|
||||
List<String> names = Arrays.stream(FailureCode.values()).map(Enum::name).toList();
|
||||
assertEquals(List.of("BARCODE_FIT_TOO_SMALL", "BARCODE_FIT_UNSUPPORTED", "BARCODE_FIT_BOX_OUTSIDE_STOCK", "BARCODE_FIT_GEOMETRY_MISMATCH", "INVALID_BARCODE_FIT_PROFILE",
|
||||
"INVALID_BARCODE_FIT_REQUEST", "BARCODE_SYMBOLOGY_NOT_ALLOWED", "SYMBOLOGY_ALLOWLIST_REQUIRED", "SCANNER_BARCODE_PROFILE_UNSUPPORTED", "SCANNER_BARCODE_PAYLOAD_UNSUPPORTED",
|
||||
"SCANNER_BARCODE_CHECKSUM_REQUIRED", "SCANNER_BARCODE_CHECKSUM_MISMATCH", "UNSUPPORTED_BARCODE_OPTION"), names.subList(0, 13));
|
||||
assertEquals(List.of("SCENE_INVALID", "STOCK_MISMATCH", "TARGET_REQUIRES_SCENE_2", "ELEMENT_OUTSIDE_PRINTABLE_AREA", "TEXT_DOES_NOT_FIT", "VALUE_MISSING", "VALUE_TOO_LONG",
|
||||
"FONT_UNKNOWN", "FONT_MISSING_GLYPH", "RESERVED_FONT_NAME", "BARCODE_DOES_NOT_FIT", "GS1_INVALID", "ASSET_UNKNOWN", "PREVIEW_TOO_LARGE", "RENDERER_TOO_OLD"), names.subList(13, names.size()));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A render target is absent or a resolution the renderer supports, for a
|
||||
** render and for a preview alike.
|
||||
***************************************************************************/
|
||||
@ParameterizedTest
|
||||
@ValueSource(ints = {0, 72, 200, 204, 301, 1200, -203})
|
||||
void anUnsupportedRenderTargetIsRefused(int dpi)
|
||||
{
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.RenderRequest("request-1", "actor-1", SOURCE, GenerationPorts.Format.ZPL, REVISION, Map.of(), 1024, dpi));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.ZPL, REVISION, Map.of(), dpi, 1024));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Each supported resolution is carried unchanged.
|
||||
***************************************************************************/
|
||||
@ParameterizedTest
|
||||
@ValueSource(ints = {203, 300, 600})
|
||||
void aSupportedRenderTargetIsCarried(int dpi)
|
||||
{
|
||||
assertEquals(dpi, new GenerationPorts.RenderRequest("request-1", "actor-1", SOURCE, GenerationPorts.Format.ZPL, REVISION, Map.of(), 1024, dpi).targetDpi());
|
||||
assertEquals(dpi, new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.ZPL, REVISION, Map.of(), dpi, 1024).targetDpi());
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A preview job names its format, its content and an output bound.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aPreviewRequestNeedsAFormatARevisionAndALimit()
|
||||
{
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewRequest("actor-1", null, REVISION, Map.of(), null, 1024));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.ZPL, null, Map.of(), null, 1024));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.ZPL, REVISION, Map.of(), null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.ZPL, REVISION, Map.of(), null, 0));
|
||||
assertEquals(REVISION, new GenerationPorts.PreviewRequest("actor-1", GenerationPorts.Format.PDF, REVISION, Map.of(), null, 1).revision());
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A page is a PNG with a size, and neither the caller nor a consumer can
|
||||
** change its bytes afterwards.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aPreviewPageIsAnImmutablePngWithItsSize()
|
||||
{
|
||||
byte[] supplied = PNG.clone();
|
||||
var page = new GenerationPorts.PreviewPage(supplied, 812, 203);
|
||||
supplied[8] = 9;
|
||||
page.png()[8] = 9;
|
||||
assertArrayEquals(PNG, page.png());
|
||||
assertEquals(812, page.widthDots());
|
||||
assertEquals(203, page.heightDots());
|
||||
byte[] jpeg = PNG.clone();
|
||||
jpeg[1] = 'J';
|
||||
for(byte[] bytes : new byte[][] {null, new byte[0], Arrays.copyOf(PNG, 7), jpeg})
|
||||
{
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewPage(bytes, 812, 203));
|
||||
}
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewPage(PNG, null, 203));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewPage(PNG, 0, 203));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewPage(PNG, 812, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.PreviewPage(PNG, 812, 0));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A preview freezes its lists, states its output exactly, and cannot call a
|
||||
** layout with an error printable.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aPreviewIsFrozenAndCannotContradictItsDiagnostics()
|
||||
{
|
||||
var page = new GenerationPorts.PreviewPage(PNG, 812, 203);
|
||||
var error = new Diagnostic("TEXT_DOES_NOT_FIT", Severity.ERROR, "caption", null, null, null);
|
||||
var warning = new Diagnostic("PRINTER_FONT_NOT_SHOWN", Severity.WARNING, null, null, null, null);
|
||||
List<GenerationPorts.PreviewPage> pages = new ArrayList<>(List.of(page));
|
||||
List<Diagnostic> diagnostics = new ArrayList<>(List.of(warning));
|
||||
var preview = new GenerationPorts.Preview(pages, false, true, diagnostics, 1234L, SHA);
|
||||
pages.clear();
|
||||
diagnostics.clear();
|
||||
assertEquals(List.of(page), preview.pages());
|
||||
assertEquals(List.of(warning), preview.diagnostics());
|
||||
assertThrows(UnsupportedOperationException.class, () -> preview.pages().clear());
|
||||
assertThrows(UnsupportedOperationException.class, () -> preview.diagnostics().clear());
|
||||
assertEquals(false, new GenerationPorts.Preview(List.of(), true, false, List.of(error), 0L, SHA).printable());
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), true, true, List.of(warning, error), 1234L, SHA));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), null, true, List.of(), 1234L, SHA));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), true, null, List.of(), 1234L, SHA));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), true, true, List.of(), null, SHA));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), true, true, List.of(), -1L, SHA));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), true, true, List.of(), 1234L, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.Preview(List.of(page), true, true, List.of(), 1234L, SHA.toUpperCase().replace('0', 'A')));
|
||||
assertThrows(NullPointerException.class, () -> new GenerationPorts.Preview(null, true, true, List.of(), 1234L, SHA));
|
||||
assertThrows(NullPointerException.class, () -> new GenerationPorts.Preview(List.of(page), true, true, null, 1234L, SHA));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** The design's example diagnostic, and every code of the first release under
|
||||
** its own severity only.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aDiagnosticAdmitsOnlyItsClosedVocabulary()
|
||||
{
|
||||
var example = new Diagnostic("TEXT_DOES_NOT_FIT", Severity.ERROR, "caption", List.of(24, 131, 764, 56),
|
||||
Map.of("widthDots", 902, "sizeCentipoints", 700, "lines", 2), Map.of("widthDots", 764, "lines", 2));
|
||||
assertEquals(List.of(24, 131, 764, 56), example.box());
|
||||
assertEquals(902, example.measured().get("widthDots"));
|
||||
assertEquals(2, example.limit().get("lines"));
|
||||
for(FailureCode code : FailureCode.values())
|
||||
{
|
||||
assertEquals(code.name(), new Diagnostic(code.name(), Severity.ERROR, null, null, null, null).code());
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(code.name(), Severity.WARNING, null, null, null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(code.name(), Severity.INFO, null, null, null, null));
|
||||
}
|
||||
for(String code : List.of("TEXT_TRUNCATED", "TEXT_SMALL_FOR_DPI", "TEXT_LIGHT_FACE", "FIT_NOT_PROVEN", "BARCODE_MODULE_BELOW_RECOMMENDED", "QUIET_ZONE_INTRUDED", "ELEMENTS_OVERLAP",
|
||||
"IMAGE_UPSCALED", "DEVICE_UNIT_USED", "PRINTER_FONT_NOT_SHOWN"))
|
||||
{
|
||||
assertEquals(Severity.WARNING, new Diagnostic(code, Severity.WARNING, null, null, null, null).severity());
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(code, Severity.ERROR, null, null, null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(code, Severity.INFO, null, null, null, null));
|
||||
}
|
||||
for(String code : List.of("TEXT_SHRUNK", "TEXT_WRAPPED", "BARCODE_MODULE", "IMAGE_SCALED"))
|
||||
{
|
||||
assertEquals(Severity.INFO, new Diagnostic(code, Severity.INFO, null, null, null, null).severity());
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(code, Severity.ERROR, null, null, null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(code, Severity.WARNING, null, null, null, null));
|
||||
}
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("RENDER_FAILED", Severity.ERROR, null, null, null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("Customer Jane Example could not be printed", Severity.ERROR, null, null, null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic(null, Severity.ERROR, null, null, null, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("TEXT_DOES_NOT_FIT", null, null, null, null, null));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Nothing but an author-written id and numbers fits beside the code: a
|
||||
** sentence, a record value or a message has no field that will hold it.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aDiagnosticCannotHoldFreeText()
|
||||
{
|
||||
assertEquals("order_id-2", new Diagnostic("VALUE_MISSING", Severity.ERROR, "order_id-2", null, null, null).element());
|
||||
for(String element : List.of("", "9caption", "two words", "Jane Example, 1 Test Street", "a".repeat(33), "caption\n", "/record/name"))
|
||||
{
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("VALUE_MISSING", Severity.ERROR, element, null, null, null), element);
|
||||
}
|
||||
for(List<Integer> box : List.of(List.<Integer>of(), List.of(1, 2, 3), List.of(1, 2, 3, 4, 5), List.of(1, 2, -3, 4), List.of(1, 2, 3, -4), Arrays.asList(1, null, 3, 4)))
|
||||
{
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("ELEMENT_OUTSIDE_PRINTABLE_AREA", Severity.ERROR, "caption", box, null, null), String.valueOf(box));
|
||||
}
|
||||
assertEquals(List.of(-12, -4, 0, 0), new Diagnostic("ELEMENT_OUTSIDE_PRINTABLE_AREA", Severity.ERROR, "caption", List.of(-12, -4, 0, 0), null, null).box());
|
||||
Map<String, Integer> nullValue = new HashMap<>();
|
||||
nullValue.put("widthDots", null);
|
||||
Map<String, Integer> nullName = new HashMap<>();
|
||||
nullName.put(null, 1);
|
||||
Map<String, Integer> tooMany = new HashMap<>();
|
||||
for(int index = 0; index < 9; index++)
|
||||
{
|
||||
tooMany.put("value" + index, index);
|
||||
}
|
||||
for(Map<String, Integer> values : List.of(Map.of("Width", 1), Map.of("width dots", 1), Map.of("the value Jane Example is too long", 1), Map.of("w".repeat(33), 1), nullValue, nullName, tooMany))
|
||||
{
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("TEXT_DOES_NOT_FIT", Severity.ERROR, "caption", null, values, null));
|
||||
assertThrows(IllegalArgumentException.class, () -> new Diagnostic("TEXT_DOES_NOT_FIT", Severity.ERROR, "caption", null, null, values));
|
||||
}
|
||||
List<Integer> box = new ArrayList<>(List.of(1, 2, 3, 4));
|
||||
Map<String, Integer> measured = new HashMap<>(Map.of("widthDots", 902));
|
||||
var diagnostic = new Diagnostic("TEXT_DOES_NOT_FIT", Severity.ERROR, "caption", box, measured, null);
|
||||
box.set(0, 99);
|
||||
measured.put("widthDots", 1);
|
||||
assertEquals(List.of(1, 2, 3, 4), diagnostic.box());
|
||||
assertEquals(Map.of("widthDots", 902), diagnostic.measured());
|
||||
assertEquals(Map.of(), diagnostic.limit());
|
||||
assertThrows(UnsupportedOperationException.class, () -> diagnostic.box().set(0, 99));
|
||||
assertThrows(UnsupportedOperationException.class, () -> diagnostic.measured().put("widthDots", 1));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** A refusal carries only the error diagnostic with its own code, and its
|
||||
** public message is still the code alone.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aRefusalCarriesOnlyItsOwnErrorDiagnostic()
|
||||
{
|
||||
var detail = new Diagnostic("TEXT_DOES_NOT_FIT", Severity.ERROR, "caption", List.of(24, 131, 764, 56), Map.of("widthDots", 902), Map.of("widthDots", 764));
|
||||
var refusal = new GenerationPorts.RenderException(FailureCode.TEXT_DOES_NOT_FIT, detail);
|
||||
assertEquals(FailureCode.TEXT_DOES_NOT_FIT, refusal.code());
|
||||
assertEquals(detail, refusal.diagnostic());
|
||||
assertEquals("TEXT_DOES_NOT_FIT", refusal.getMessage());
|
||||
assertNull(new GenerationPorts.RenderException(FailureCode.TEXT_DOES_NOT_FIT, null).diagnostic());
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.RenderException(FailureCode.VALUE_MISSING, detail));
|
||||
assertThrows(IllegalArgumentException.class, () -> new GenerationPorts.RenderException(FailureCode.TEXT_DOES_NOT_FIT, new Diagnostic("TEXT_SHRUNK", Severity.INFO, "caption", null, null, null)));
|
||||
assertThrows(NullPointerException.class, () -> new GenerationPorts.RenderException(null, detail));
|
||||
}
|
||||
}
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.documentgeneration;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.TreeSet;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection;
|
||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||
import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryBackendModule;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
/*******************************************************************************
|
||||
** The registration points for the preview, asset and upgrade packages exist and
|
||||
** are called, and add nothing: a host that registers the QBit gets exactly the
|
||||
** tables, processes, choices, widgets and template sections it got before.
|
||||
*******************************************************************************/
|
||||
class GenerationRegistrationHooksTest
|
||||
{
|
||||
/***************************************************************************
|
||||
** The complete default wiring, as the released foundation registers it.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void theProducerRegistersExactlyWhatItDidBeforeTheHooks() throws Exception
|
||||
{
|
||||
QInstance instance = instance();
|
||||
new DocumentGenerationQBitProducer().withQBitConfig(config()).produce(instance);
|
||||
assertEquals(List.of("document_generation_asset", "document_generation_batch", "document_generation_binding", "document_generation_control", "document_generation_event",
|
||||
"document_generation_item", "document_generation_queue", "document_generation_request", "document_generation_revision", "document_generation_stock",
|
||||
"document_generation_template", "document_generation_type", "orders"),
|
||||
List.copyOf(new TreeSet<>(instance.getTables().keySet())), "tables");
|
||||
assertEquals(List.of("document_generation_binding_author_create", "document_generation_queue_document_advance", "document_generation_queue_document_cancel",
|
||||
"document_generation_queue_document_reconcileItem", "document_generation_queue_document_recover", "document_generation_queue_document_status",
|
||||
"document_generation_request_document_download", "document_generation_request_document_reconcile", "document_generation_request_document_reprint",
|
||||
"document_generation_request_document_status", "document_generation_stock_author_create", "document_generation_stock_author_rename",
|
||||
"document_generation_template_author_asset", "document_generation_template_author_catalog", "document_generation_template_author_context",
|
||||
"document_generation_template_author_create", "document_generation_template_author_edit", "document_generation_template_author_naming",
|
||||
"document_generation_template_author_packingSlip", "document_generation_template_author_preview", "document_generation_template_author_publish",
|
||||
"document_generation_template_author_removeAsset", "document_generation_template_author_rename", "document_generation_template_author_replaceAsset",
|
||||
"document_generation_type_author_create", "document_generation_type_author_rename", "orders_document_enqueue", "orders_document_generate"),
|
||||
List.copyOf(new TreeSet<>(instance.getProcesses().keySet())), "processes");
|
||||
assertEquals(List.of("document_generation_asset", "document_generation_context_publications", "document_generation_formats", "document_generation_preview_source",
|
||||
"document_generation_preview_source_orders", "document_generation_retained_assets", "document_generation_revision",
|
||||
"document_generation_source_tables", "document_generation_stock", "document_generation_template", "document_generation_type"),
|
||||
List.copyOf(new TreeSet<>(instance.getPossibleValueSources().keySet())), "possible value sources");
|
||||
assertEquals(List.of(),
|
||||
List.copyOf(new TreeSet<>(instance.getWidgets().keySet())), "widgets");
|
||||
assertEquals(List.of("overview", "layout", "context", "advanced"),
|
||||
instance.getTable(GenerationTables.TEMPLATE).getSections().stream().map(QFieldSection::getName).toList(), "template sections");
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Each registration point, called directly, changes nothing.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void eachRegistrationPointAddsNothingYet() throws Exception
|
||||
{
|
||||
DocumentGenerationQBitConfig config = config();
|
||||
assertEquals(List.of(), GenerationAssetTables.tables(config));
|
||||
QInstance instance = instance();
|
||||
GenerationPreviewProcesses.register(instance, config);
|
||||
GenerationAssetProcesses.register(instance, config);
|
||||
GenerationUpgradeProcesses.register(instance, config);
|
||||
assertEquals(List.of(), List.copyOf(instance.getProcesses().keySet()));
|
||||
assertEquals(List.of("orders"), List.copyOf(instance.getTables().keySet()));
|
||||
QTableMetaData table = new QTableMetaData().withName("template");
|
||||
GenerationPreviewWidget.section(table);
|
||||
assertEquals(new QTableMetaData().withName("template").getSections(), table.getSections());
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** The smallest host: one backend and one source table.
|
||||
***************************************************************************/
|
||||
private static QInstance instance()
|
||||
{
|
||||
QInstance instance = new QInstance();
|
||||
instance.addBackend(new QBackendMetaData().withName("memory").withBackendType(MemoryBackendModule.class));
|
||||
instance.addTable(new QTableMetaData().withName("orders").withBackendName("memory").withPrimaryKeyField("id").withField(new QFieldMetaData("id", QFieldType.INTEGER)));
|
||||
return (instance);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
** Default limits, with one source table so the source choices are registered.
|
||||
***************************************************************************/
|
||||
private static DocumentGenerationQBitConfig config()
|
||||
{
|
||||
return (new DocumentGenerationQBitConfig().withBackendName("memory").withSourceTables(List.of("orders")));
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
<url>https://github.com/Kingsrook/qbit-bom</url>
|
||||
<scm><connection>scm:git:https://github.com/Kingsrook/qbit-bom.git</connection><developerConnection>scm:git:ssh://git@github.com/Kingsrook/qbit-bom.git</developerConnection><url>https://github.com/Kingsrook/qbit-bom</url><tag>HEAD</tag></scm>
|
||||
<licenses><license><name>Apache License, Version 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0</url><distribution>repo</distribution></license></licenses>
|
||||
<properties><revision>1.1.0-RC.2</revision><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><enforcer.skip>true</enforcer.skip><qqq.version>4.1.0-RC.26</qqq.version></properties>
|
||||
<properties><revision>1.4.0-SNAPSHOT</revision><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><enforcer.skip>true</enforcer.skip><qqq.version>4.1.0-RC.26</qqq.version></properties>
|
||||
<!-- Every module of the repository, so one release builds and publishes every GAV. Maven orders the reactor by dependency (the patched OpenHTML
|
||||
module before the renderer; foundation before the bridges). Build a subset with -pl <module> -am. -->
|
||||
<modules>
|
||||
|
||||
+16
-15
@@ -10,18 +10,18 @@ COPY Dockerfile ./
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends gcc g++ libc6-dev make cmake patch \
|
||||
&& sh ./build-zint.sh
|
||||
|
||||
# The renderer's version comes from its parent, the repository reactor POM (../pom.xml). Build from this directory with that file as a named BuildKit context:
|
||||
# docker build --build-context reactor=<repository root> ... (the reactor POM is copied to /pom.xml, where ../pom.xml resolves for /renderer/pom.xml)
|
||||
FROM ${BUILD_IMAGE} AS build
|
||||
COPY --from=reactor pom.xml /pom.xml
|
||||
WORKDIR /renderer
|
||||
COPY vendor/openhtml-1.1.105-qqq-p1 ./vendor/openhtml-1.1.105-qqq-p1
|
||||
RUN sh ./vendor/openhtml-1.1.105-qqq-p1/build-openhtml.sh /renderer/openhtml-build /renderer/.m2
|
||||
COPY pom.xml ./
|
||||
COPY LICENSE NOTICE ./
|
||||
COPY checkstyle ./checkstyle
|
||||
COPY src ./src
|
||||
RUN mvn -B -Dmaven.repo.local=/renderer/.m2 verify
|
||||
# The engine and its libraries are the RELEASED artifacts, resolved at the exact RENDERER_VERSION from the QRun-IO
|
||||
# Gitea Maven registry and Maven Central (Maven checks each registry checksum). No SNAPSHOT, no local build and no
|
||||
# local-cache coordinate: the version is a required build argument with no default.
|
||||
# docker build --build-arg BUILD_IMAGE=... --build-arg JAVA_IMAGE=... --build-arg RENDERER_VERSION=1.0.0 renderer/
|
||||
FROM ${BUILD_IMAGE} AS release
|
||||
ARG RENDERER_VERSION
|
||||
WORKDIR /release
|
||||
COPY release-image/pom.xml ./pom.xml
|
||||
RUN test -n "${RENDERER_VERSION}" && case "${RENDERER_VERSION}" in *SNAPSHOT*|*forge*) echo "RENDERER_VERSION must be a released version" >&2; exit 1;; esac \
|
||||
&& mvn -B -Drenderer.version="${RENDERER_VERSION}" -Dmaven.repo.local=/release/.m2 package \
|
||||
&& mv "target/lib/qbit-document-renderer-${RENDERER_VERSION}.jar" target/renderer.jar \
|
||||
&& test -f target/renderer.jar && ls target/lib
|
||||
|
||||
FROM ${JAVA_IMAGE}
|
||||
# Reviewed runtime family: Temurin 21.0.13+9 on Ubuntu noble. The approved digest
|
||||
@@ -37,8 +37,9 @@ RUN . /etc/os-release \
|
||||
WORKDIR /renderer
|
||||
COPY --from=zint-build /zint-build/build/frontend/zint /usr/local/bin/zint
|
||||
COPY --from=zint-build /zint-build/corresponding-source /usr/share/doc/qqq-zint
|
||||
COPY --from=build /renderer/openhtml-build/corresponding-source /usr/share/doc/qqq-openhtml
|
||||
COPY --from=build /renderer/target/qbit-document-renderer-0.1.0-SNAPSHOT.jar ./renderer.jar
|
||||
COPY --from=build /renderer/target/lib ./lib
|
||||
# LGPL corresponding source for the vendored OpenHTML module that the released openhtmltopdf-pdfbox jar was built from.
|
||||
COPY vendor/openhtml-1.1.105-qqq-p1 /usr/share/doc/qqq-openhtml
|
||||
COPY --from=release /release/target/renderer.jar ./renderer.jar
|
||||
COPY --from=release /release/target/lib ./lib
|
||||
USER 65532:65532
|
||||
ENTRYPOINT ["java", "-Xmx256m", "-XX:ActiveProcessorCount=1", "-Djava.awt.headless=true", "-Dpdfbox.fontcache=/tmp", "-jar", "/renderer/renderer.jar"]
|
||||
@@ -0,0 +1,120 @@
|
||||
# Renderer container images: build from a released version and publish
|
||||
|
||||
Two images, built in this order. Both are built from **released** Maven artifacts (QRun-IO Gitea registry
|
||||
`https://git.kof22.com/api/packages/QRun-IO/maven` and Maven Central); there is no SNAPSHOT, local-cache or reactor
|
||||
input. The version is a required build argument with no default, and the Dockerfiles refuse a `SNAPSHOT` or `forge`
|
||||
version.
|
||||
|
||||
| Image | Dockerfile (context) | Version argument | Contents |
|
||||
|---|---|---|---|
|
||||
| `ghcr.io/gg-engineering/qqq-document-renderer` | `renderer/Dockerfile` (`renderer/`) | `RENDERER_VERSION` (`qbit-document-renderer`) | engine, its libraries, patched Zint built from `renderer/vendor`, Temurin runtime |
|
||||
| `ghcr.io/gg-engineering/qqq-remote-renderer` | `bridges/remote-renderer/Dockerfile` (`bridges/remote-renderer/`) | `TRANSPORT_VERSION` (`qqq-remote-renderer-transport`), `RENDERER_IMAGE` | the mTLS service, on top of the engine image |
|
||||
|
||||
The service image is the one Forge deploys. The adapter (`qbit-document-generation-remote-renderer`) is a client-side
|
||||
library and is not in either image.
|
||||
|
||||
## Version choice
|
||||
|
||||
`1.0.0` is the released, non-RC version and the one `gg-forge` pins for the document-generation family. `1.1.0-RC.1`
|
||||
contains the same `renderer/` and `bridges/remote-renderer/` sources as `1.0.0` (only POM/CI alignment differs), so it
|
||||
adds nothing for the renderer and is a release candidate. Build the version the host library pins.
|
||||
|
||||
## Reviewed base images
|
||||
|
||||
`BUILD_IMAGE` and `JAVA_IMAGE` must be immutable digests. `JAVA_IMAGE` is the reviewed runtime in `DEPLOYMENT.md`.
|
||||
`BUILD_IMAGE` only resolves artifacts; no layer of it reaches the final image.
|
||||
|
||||
```sh
|
||||
BUILD_IMAGE=maven@sha256:99e61abcff91a9b1333463bd8451fb18495d6eba9250ac66a338b518f8278320 # maven:3.9-eclipse-temurin-21
|
||||
JAVA_IMAGE=eclipse-temurin@sha256:db724162e4ff5f71fa0a2815026314d9e5e0e9a139f49be1d4717e6930e93341 # 21.0.13_9-jre-noble (amd64)
|
||||
VERSION=1.0.0
|
||||
```
|
||||
|
||||
## Build, smoke, push
|
||||
|
||||
Disable BuildKit provenance and SBOM attestations so each tag is a single OCI image manifest (the digest the chart pins).
|
||||
|
||||
```sh
|
||||
docker build --provenance=false --sbom=false --build-arg BUILD_IMAGE=$BUILD_IMAGE --build-arg JAVA_IMAGE=$JAVA_IMAGE --build-arg RENDERER_VERSION=$VERSION -t qqq-document-renderer:$VERSION renderer
|
||||
docker build --provenance=false --sbom=false --build-arg BUILD_IMAGE=$BUILD_IMAGE --build-arg RENDERER_IMAGE=qqq-document-renderer:$VERSION --build-arg TRANSPORT_VERSION=$VERSION -t qqq-remote-renderer:$VERSION bridges/remote-renderer
|
||||
|
||||
# Optional scan of the final image
|
||||
docker save qqq-remote-renderer:$VERSION -o svc.tar
|
||||
docker run --rm -v "$PWD/svc.tar:/svc.tar:ro" aquasec/trivy:latest image --input /svc.tar --severity HIGH,CRITICAL --scanners vuln
|
||||
|
||||
# Publish (docker must be logged in to ghcr.io with a token that has write:packages)
|
||||
for n in qqq-document-renderer qqq-remote-renderer; do
|
||||
docker tag $n:$VERSION ghcr.io/gg-engineering/$n:$VERSION
|
||||
docker push ghcr.io/gg-engineering/$n:$VERSION # prints the manifest digest
|
||||
done
|
||||
```
|
||||
|
||||
New GHCR packages are private. Package access is per package and is managed in the GitHub UI (Package settings,
|
||||
Manage access); the REST API cannot grant it. The credential behind `ghcr-pull-secret` must be able to read both packages.
|
||||
|
||||
## Pins for gg-forge-cd
|
||||
|
||||
`sh renderer/image-pins.sh ghcr.io/gg-engineering/qqq-remote-renderer@sha256:<manifest digest>` pulls the published
|
||||
image and prints the `echoRenderer.*` image, classpath and file-hash pins from the image itself. `imageId` is
|
||||
`docker image inspect --format '{{.Id}}'`; with the containerd image store this equals the manifest digest, otherwise
|
||||
it is the config digest. Whatever value is chosen must be the same on Forge and the service.
|
||||
|
||||
Values for `1.0.0` as published (the java, zint and patchset hashes match the 2026-11-05 local qualification; the
|
||||
engine JAR and the OpenHTML JAR differ because they are the released artifacts):
|
||||
|
||||
```yaml
|
||||
echoRenderer:
|
||||
image:
|
||||
repository: ghcr.io/gg-engineering/qqq-remote-renderer
|
||||
digest: sha256:4152a4253e543068bedfd438775ed5327807bdddf679bc5a8e6eab26855e09ea
|
||||
imageId: sha256:4152a4253e543068bedfd438775ed5327807bdddf679bc5a8e6eab26855e09ea
|
||||
classpath:
|
||||
- /renderer/renderer.jar
|
||||
- /renderer/lib/commons-logging-1.4.0.jar
|
||||
- /renderer/lib/fontbox-3.0.8.jar
|
||||
- /renderer/lib/freemarker-2.3.35.jar
|
||||
- /renderer/lib/graphics2d-3.0.1.jar
|
||||
- /renderer/lib/jackson-annotations-2.22.jar
|
||||
- /renderer/lib/jackson-core-2.22.4.jar
|
||||
- /renderer/lib/jackson-databind-2.22.4.jar
|
||||
- /renderer/lib/jsoup-1.23.2.jar
|
||||
- /renderer/lib/okapibarcode-0.5.7.jar
|
||||
- /renderer/lib/openhtmltopdf-core-1.1.105.jar
|
||||
- /renderer/lib/openhtmltopdf-pdfbox-1.0.0.jar
|
||||
- /renderer/lib/pdfbox-3.0.8.jar
|
||||
- /renderer/lib/pdfbox-io-3.0.8.jar
|
||||
- /renderer/lib/slf4j-api-2.0.17.jar
|
||||
- /renderer/lib/slf4j-nop-2.0.17.jar
|
||||
- /renderer/lib/xmpbox-3.0.8.jar
|
||||
fileHashes:
|
||||
/opt/java/openjdk/bin/java: 7afc28801f744050aeba646b20e7314265279f76f9d0273b21a2b66411e1bf6d
|
||||
/renderer/renderer.jar: 0061e1bce631e468b0d7d08735bb764ba2b6d85260c79c144beabad7ffbc19db
|
||||
/usr/local/bin/zint: ea8dc40c917abd7e8ccc824ef0adafed245a2425abbdfac6a30faeb8e4642233
|
||||
/usr/share/doc/qqq-zint/patchset-id.txt: a287946580d5eeb8691ac1d98d6a7f50bf22dcc5dc0ef039d7033e76e15c52d2
|
||||
/renderer/lib/commons-logging-1.4.0.jar: d175dbd751dd782a63bde28c7a039520e971f25e84b79c19b8435edc3603e0dc
|
||||
/renderer/lib/fontbox-3.0.8.jar: a1915c24e3edbe0ecec93896dfbf6d41427810b663ade97bd4e8bae86ec3fdab
|
||||
/renderer/lib/freemarker-2.3.35.jar: 0fac87dddd78f1223139e8ef88e819c7f483c0a3835cdf5982ad5e4576d1d896
|
||||
/renderer/lib/graphics2d-3.0.1.jar: 4849aaa6f536d75dea1b835a71086702216787036f42716adfad438c6e7928c0
|
||||
/renderer/lib/jackson-annotations-2.22.jar: 21ddb598807d3a51a876704eb979d9296e1c6a6f47ab1826ff88c6d6a127a2d0
|
||||
/renderer/lib/jackson-core-2.22.4.jar: 2d30c375cddea9657a1e1ef97547a2694b663b355facb4de53a097782b312d1a
|
||||
/renderer/lib/jackson-databind-2.22.4.jar: d4cbf8947087f305869826801913abdc50735a1fab2074a1993e7bc67ca974a3
|
||||
/renderer/lib/jsoup-1.23.2.jar: e9d8c856856680427f096d156f02a414289985c930998fcb519ce5be39b42003
|
||||
/renderer/lib/okapibarcode-0.5.7.jar: f33b7d17b7040aa1d9c23b1f3bb274e492b786c340b02d9557bcc027ac874355
|
||||
/renderer/lib/openhtmltopdf-core-1.1.105.jar: d5951a8407c3be41108698066e6d67cf952e526be39d4e49b0b9fbcee761de7d
|
||||
/renderer/lib/openhtmltopdf-pdfbox-1.0.0.jar: ec2865bfa45513e63adaa1a3c6387eb6bbd481e6b23f4d68a33cfedfc753cfe8
|
||||
/renderer/lib/pdfbox-3.0.8.jar: 97647cfbde61ebcfc06b4cf8c9b0ffcaaee073396eceb4a7f6836a9b9128903c
|
||||
/renderer/lib/pdfbox-io-3.0.8.jar: 36a0e04001010b4c764857817412b96339930b19755e728959805cc0352061b2
|
||||
/renderer/lib/slf4j-api-2.0.17.jar: 7b751d952061954d5abfed7181c1f645d336091b679891591d63329c622eb832
|
||||
/renderer/lib/slf4j-nop-2.0.17.jar: 3716f83649ec66161a2edefd4f49df34d1dd1c51cdcf941996c6987260f0a829
|
||||
/renderer/lib/xmpbox-3.0.8.jar: f044d2e316e57714a0adf272ad8abf4a863b8978fd17dc5b86dcfa8135469b10
|
||||
```
|
||||
|
||||
Not covered by these pins: `identity.*`, `certificateNamespaces`, TLS identities, and chart switches.
|
||||
|
||||
## What was and was not verified (1.0.0 build)
|
||||
|
||||
* Verified: `renderer` (174) and transport (19) tests and Checkstyle pass on this source (same sources as the `v1.0.0` tag);
|
||||
both images build; the service image runs read-only, non-root, all capabilities dropped, and served CATALOG, PDF
|
||||
(Code128, GS1-128, Zint DotCode) and ZPL renders over a real mutual-TLS handshake with ephemeral certificates.
|
||||
* Not verified: no cluster run, no handshake against Forge, no gVisor or hostile-input qualification (the service is
|
||||
`TRUSTED_LAB` only), no byte-for-byte rebuild of the OpenHTML jar from `vendor/`.
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
# Print the gg-forge-cd echoRenderer.* pins (non-secret) for a PUBLISHED service image, read from the image itself:
|
||||
# sh renderer/image-pins.sh ghcr.io/gg-engineering/qqq-remote-renderer@sha256:<manifest digest>
|
||||
# The classpath is /renderer/renderer.jar followed by /renderer/lib/*.jar in byte order; hashes are SHA256 of the files in the image.
|
||||
set -eu
|
||||
image=${1:?image reference by digest required}
|
||||
case "$image" in *@sha256:*) ;; *) echo 'Reference the image by @sha256: digest' >&2; exit 2;; esac
|
||||
repository=${image%@*}
|
||||
digest=${image#*@}
|
||||
docker pull "$image" >/dev/null
|
||||
image_id=$(docker image inspect "$image" --format '{{.Id}}')
|
||||
echo "echoRenderer:"
|
||||
echo " image:"
|
||||
echo " repository: $repository"
|
||||
echo " digest: $digest"
|
||||
echo " imageId: $image_id"
|
||||
docker run --rm --pull never --network none --user 65532:65532 --entrypoint sh "$image" -c '
|
||||
set -eu
|
||||
echo " classpath:"
|
||||
echo " - /renderer/renderer.jar"
|
||||
for f in $(LC_ALL=C ls /renderer/lib/*.jar); do echo " - $f"; done
|
||||
echo " fileHashes:"
|
||||
for f in /opt/java/openjdk/bin/java /renderer/renderer.jar /usr/local/bin/zint /usr/share/doc/qqq-zint/patchset-id.txt $(LC_ALL=C ls /renderer/lib/*.jar); do
|
||||
printf " %s: %s\n" "$f" "$(sha256sum "$f" | cut -d" " -f1)"
|
||||
done'
|
||||
@@ -36,6 +36,26 @@
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.9.0</version><executions><execution><id>runtime-libraries</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><includeScope>runtime</includeScope><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin>
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.4.2</version><configuration><archive><manifest><mainClass>com.kingsrook.qbits.renderer.RendererMain</mainClass><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest></archive></configuration></plugin>
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.3.1</version><dependencies><dependency><groupId>com.puppycrawl.tools</groupId><artifactId>checkstyle</artifactId><version>10.12.6</version></dependency></dependencies><configuration><configLocation>${project.basedir}/checkstyle/config.xml</configLocation><propertyExpansion>checkstyle.reactor.root=${project.basedir}</propertyExpansion><includeTestSourceDirectory>true</includeTestSourceDirectory><consoleOutput>true</consoleOutput><violationSeverity>warning</violationSeverity><failOnViolation>true</failOnViolation></configuration><executions><execution><phase>validate</phase><goals><goal>check</goal></goals></execution></executions></plugin>
|
||||
<plugin>
|
||||
<!-- Coverage gates. The BUNDLE rule is the measured baseline of the existing renderer, rounded down (2026-11-11: 94.0% of instructions and 91.3% of lines); raise it when coverage rises and
|
||||
never lower it. The PACKAGE and CLASS rules hold new code to 100% line coverage from its first commit; a pattern matches nothing until its package or class exists, so the package that adds
|
||||
it needs no change here. Nothing is excluded: JaCoCo skips only code annotated as generated, and this build defines no such annotation. There is no skip switch. -->
|
||||
<groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.15</version><executions>
|
||||
<execution><goals><goal>prepare-agent</goal></goals></execution>
|
||||
<execution><id>report</id><phase>verify</phase><goals><goal>report</goal></goals></execution>
|
||||
<execution><id>coverage</id><phase>verify</phase><goals><goal>check</goal></goals><configuration><rules>
|
||||
<rule><element>BUNDLE</element><limits>
|
||||
<limit><counter>INSTRUCTION</counter><value>COVEREDRATIO</value><minimum>0.94</minimum></limit>
|
||||
<limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.91</minimum></limit>
|
||||
</limits></rule>
|
||||
<rule><element>PACKAGE</element><includes><include>com.kingsrook.qbits.renderer.scene2</include><include>com.kingsrook.qbits.renderer.scene2.*</include></includes><limits>
|
||||
<limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>1.00</minimum></limit>
|
||||
</limits></rule>
|
||||
<rule><element>CLASS</element><includes><include>com.kingsrook.qbits.renderer.AssetInspector</include><include>com.kingsrook.qbits.renderer.AssetInspector.*</include></includes><limits>
|
||||
<limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>1.00</minimum></limit>
|
||||
</limits></rule>
|
||||
</rules></configuration></execution>
|
||||
</executions></plugin>
|
||||
<plugin>
|
||||
<!-- Publish a self-contained POM: ${revision} is resolved at build time, so a consumer needs no -Drevision -->
|
||||
<groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.7.3</version>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Image-assembly project, not a published module. It resolves the RELEASED renderer engine and its runtime
|
||||
libraries from the QRun-IO Gitea Maven registry (and Maven Central) at one exact version, so the renderer image
|
||||
carries release bytes and not a local build. renderer.version has no default: pass -Drenderer.version=<released>. -->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.kingsrook.qbits</groupId><artifactId>qbit-document-renderer-image</artifactId><version>0</version><packaging>pom</packaging>
|
||||
<repositories>
|
||||
<repository><id>central</id><url>https://repo.maven.apache.org/maven2</url><snapshots><enabled>false</enabled></snapshots></repository>
|
||||
<repository><id>qrun-io</id><url>https://git.kof22.com/api/packages/QRun-IO/maven</url><snapshots><enabled>false</enabled></snapshots><releases><checksumPolicy>fail</checksumPolicy></releases></repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency><groupId>com.kingsrook.qbits</groupId><artifactId>qbit-document-renderer</artifactId><version>${renderer.version}</version></dependency>
|
||||
</dependencies>
|
||||
<build><plugins>
|
||||
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.9.0</version>
|
||||
<executions><execution><id>release-libraries</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals>
|
||||
<configuration><includeScope>runtime</includeScope><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration>
|
||||
</execution></executions></plugin>
|
||||
</plugins></build>
|
||||
</project>
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.renderer;
|
||||
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.SplittableRandom;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Seeded, bounded mutation campaign for a parser of untrusted input. A seed, an
|
||||
** iteration number, the corpus and the dictionary fully determine every input:
|
||||
** there is no clock and no unseeded randomness, so a finding replays exactly.
|
||||
** Targets, limits and the replay command are in `docs/security/fuzzing.md`. The
|
||||
** same class is kept in the test tree of `bridges/renderer`.
|
||||
*******************************************************************************/
|
||||
final class MutationCampaign
|
||||
{
|
||||
static final int MAXIMUM_ITERATIONS = 100_000;
|
||||
static final int MAXIMUM_INPUT_BYTES = 1024 * 1024;
|
||||
|
||||
private static final byte[] INTERESTING = {0, 9, 10, 13, ' ', '"', '\\', '^', '~', '_', ',', '{', '}', '[', ']', '0', '9', '-', (byte) 0x7F, (byte) 0x80, (byte) 0xC0, (byte) 0xFF};
|
||||
|
||||
private final List<byte[]> corpus;
|
||||
private final List<byte[]> dictionary;
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The parser under test. Returning normally means the input was accepted; a
|
||||
** target asserts its own property on what it accepts.
|
||||
***************************************************************************/
|
||||
@FunctionalInterface
|
||||
interface Target
|
||||
{
|
||||
/************************************************************************
|
||||
** Parse one generated input.
|
||||
************************************************************************/
|
||||
void accept(byte[] input) throws Exception;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** An input that was neither accepted nor refused in the declared way, with
|
||||
** the coordinates that regenerate it: `input(seed, iteration)`.
|
||||
***************************************************************************/
|
||||
record Finding(long seed, int iteration, String failure)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** What a campaign saw. A campaign that accepted or refused nothing has not
|
||||
** exercised both sides of the parser, so callers assert on the counts too.
|
||||
***************************************************************************/
|
||||
record Result(int accepted, int refused, List<Finding> findings)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Valid inputs to start from, and tokens of the format to splice in.
|
||||
***************************************************************************/
|
||||
MutationCampaign(List<byte[]> corpus, List<String> dictionary)
|
||||
{
|
||||
if(corpus.isEmpty() || corpus.stream().anyMatch(seedInput -> seedInput.length > MAXIMUM_INPUT_BYTES))
|
||||
{
|
||||
throw new IllegalArgumentException("A campaign needs a corpus of inputs within the input limit.");
|
||||
}
|
||||
this.corpus = corpus.stream().map(byte[]::clone).toList();
|
||||
this.dictionary = dictionary.stream().map(token -> token.getBytes(StandardCharsets.UTF_8)).toList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The seeds for this run: the fixed ones, or only `-Dfuzz.seed=<n>` when a
|
||||
** finding is replayed or a longer campaign is run by hand.
|
||||
***************************************************************************/
|
||||
static long[] seeds(long... fixed)
|
||||
{
|
||||
Long replay = Long.getLong("fuzz.seed");
|
||||
return (replay == null ? fixed : new long[] {replay});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The iteration count for this run: `-Dfuzz.iterations=<n>`, never unbounded.
|
||||
***************************************************************************/
|
||||
static int iterations(int fallback)
|
||||
{
|
||||
int iterations = Integer.getInteger("fuzz.iterations", fallback);
|
||||
if(iterations < 1 || iterations > MAXIMUM_ITERATIONS)
|
||||
{
|
||||
throw new IllegalArgumentException("fuzz.iterations must be between 1 and " + MAXIMUM_ITERATIONS);
|
||||
}
|
||||
return (iterations);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The input of one iteration: a corpus entry with one to four mutations.
|
||||
***************************************************************************/
|
||||
byte[] input(long seed, int iteration)
|
||||
{
|
||||
SplittableRandom random = new SplittableRandom(seed + 0x9E3779B97F4A7C15L * (iteration + 1L));
|
||||
byte[] value = corpus.get(random.nextInt(corpus.size())).clone();
|
||||
int steps = 1 + random.nextInt(4);
|
||||
for(int step = 0; step < steps; step++)
|
||||
{
|
||||
value = mutate(value, random);
|
||||
}
|
||||
return (value.length > MAXIMUM_INPUT_BYTES ? Arrays.copyOf(value, MAXIMUM_INPUT_BYTES) : value);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Run iterations 0 to `iterations - 1`. A thrown failure that `refusal`
|
||||
** recognises is the parser saying no; any other, including a failed assertion
|
||||
** in the target and a stack overflow, is a finding.
|
||||
***************************************************************************/
|
||||
Result run(long seed, int iterations, Target target, Predicate<Throwable> refusal)
|
||||
{
|
||||
if(iterations < 1 || iterations > MAXIMUM_ITERATIONS)
|
||||
{
|
||||
throw new IllegalArgumentException("A campaign runs between 1 and " + MAXIMUM_ITERATIONS + " iterations.");
|
||||
}
|
||||
int accepted = 0;
|
||||
int refused = 0;
|
||||
List<Finding> findings = new ArrayList<>();
|
||||
for(int iteration = 0; iteration < iterations; iteration++)
|
||||
{
|
||||
try
|
||||
{
|
||||
target.accept(input(seed, iteration));
|
||||
accepted++;
|
||||
}
|
||||
catch(Exception | AssertionError | StackOverflowError failure)
|
||||
{
|
||||
if(refusal.test(failure))
|
||||
{
|
||||
refused++;
|
||||
}
|
||||
else
|
||||
{
|
||||
findings.add(new Finding(seed, iteration, failure.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return (new Result(accepted, refused, List.copyOf(findings)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** One structural or byte-level change at a random position.
|
||||
***************************************************************************/
|
||||
private byte[] mutate(byte[] value, SplittableRandom random)
|
||||
{
|
||||
int at = value.length == 0 ? 0 : random.nextInt(value.length);
|
||||
int span = value.length == 0 ? 0 : 1 + random.nextInt(Math.min(16, value.length - at));
|
||||
byte[] noise = new byte[1 + random.nextInt(8)];
|
||||
random.nextBytes(noise);
|
||||
return (switch(random.nextInt(8))
|
||||
{
|
||||
case 0 -> splice(value, at, span, new byte[0]);
|
||||
case 1 -> splice(value, at, 0, Arrays.copyOfRange(value, at, at + span));
|
||||
case 2 -> Arrays.copyOf(value, at);
|
||||
case 3 -> splice(value, at, 0, dictionary.isEmpty() ? noise : dictionary.get(random.nextInt(dictionary.size())));
|
||||
case 4 -> splice(value, at, 0, noise);
|
||||
case 5 -> splice(value, at, Math.min(1, value.length), new byte[] {INTERESTING[random.nextInt(INTERESTING.length)]});
|
||||
case 6 -> splice(value, at, Math.min(1, value.length), new byte[] {noise[0]});
|
||||
default -> splice(value, at, Math.min(1, value.length), value.length == 0 ? noise : new byte[] {(byte) (value[at] ^ (1 << random.nextInt(8)))});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Replace `removed` bytes at `at` with `inserted`.
|
||||
***************************************************************************/
|
||||
private static byte[] splice(byte[] value, int at, int removed, byte[] inserted)
|
||||
{
|
||||
byte[] result = new byte[value.length - removed + inserted.length];
|
||||
System.arraycopy(value, 0, result, 0, at);
|
||||
System.arraycopy(inserted, 0, result, at, inserted.length);
|
||||
System.arraycopy(value, at + removed, result, at + inserted.length, value.length - at - removed);
|
||||
return (result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.renderer;
|
||||
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** The mutation harness is deterministic and reports what it should, and one
|
||||
** bounded campaign runs in the normal test phase over the version 1 scene
|
||||
** parser. Seeds, limits and the replay command: `docs/security/fuzzing.md`.
|
||||
*******************************************************************************/
|
||||
class MutationCampaignTest
|
||||
{
|
||||
private static final long[] SEEDS = {20261111L, 7919L};
|
||||
private static final int ITERATIONS = 20_000;
|
||||
private static final Set<String> ELEMENTS = Set.of("text", "rasterText", "box", "image", "barcode");
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// a second, differently configured parser, so the acceptance check does not reuse the target //
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
private static final ObjectMapper INDEPENDENT = new ObjectMapper();
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** A seed and an iteration name one input, on every run and every machine.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aSeedAndAnIterationAlwaysGiveTheSameInput()
|
||||
{
|
||||
MutationCampaign campaign = new MutationCampaign(List.of("^XA^FO10,20^GB30,40,2^FS^XZ".getBytes(StandardCharsets.US_ASCII)), List.of("^FO", "^GB"));
|
||||
MutationCampaign again = new MutationCampaign(List.of("^XA^FO10,20^GB30,40,2^FS^XZ".getBytes(StandardCharsets.US_ASCII)), List.of("^FO", "^GB"));
|
||||
Set<String> distinct = new java.util.HashSet<>();
|
||||
for(int iteration = 0; iteration < 200; iteration++)
|
||||
{
|
||||
byte[] input = campaign.input(42L, iteration);
|
||||
assertArrayEquals(input, again.input(42L, iteration));
|
||||
assertTrue(input.length <= MutationCampaign.MAXIMUM_INPUT_BYTES);
|
||||
distinct.add(Wire.sha256(input));
|
||||
}
|
||||
assertTrue(distinct.size() > 100, "mutations should rarely repeat: " + distinct.size());
|
||||
assertNotEquals(Wire.sha256(campaign.input(42L, 0)), Wire.sha256(campaign.input(43L, 0)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The harness fails when it should: a crash and an unsafe acceptance are both
|
||||
** findings, each carrying the coordinates that regenerate its input.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void aCrashAndAnUnsafeAcceptanceAreFindingsThatReplay()
|
||||
{
|
||||
MutationCampaign campaign = new MutationCampaign(List.of("0123456789".getBytes(StandardCharsets.US_ASCII)), List.of());
|
||||
MutationCampaign.Result result = campaign.run(42L, 300, input ->
|
||||
{
|
||||
if(input.length % 3 == 0)
|
||||
{
|
||||
throw new IllegalArgumentException("REFUSED");
|
||||
}
|
||||
if(input.length % 3 == 1)
|
||||
{
|
||||
throw new IllegalStateException("crash");
|
||||
}
|
||||
assertTrue(input.length < 11, "accepted an input it should have refused");
|
||||
}, IllegalArgumentException.class::isInstance);
|
||||
assertEquals(300, result.accepted() + result.refused() + result.findings().size());
|
||||
assertTrue(result.accepted() > 0 && result.refused() > 0);
|
||||
assertTrue(result.findings().stream().anyMatch(finding -> finding.failure().startsWith("java.lang.IllegalStateException")));
|
||||
assertTrue(result.findings().stream().anyMatch(finding -> finding.failure().contains("AssertionFailedError")));
|
||||
for(MutationCampaign.Finding finding : result.findings())
|
||||
{
|
||||
int length = campaign.input(finding.seed(), finding.iteration()).length;
|
||||
assertTrue(length % 3 == 1 || (length % 3 == 2 && length >= 11), finding.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** A campaign is always bounded and always has something to mutate.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void campaignsAreBounded()
|
||||
{
|
||||
MutationCampaign campaign = new MutationCampaign(List.of(new byte[0]), List.of());
|
||||
assertThrows(IllegalArgumentException.class, () -> campaign.run(1L, 0, input -> {}, failure -> true));
|
||||
assertThrows(IllegalArgumentException.class, () -> campaign.run(1L, MutationCampaign.MAXIMUM_ITERATIONS + 1, input -> {}, failure -> true));
|
||||
assertThrows(IllegalArgumentException.class, () -> new MutationCampaign(List.of(), List.of()));
|
||||
assertThrows(IllegalArgumentException.class, () -> new MutationCampaign(List.of(new byte[MutationCampaign.MAXIMUM_INPUT_BYTES + 1]), List.of()));
|
||||
assertEquals(50, campaign.run(1L, 50, input -> {}, failure -> false).accepted());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Property: whatever the version 1 scene parser accepts is, read by a second
|
||||
** parser, a version 1 scene of known elements within the element limit. Every
|
||||
** other input is refused with an exception (the worker turns any exception
|
||||
** into its opaque error answer); a stack overflow would be a finding.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void theVersionOneSceneParserAcceptsOnlyVersionOneScenes() throws Exception
|
||||
{
|
||||
List<byte[]> corpus = new ArrayList<>();
|
||||
for(String name : List.of("text-font0-203", "box-203", "barcode-scale-203", "barcode-fit-matrix-203", "barcode-fit-linear-203"))
|
||||
{
|
||||
try(InputStream stream = MutationCampaignTest.class.getResourceAsStream("/compat-v1/cases/" + name + ".json"))
|
||||
{
|
||||
corpus.add(Wire.JSON.writeValueAsBytes(Wire.JSON.readTree(stream).get("scene")));
|
||||
}
|
||||
}
|
||||
MutationCampaign campaign = new MutationCampaign(corpus, List.of("\"type\"", "\"barcode\"", "\"rasterText\"", "\"fit\"", "\"valuePath\"", "\"symbologyPath\"", "\"allowedSymbologies\"",
|
||||
"\"qqq-zpl-scene/1\"", "\"qqq-zpl-scene/2\"", "{", "}", "[", "]", ":", ",", "99999999999", "-1", "null", "\"/\"", "\\u0000"));
|
||||
int iterations = MutationCampaign.iterations(ITERATIONS);
|
||||
for(long seed : MutationCampaign.seeds(SEEDS))
|
||||
{
|
||||
MutationCampaign.Result result = campaign.run(seed, iterations, MutationCampaignTest::validateScene, Exception.class::isInstance);
|
||||
assertEquals(List.of(), result.findings(), "replay with -Dfuzz.seed=" + seed + " -Dfuzz.iterations=" + iterations);
|
||||
assertFalse(result.accepted() == 0 || result.refused() == 0, "the campaign must reach both acceptance and refusal: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The target: static validation of one scene on a stock all corpus scenes fit.
|
||||
***************************************************************************/
|
||||
private static void validateScene(byte[] scene) throws Exception
|
||||
{
|
||||
String source = new String(scene, StandardCharsets.UTF_8);
|
||||
ObjectNode request = Wire.JSON.createObjectNode();
|
||||
request.put("protocol", Wire.PROTOCOL).put("requestId", "mutation-campaign").put("operation", "VALIDATE").put("format", "ZPL").put("maximumBytes", 1024 * 1024).put("source", source);
|
||||
request.set("stock", Wire.JSON.valueToTree(Map.of("widthMicrons", 76200, "heightMicrons", 152400, "topMicrons", 2000, "rightMicrons", 2000, "bottomMicrons", 2000, "leftMicrons", 2000, "dpi", 203)));
|
||||
request.putObject("context");
|
||||
request.putArray("assets");
|
||||
ZplRenderer.validate(new RenderInput(request));
|
||||
JsonNode accepted = INDEPENDENT.readTree(source);
|
||||
assertEquals("qqq-zpl-scene/1", accepted.path("schema").textValue());
|
||||
assertTrue(accepted.path("elements").isArray() && accepted.path("elements").size() <= 1000);
|
||||
for(JsonNode element : accepted.path("elements"))
|
||||
{
|
||||
assertTrue(ELEMENTS.contains(element.path("type").textValue()), () -> "accepted element type " + element.path("type"));
|
||||
}
|
||||
}
|
||||
}
|
||||
+229
@@ -0,0 +1,229 @@
|
||||
/*
|
||||
* QQQ - Low-code Application Framework for Engineers.
|
||||
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||
* contact@kingsrook.com
|
||||
* https://github.com/Kingsrook/
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.kingsrook.qbits.renderer;
|
||||
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Base64;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
import java.util.stream.Stream;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
** Version 1 scenes are frozen. Every scene of the corpus in `compat-v1` must
|
||||
** render to exactly the bytes the released renderer (tag `v1.1.0-RC.2`) produced
|
||||
** for it. The stored bytes are never regenerated: a difference here is a change
|
||||
** to labels that are already printing, and is fixed in the code, not the corpus.
|
||||
*******************************************************************************/
|
||||
class ZplSceneOneCompatibilityTest
|
||||
{
|
||||
private static final String ROOT = "/compat-v1/";
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// every property a version 1 element reads, by element type; the corpus must use each one //
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
private static final Map<String, Set<String>> OPTIONS = Map.of(
|
||||
"text", Set.of("x", "y", "width", "height", "value", "valuePath"),
|
||||
"rasterText", Set.of("x", "y", "fontAsset", "fontSize", "width", "height", "rotation", "align", "lineHeight", "threshold", "value", "valuePath"),
|
||||
"box", Set.of("x", "y", "width", "height", "thickness"),
|
||||
"image", Set.of("x", "y", "asset"),
|
||||
"barcode", Set.of("x", "y", "symbology", "symbologyPath", "allowedSymbologies", "value", "valuePath", "scale", "quiet", "options", "payloadEncoding",
|
||||
"fit", "scannerSymbologyPath", "aimIdentifierPath"));
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Each case file is one render request: a stock, a context, assets and a scene.
|
||||
***************************************************************************/
|
||||
static List<String> cases() throws Exception
|
||||
{
|
||||
try(Stream<Path> files = Files.list(Path.of(ZplSceneOneCompatibilityTest.class.getResource(ROOT + "cases").toURI())))
|
||||
{
|
||||
return (files.map(file -> file.getFileName().toString()).filter(name -> name.endsWith(".json")).map(name -> name.substring(0, name.length() - 5)).sorted().toList());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The released bytes, or the first position at which this build differs. What
|
||||
** this build produced is left in `target/compat-v1-actual` for inspection.
|
||||
***************************************************************************/
|
||||
@ParameterizedTest(name = "{0}")
|
||||
@MethodSource("cases")
|
||||
void rendersExactlyTheReleasedBytes(String name) throws Exception
|
||||
{
|
||||
byte[] actual = render(name);
|
||||
byte[] expected = resource("zpl/" + name + ".zpl");
|
||||
if(expected == null || !Arrays.equals(expected, actual))
|
||||
{
|
||||
Path directory = Files.createDirectories(Path.of("target", "compat-v1-actual"));
|
||||
Files.write(directory.resolve(name + ".zpl"), actual);
|
||||
}
|
||||
assertNotNull(expected, "No released bytes are stored for " + name);
|
||||
int difference = Arrays.mismatch(expected, actual);
|
||||
if(difference >= 0)
|
||||
{
|
||||
fail("Version 1 scene " + name + " no longer renders the released bytes: first difference at byte " + difference
|
||||
+ " (released " + expected.length + " bytes, now " + actual.length + ")");
|
||||
}
|
||||
assertEquals(manifest().get(name), Wire.sha256(actual));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The manifest names exactly the cases, and each stored file has its hash, so
|
||||
** a case cannot be dropped or its bytes edited without this failing.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void manifestNamesExactlyTheCasesAndTheirStoredBytes() throws Exception
|
||||
{
|
||||
Map<String, String> manifest = manifest();
|
||||
assertEquals(cases(), List.copyOf(manifest.keySet()));
|
||||
assertFalse(manifest.isEmpty());
|
||||
for(Map.Entry<String, String> entry : manifest.entrySet())
|
||||
{
|
||||
byte[] stored = resource("zpl/" + entry.getKey() + ".zpl");
|
||||
assertNotNull(stored, entry.getKey());
|
||||
assertEquals(entry.getValue(), Wire.sha256(stored), entry.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The corpus is only a proof if it reaches every element type and every
|
||||
** property version 1 reads, at each resolution the renderer accepts.
|
||||
***************************************************************************/
|
||||
@Test
|
||||
void corpusUsesEveryVersionOneElementOptionAndResolution() throws Exception
|
||||
{
|
||||
Map<String, Set<String>> used = new TreeMap<>();
|
||||
Set<Integer> resolutions = new TreeSet<>();
|
||||
for(String name : cases())
|
||||
{
|
||||
JsonNode definition = definition(name);
|
||||
resolutions.add(definition.path("stock").path("dpi").intValue());
|
||||
assertEquals("qqq-zpl-scene/1", definition.path("scene").path("schema").textValue(), name);
|
||||
for(JsonNode element : definition.path("scene").path("elements"))
|
||||
{
|
||||
Set<String> properties = used.computeIfAbsent(element.path("type").textValue(), type -> new HashSet<>());
|
||||
element.fieldNames().forEachRemaining(properties::add);
|
||||
}
|
||||
}
|
||||
assertEquals(Set.of(203, 300, 600), resolutions);
|
||||
assertEquals(OPTIONS.keySet(), used.keySet());
|
||||
for(Map.Entry<String, Set<String>> entry : OPTIONS.entrySet())
|
||||
{
|
||||
assertTrue(used.get(entry.getKey()).containsAll(entry.getValue()), () -> entry.getKey() + " is missing one of " + entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Render through the public protocol entry point, as the isolated worker does.
|
||||
***************************************************************************/
|
||||
private static byte[] render(String name) throws Exception
|
||||
{
|
||||
JsonNode definition = definition(name);
|
||||
ObjectNode request = Wire.JSON.createObjectNode();
|
||||
request.put("protocol", Wire.PROTOCOL).put("requestId", "compat-v1-" + name).put("operation", "RENDER").put("format", "ZPL").put("maximumBytes", 8 * 1024 * 1024);
|
||||
request.set("stock", definition.get("stock"));
|
||||
request.set("context", definition.get("context"));
|
||||
request.put("source", Wire.JSON.writeValueAsString(definition.get("scene")));
|
||||
var assets = request.putArray("assets");
|
||||
for(JsonNode declared : definition.path("assets"))
|
||||
{
|
||||
byte[] bytes;
|
||||
try(InputStream stream = ZplSceneOneCompatibilityTest.class.getResourceAsStream(declared.path("resource").textValue()))
|
||||
{
|
||||
bytes = java.util.Objects.requireNonNull(stream, declared.path("resource").textValue()).readAllBytes();
|
||||
}
|
||||
ObjectNode asset = ((ObjectNode) declared.deepCopy()).put("base64", Base64.getEncoder().encodeToString(bytes)).put("sha256", Wire.sha256(bytes));
|
||||
asset.remove("resource");
|
||||
assets.add(asset);
|
||||
}
|
||||
Map<String, Object> response = RendererMain.process(request);
|
||||
assertEquals("OK", response.get("outcome"), name);
|
||||
return (Base64.getDecoder().decode((String) response.get("base64")));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** One case definition.
|
||||
***************************************************************************/
|
||||
private static JsonNode definition(String name) throws Exception
|
||||
{
|
||||
return (Wire.JSON.readTree(java.util.Objects.requireNonNull(resource("cases/" + name + ".json"), name)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** `SHA256SUMS` in the form `sha256sum` writes and checks: hash, two spaces, path.
|
||||
***************************************************************************/
|
||||
private static Map<String, String> manifest() throws Exception
|
||||
{
|
||||
Map<String, String> hashes = new TreeMap<>();
|
||||
byte[] sums = resource("SHA256SUMS");
|
||||
for(String line : sums == null ? new String[0] : new String(sums, StandardCharsets.US_ASCII).split("\n"))
|
||||
{
|
||||
assertTrue(line.matches("[0-9a-f]{64} zpl/[a-z0-9-]+\\.zpl"), line);
|
||||
hashes.put(line.substring(70, line.length() - 4), line.substring(0, 64));
|
||||
}
|
||||
return (hashes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** Corpus bytes, or null when the corpus has no such file.
|
||||
***************************************************************************/
|
||||
private static byte[] resource(String path) throws Exception
|
||||
{
|
||||
try(InputStream stream = ZplSceneOneCompatibilityTest.class.getResourceAsStream(ROOT + path))
|
||||
{
|
||||
return (stream == null ? null : stream.readAllBytes());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
# Version 1 compatibility corpus
|
||||
|
||||
Scenes with schema `qqq-zpl-scene/1` are frozen: a label that prints today must print the same bytes after any
|
||||
later change. This directory holds 42 render requests and the exact ZPL the released renderer produced for each.
|
||||
|
||||
| Path | Content |
|
||||
|---|---|
|
||||
| `cases/<name>.json` | One render request: `stock` (with its `dpi`), `context`, `assets` and the `scene`. |
|
||||
| `zpl/<name>.zpl` | The bytes the released renderer returned for that request. |
|
||||
| `SHA256SUMS` | The SHA-256 of every stored output, in the form `sha256sum -c` reads. |
|
||||
| `assets/test-mark.png` | A synthetic 48 x 24 image: a frame, a grey ramp and a transparency ramp. |
|
||||
|
||||
Fonts come from the existing test resources (`/fonts/Abel-Regular.ttf`, `/fonts/jetbrains-mono/`).
|
||||
|
||||
## What it covers
|
||||
|
||||
- The shapes Forge publishes, at the 203 and 300 dpi its printers report: the plain Echo label (dynamic symbology
|
||||
from an allowlist, fitted), the scanner-fidelity label (scanner label and AIM identifier), the compact GS1-128
|
||||
label (`fit` and `quiet`, with the human-readable line as `text` in font 0) and the centred GS1-128 document
|
||||
(`rasterText` with `fontAsset`; its barcode carries an `align` key, which version 1 ignores).
|
||||
- The examples of `renderer/README.md` and `renderer/BARCODE-FIT.md`, verbatim.
|
||||
- One scene per element type and option at 203, 300 and 600 dpi: `text`, `box`, `image`, `rasterText` (alignment,
|
||||
rotation, line height, threshold, wrapping, three faces) and `barcode` (scale, options, bound values, and all 13
|
||||
fit-qualified symbologies).
|
||||
|
||||
Every value is synthetic (`TEST-0001`, `(01)00012345678905(11)260101(21)TEST0001`, `example.invalid`).
|
||||
|
||||
Not covered, because they need the native Zint provider that exists only in the renderer image: `payloadEncoding`
|
||||
`BASE64` and the Zint-backed symbologies. The image qualifications cover those.
|
||||
|
||||
## Where the bytes came from
|
||||
|
||||
They were produced by the source of tag `v1.1.0-RC.2` (commit `e9ffba484e8d97f9853cb071cdac14f3bfd7acda`,
|
||||
renderer `qqq-renderer-0.1.0`, catalog `qqq-barcodes-9`), not by the branch that added this directory:
|
||||
`ZplSceneOneCompatibilityTest` and `cases/` were copied into a checkout of that tag and run there with no stored
|
||||
outputs. The test fails in that state and leaves what it rendered in `target/compat-v1-actual`; those files are
|
||||
`zpl/`. The run was on Temurin 21.0.12 on Windows, and the same test then passed against the same tag on Temurin
|
||||
21.0.9 on Linux (the CI image), so the `rasterText` pixels do not depend on either platform.
|
||||
|
||||
## Rules
|
||||
|
||||
- Never regenerate `zpl/` or `SHA256SUMS`, and never edit a case. If `ZplSceneOneCompatibilityTest` fails, the
|
||||
code changed what a version 1 scene prints; fix the code. The first differing byte is in the failure message
|
||||
and the new bytes are in `renderer/target/compat-v1-actual`.
|
||||
- A new case may be added only with bytes produced the same way, from a tag that is in production.
|
||||
- `bridges/renderer` reads this directory in place (its own `ZplSceneOneCompatibilityTest` proves each stored
|
||||
output passes `ZplOutputPolicy`), so there is one copy.
|
||||
@@ -0,0 +1,42 @@
|
||||
ff0e556b910d9cf3a62cec78f388788c7a466942d8d43462d6cc8ff93d8a961c zpl/barcode-fit-linear-203.zpl
|
||||
29f10d73be75d3c50d6f4b6a034a5d3819173593effa13e043d62f8a9b49e342 zpl/barcode-fit-linear-300.zpl
|
||||
6ba73d75d91b5b7a204b2d8cc0c691438a0608872a0904ba8aa3fc3542c4a04e zpl/barcode-fit-linear-600.zpl
|
||||
7c38e5f1d3816375b002f34a97473d543b57f538d91a6b93aec56f7fad96fc8c zpl/barcode-fit-matrix-203.zpl
|
||||
dfaecb170fabd6a9d0214075f24f11c374edfd36a657e7d1acc0fe9fb480b365 zpl/barcode-fit-matrix-300.zpl
|
||||
c2f397bc2503f087b342038c455f7aff9f279139dabce79f12d2e03f3a8ed242 zpl/barcode-fit-matrix-600.zpl
|
||||
bde75c5c99ef064df4159385686c0a068ae0a82310a31b7703f16d8473d25f26 zpl/barcode-scale-203.zpl
|
||||
02b16ec29d0cb9452cc787ca970181e53f6d88a5fa495aa16b6e131309c02b5f zpl/barcode-scale-300.zpl
|
||||
7ce8d401428ff1c1ccf7587d1b36e5810a0c8762ffb5d217cf7e787b3a4d5806 zpl/barcode-scale-600.zpl
|
||||
d24c7334422a6268566f6fc5826ed1a6f746a3c06fee15f251eabae93b15b0c5 zpl/box-203.zpl
|
||||
97ee29fa76f9359351101c58aa9a72ca81b5e355cc609e42d1780af817f37562 zpl/box-300.zpl
|
||||
d6874a29d5459c3d2f4b027108c9829cb9b0d5bdff7878fc8c4a5da8c55d5c72 zpl/box-600.zpl
|
||||
89fe7d52804801fae99e53bfabada63eb08f85222f599abaa4bb4aea26869f64 zpl/forge-gs1-compact-203.zpl
|
||||
5ac73d061da31c6a45da37e91eecb092803a5036cd8e39b96af26f109e2310f9 zpl/forge-gs1-compact-300.zpl
|
||||
90065471a443d35c30a9426f9d0ac62773114ff57d484bea373b444e8ef3ee9a zpl/forge-gs1-raster-203.zpl
|
||||
205a0ac35ce6df151b8c7feac081e8b1cab3fbdc8ca6a685e601a2782ddf3869 zpl/forge-gs1-raster-300.zpl
|
||||
a626755d7fe9499b5b9b2dbb4bc64bdb60ba5857f267115b4762ab32276e8b30 zpl/forge-plain-code128-203.zpl
|
||||
40552f1f04f58b67d69464e1b58a2ac3eeda98ac5af6d1a96a8b1b128637add5 zpl/forge-plain-code128-300.zpl
|
||||
8d5391528d92f8afe8d6fb62df9f9ce3b6baa6bf3bfdf4133a7cfe60399b74e1 zpl/forge-plain-qr-203.zpl
|
||||
a626755d7fe9499b5b9b2dbb4bc64bdb60ba5857f267115b4762ab32276e8b30 zpl/forge-scanner-code128-203.zpl
|
||||
b5ea4f928c670ee06027b05406d45ab829c29d1676b05ca34728b350dfa60582 zpl/forge-scanner-ean13-203.zpl
|
||||
b2b41c26316c843ef2156179a57e145c57f5006bcdc8f1497d2d263c743b948d zpl/forge-scanner-ean13-300.zpl
|
||||
e45cb088bd56c470aa2ad0f7904e7cf97a75ada21b2cf0075679accc0a0456b6 zpl/image-203.zpl
|
||||
b17fdf526032eb4fe6892f7737cb6c7a1069305c4ff85a9a4d902ebf29a1d778 zpl/image-300.zpl
|
||||
0ae0dde4208c8696bfd36dd427e8f7735dbce3961572b6225f5cf4868ae55b2c zpl/image-600.zpl
|
||||
0b100f9a37a78ceede0dbaaec9ba1e9bbf352b7675bd8900ede3faa5dc855ce7 zpl/raster-text-layout-203.zpl
|
||||
ba4a8eea59afcfd67dbcf2982f70cc3b7083dd3259c439793d79f4cae78f6483 zpl/raster-text-layout-300.zpl
|
||||
d7682aecebdbcc80fd2ade6cb2108cccd991fe05af35a28554111b00cdceb442 zpl/raster-text-layout-600.zpl
|
||||
44231f071dc6131a13d9624454dcb796a7355d167040dfdc68ca7acefb12e06d zpl/raster-text-rotation-203.zpl
|
||||
2a3a8a2529279a2ffe79771ea2f18aa66b08357a5ef5e49d52eaba60d3b2e781 zpl/raster-text-rotation-300.zpl
|
||||
5e68955f87763277798413c26b9486f4ef5a60f3458c734612acbe6e9de813c3 zpl/raster-text-rotation-600.zpl
|
||||
d4a61011f45eb4057dcbd5e2f7ee44e911b1c6ba9bba512a94ed45906143cce8 zpl/readme-barcode-fit-203.zpl
|
||||
fc4fe98d71292b4cedb2bc15343c6b0ae1e71f3ad606422cd197429cf7d8658e zpl/readme-barcode-fit-300.zpl
|
||||
4ff078a28668055a8a480fe909185c13977fdb665ab5d2acac882267e72a6fea zpl/readme-raster-text-203.zpl
|
||||
850b76e86ca32fbee963052b3df69b431f021f76080b192b2954e11c9efde84a zpl/readme-raster-text-300.zpl
|
||||
d094fd9bebc3d2131b7df1a5cb5b0fafcaefb226045f42985b91261e39e27ca4 zpl/readme-raster-text-600.zpl
|
||||
f4ce3ef8723bc893784b1dbcb93ff831f22bdc0959b9500b0644a9ecdf9ce781 zpl/readme-zpl-scene-203.zpl
|
||||
198762809d8d21e49c71dbcfcefb2f61315e5c182b0992ed136b10bb3968b5b0 zpl/readme-zpl-scene-300.zpl
|
||||
48271003bc87ec1c14f53ccdb6810f810d08b63079169258915080a0f89a0688 zpl/readme-zpl-scene-600.zpl
|
||||
2fd2eb3b5c9d761946b5c74656fc88838ed6f79848ea5eb296171539e25cd2e6 zpl/text-font0-203.zpl
|
||||
dbd3697539e011d6c9d4c34185b849184fc22d5b836819df200d98478720ce06 zpl/text-font0-300.zpl
|
||||
9ac70a9aa2bb8a5d41c13143617d338f1c3a50b0fea0f01d5054869c0bc3f31c zpl/text-font0-600.zpl
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 333 B |
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"description": "Every fit-qualified linear symbology in a fixed physical box.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 2000,
|
||||
"rightMicrons": 2000,
|
||||
"bottomMicrons": 2000,
|
||||
"leftMicrons": 2000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 16,
|
||||
"symbology": "code128",
|
||||
"value": "TEST-0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 144,
|
||||
"symbology": "code39",
|
||||
"value": "TEST 0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 272,
|
||||
"symbology": "code93",
|
||||
"value": "TEST-0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 400,
|
||||
"symbology": "itf",
|
||||
"value": "0012345678",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 528,
|
||||
"symbology": "gs1-128",
|
||||
"value": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 656,
|
||||
"symbology": "ean13",
|
||||
"value": "001234567890",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 784,
|
||||
"symbology": "ean8",
|
||||
"value": "0012345",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 912,
|
||||
"symbology": "upca",
|
||||
"value": "01234567890",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 1040,
|
||||
"symbology": "upce",
|
||||
"value": "0123456",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"description": "Every fit-qualified linear symbology in a fixed physical box.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 2000,
|
||||
"rightMicrons": 2000,
|
||||
"bottomMicrons": 2000,
|
||||
"leftMicrons": 2000,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 24,
|
||||
"symbology": "code128",
|
||||
"value": "TEST-0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 213,
|
||||
"symbology": "code39",
|
||||
"value": "TEST 0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 402,
|
||||
"symbology": "code93",
|
||||
"value": "TEST-0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 591,
|
||||
"symbology": "itf",
|
||||
"value": "0012345678",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 780,
|
||||
"symbology": "gs1-128",
|
||||
"value": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 969,
|
||||
"symbology": "ean13",
|
||||
"value": "001234567890",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 1158,
|
||||
"symbology": "ean8",
|
||||
"value": "0012345",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 1347,
|
||||
"symbology": "upca",
|
||||
"value": "01234567890",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 1536,
|
||||
"symbology": "upce",
|
||||
"value": "0123456",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"description": "Every fit-qualified linear symbology in a fixed physical box.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 2000,
|
||||
"rightMicrons": 2000,
|
||||
"bottomMicrons": 2000,
|
||||
"leftMicrons": 2000,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 48,
|
||||
"symbology": "code128",
|
||||
"value": "TEST-0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 426,
|
||||
"symbology": "code39",
|
||||
"value": "TEST 0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 804,
|
||||
"symbology": "code93",
|
||||
"value": "TEST-0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 1182,
|
||||
"symbology": "itf",
|
||||
"value": "0012345678",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 1560,
|
||||
"symbology": "gs1-128",
|
||||
"value": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 1938,
|
||||
"symbology": "ean13",
|
||||
"value": "001234567890",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 2316,
|
||||
"symbology": "ean8",
|
||||
"value": "0012345",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 2694,
|
||||
"symbology": "upca",
|
||||
"value": "01234567890",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 3072,
|
||||
"symbology": "upce",
|
||||
"value": "0123456",
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 60000,
|
||||
"heightMicrons": 12000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"description": "Every fit-qualified matrix and stacked symbology in a fixed physical box, with the minimum quiet zone.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 2000,
|
||||
"rightMicrons": 2000,
|
||||
"bottomMicrons": 2000,
|
||||
"leftMicrons": 2000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"value": "TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 16,
|
||||
"symbology": "qr",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 160,
|
||||
"symbology": "datamatrix",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 304,
|
||||
"symbology": "aztec",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 16,
|
||||
"y": 448,
|
||||
"symbology": "pdf417",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 40000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"description": "Every fit-qualified matrix and stacked symbology in a fixed physical box, with the minimum quiet zone.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 2000,
|
||||
"rightMicrons": 2000,
|
||||
"bottomMicrons": 2000,
|
||||
"leftMicrons": 2000,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"value": "TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 24,
|
||||
"symbology": "qr",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 237,
|
||||
"symbology": "datamatrix",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 450,
|
||||
"symbology": "aztec",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 24,
|
||||
"y": 663,
|
||||
"symbology": "pdf417",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 40000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"description": "Every fit-qualified matrix and stacked symbology in a fixed physical box, with the minimum quiet zone.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 2000,
|
||||
"rightMicrons": 2000,
|
||||
"bottomMicrons": 2000,
|
||||
"leftMicrons": 2000,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"value": "TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 48,
|
||||
"symbology": "qr",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 474,
|
||||
"symbology": "datamatrix",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 900,
|
||||
"symbology": "aztec",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 15000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 48,
|
||||
"y": 1326,
|
||||
"symbology": "pdf417",
|
||||
"valuePath": "/record/value",
|
||||
"quiet": 4,
|
||||
"fit": {
|
||||
"widthMicrons": 40000,
|
||||
"heightMicrons": 15000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"description": "Barcodes at an explicit scale: typed options, the explicit UTF8 payload encoding, a bound value and a matrix symbology.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"url": "https://example.invalid/test/0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"symbology": "code128",
|
||||
"scale": 2,
|
||||
"quiet": 10,
|
||||
"value": "TEST-0001",
|
||||
"options": {
|
||||
"barHeight": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 20,
|
||||
"y": 130,
|
||||
"symbology": "code39",
|
||||
"scale": 1,
|
||||
"quiet": 10,
|
||||
"value": "TEST 0001",
|
||||
"payloadEncoding": "UTF8"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 20,
|
||||
"y": 230,
|
||||
"symbology": "qr",
|
||||
"scale": 3,
|
||||
"quiet": 4,
|
||||
"valuePath": "/record/url"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 200,
|
||||
"y": 230,
|
||||
"symbology": "datamatrix",
|
||||
"scale": 4,
|
||||
"quiet": 4,
|
||||
"value": "TEST-0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"description": "Barcodes at an explicit scale: typed options, the explicit UTF8 payload encoding, a bound value and a matrix symbology.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"url": "https://example.invalid/test/0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 30,
|
||||
"y": 30,
|
||||
"symbology": "code128",
|
||||
"scale": 3,
|
||||
"quiet": 10,
|
||||
"value": "TEST-0001",
|
||||
"options": {
|
||||
"barHeight": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 30,
|
||||
"y": 192,
|
||||
"symbology": "code39",
|
||||
"scale": 1,
|
||||
"quiet": 10,
|
||||
"value": "TEST 0001",
|
||||
"payloadEncoding": "UTF8"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 30,
|
||||
"y": 340,
|
||||
"symbology": "qr",
|
||||
"scale": 4,
|
||||
"quiet": 4,
|
||||
"valuePath": "/record/url"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 296,
|
||||
"y": 340,
|
||||
"symbology": "datamatrix",
|
||||
"scale": 6,
|
||||
"quiet": 4,
|
||||
"value": "TEST-0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"description": "Barcodes at an explicit scale: typed options, the explicit UTF8 payload encoding, a bound value and a matrix symbology.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"url": "https://example.invalid/test/0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 59,
|
||||
"y": 59,
|
||||
"symbology": "code128",
|
||||
"scale": 6,
|
||||
"quiet": 10,
|
||||
"value": "TEST-0001",
|
||||
"options": {
|
||||
"barHeight": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 59,
|
||||
"y": 384,
|
||||
"symbology": "code39",
|
||||
"scale": 3,
|
||||
"quiet": 10,
|
||||
"value": "TEST 0001",
|
||||
"payloadEncoding": "UTF8"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 59,
|
||||
"y": 680,
|
||||
"symbology": "qr",
|
||||
"scale": 9,
|
||||
"quiet": 4,
|
||||
"valuePath": "/record/url"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 591,
|
||||
"y": 680,
|
||||
"symbology": "datamatrix",
|
||||
"scale": 12,
|
||||
"quiet": 4,
|
||||
"value": "TEST-0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"description": "Boxes: an outline, a filled square, a horizontal rule and a vertical rule.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "box",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"width": 200,
|
||||
"height": 100,
|
||||
"thickness": 3
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 240,
|
||||
"y": 20,
|
||||
"width": 60,
|
||||
"height": 60,
|
||||
"thickness": 30
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 20,
|
||||
"y": 140,
|
||||
"width": 500,
|
||||
"height": 2,
|
||||
"thickness": 2
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 560,
|
||||
"y": 20,
|
||||
"width": 2,
|
||||
"height": 200,
|
||||
"thickness": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"description": "Boxes: an outline, a filled square, a horizontal rule and a vertical rule.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "box",
|
||||
"x": 30,
|
||||
"y": 30,
|
||||
"width": 296,
|
||||
"height": 148,
|
||||
"thickness": 4
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 355,
|
||||
"y": 30,
|
||||
"width": 89,
|
||||
"height": 89,
|
||||
"thickness": 44
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 30,
|
||||
"y": 207,
|
||||
"width": 739,
|
||||
"height": 3,
|
||||
"thickness": 3
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 828,
|
||||
"y": 30,
|
||||
"width": 3,
|
||||
"height": 296,
|
||||
"thickness": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"description": "Boxes: an outline, a filled square, a horizontal rule and a vertical rule.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "box",
|
||||
"x": 59,
|
||||
"y": 59,
|
||||
"width": 591,
|
||||
"height": 296,
|
||||
"thickness": 9
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 709,
|
||||
"y": 59,
|
||||
"width": 177,
|
||||
"height": 177,
|
||||
"thickness": 89
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 59,
|
||||
"y": 414,
|
||||
"width": 1478,
|
||||
"height": 6,
|
||||
"thickness": 6
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 1655,
|
||||
"y": 59,
|
||||
"width": 6,
|
||||
"height": 591,
|
||||
"thickness": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"description": "Forge compact GS1-128 label: fitted bars with quiet zone and the human-readable line in printer font 0.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererValue": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"humanReadable": "(01)00012345678905(11)260101(21)TEST0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbology": "gs1-128",
|
||||
"valuePath": "/record/rendererValue",
|
||||
"quiet": 10,
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 12400
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"valuePath": "/record/humanReadable",
|
||||
"x": 32,
|
||||
"y": 144,
|
||||
"height": 24,
|
||||
"width": 10
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"description": "Forge compact GS1-128 label: fitted bars with quiet zone and the human-readable line in printer font 0.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererValue": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"humanReadable": "(01)00012345678905(11)260101(21)TEST0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbology": "gs1-128",
|
||||
"valuePath": "/record/rendererValue",
|
||||
"quiet": 10,
|
||||
"x": 48,
|
||||
"y": 48,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 12400
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"valuePath": "/record/humanReadable",
|
||||
"x": 48,
|
||||
"y": 212,
|
||||
"height": 36,
|
||||
"width": 15
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"description": "The Forge centred GS1-128 document drawn for a 203 dpi printer.",
|
||||
"stock": {
|
||||
"widthMicrons": 103504,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererValue": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"humanReadable": "(01)00012345678905(11)260101(21)TEST0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "forge-echo-abel-regular",
|
||||
"resource": "/fonts/Abel-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Abel",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbology": "gs1-128",
|
||||
"valuePath": "/record/rendererValue",
|
||||
"quiet": 10,
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"fit": {
|
||||
"widthMicrons": 95504,
|
||||
"heightMicrons": 16000
|
||||
},
|
||||
"align": "center"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"valuePath": "/record/humanReadable",
|
||||
"x": 32,
|
||||
"y": 162,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 30,
|
||||
"width": 763,
|
||||
"height": 40,
|
||||
"align": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"description": "Forge centred GS1-128 document: fitted bars carrying an align key that version 1 ignores, and the human-readable line as rasterText in an uploaded face.",
|
||||
"stock": {
|
||||
"widthMicrons": 103504,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererValue": "[01]00012345678905[11]260101[21]TEST0001",
|
||||
"humanReadable": "(01)00012345678905(11)260101(21)TEST0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "forge-echo-abel-regular",
|
||||
"resource": "/fonts/Abel-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Abel",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbology": "gs1-128",
|
||||
"valuePath": "/record/rendererValue",
|
||||
"quiet": 10,
|
||||
"x": 36,
|
||||
"y": 36,
|
||||
"fit": {
|
||||
"widthMicrons": 95504,
|
||||
"heightMicrons": 16000
|
||||
},
|
||||
"align": "center"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"valuePath": "/record/humanReadable",
|
||||
"x": 36,
|
||||
"y": 206,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 44,
|
||||
"width": 1128,
|
||||
"height": 58,
|
||||
"align": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"description": "Forge plain Echo label: dynamic symbology from an allowlist, fitted to the whole label less its inset.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererSymbology": "code128",
|
||||
"barcode": "TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/record/rendererSymbology",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"code39",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"aztec"
|
||||
],
|
||||
"valuePath": "/record/barcode",
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 17400
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"description": "Forge plain Echo label: dynamic symbology from an allowlist, fitted to the whole label less its inset.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererSymbology": "code128",
|
||||
"barcode": "TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/record/rendererSymbology",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"code39",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"aztec"
|
||||
],
|
||||
"valuePath": "/record/barcode",
|
||||
"x": 48,
|
||||
"y": 48,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 17400
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"description": "Forge plain Echo label resolving a matrix symbology from the same allowlist.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererSymbology": "qr",
|
||||
"barcode": "TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/record/rendererSymbology",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"code39",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"aztec"
|
||||
],
|
||||
"valuePath": "/record/barcode",
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 17400
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"description": "Forge scanner-fidelity Echo label for a symbology whose payload is passed through unchanged.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererSymbology": "code128",
|
||||
"barcode": "TEST-0001",
|
||||
"symbology": "CODE128",
|
||||
"aimIdentifier": "]C0"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/record/rendererSymbology",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"code39",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"aztec",
|
||||
"ean13",
|
||||
"ean8",
|
||||
"upca",
|
||||
"upce"
|
||||
],
|
||||
"valuePath": "/record/barcode",
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 17400
|
||||
},
|
||||
"scannerSymbologyPath": "/record/symbology",
|
||||
"aimIdentifierPath": "/record/aimIdentifier"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"description": "Forge scanner-fidelity Echo label: the recorded scanner label and AIM identifier are verified and an EAN-13 is reproduced.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererSymbology": "ean13",
|
||||
"barcode": "0012345678905",
|
||||
"symbology": "LABEL-TYPE-EAN13",
|
||||
"aimIdentifier": "]E0"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/record/rendererSymbology",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"code39",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"aztec",
|
||||
"ean13",
|
||||
"ean8",
|
||||
"upca",
|
||||
"upce"
|
||||
],
|
||||
"valuePath": "/record/barcode",
|
||||
"x": 32,
|
||||
"y": 32,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 17400
|
||||
},
|
||||
"scannerSymbologyPath": "/record/symbology",
|
||||
"aimIdentifierPath": "/record/aimIdentifier"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"description": "Forge scanner-fidelity Echo label: the recorded scanner label and AIM identifier are verified and an EAN-13 is reproduced.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 25400,
|
||||
"topMicrons": 3000,
|
||||
"rightMicrons": 3000,
|
||||
"bottomMicrons": 3000,
|
||||
"leftMicrons": 3000,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"rendererSymbology": "ean13",
|
||||
"barcode": "0012345678905",
|
||||
"symbology": "LABEL-TYPE-EAN13",
|
||||
"aimIdentifier": "]E0"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/record/rendererSymbology",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"code39",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"aztec",
|
||||
"ean13",
|
||||
"ean8",
|
||||
"upca",
|
||||
"upce"
|
||||
],
|
||||
"valuePath": "/record/barcode",
|
||||
"x": 48,
|
||||
"y": 48,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 93600,
|
||||
"heightMicrons": 17400
|
||||
},
|
||||
"scannerSymbologyPath": "/record/symbology",
|
||||
"aimIdentifierPath": "/record/aimIdentifier"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"description": "Image assets print at their pixel size; grey and partly transparent pixels are thresholded.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {},
|
||||
"assets": [
|
||||
{
|
||||
"name": "logo",
|
||||
"resource": "/compat-v1/assets/test-mark.png",
|
||||
"mediaType": "image/png"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "image",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"asset": "logo"
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"x": 100,
|
||||
"y": 60,
|
||||
"asset": "logo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"description": "Image assets print at their pixel size; grey and partly transparent pixels are thresholded.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {},
|
||||
"assets": [
|
||||
{
|
||||
"name": "logo",
|
||||
"resource": "/compat-v1/assets/test-mark.png",
|
||||
"mediaType": "image/png"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "image",
|
||||
"x": 30,
|
||||
"y": 30,
|
||||
"asset": "logo"
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"x": 148,
|
||||
"y": 89,
|
||||
"asset": "logo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"description": "Image assets print at their pixel size; grey and partly transparent pixels are thresholded.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {},
|
||||
"assets": [
|
||||
{
|
||||
"name": "logo",
|
||||
"resource": "/compat-v1/assets/test-mark.png",
|
||||
"mediaType": "image/png"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "image",
|
||||
"x": 59,
|
||||
"y": 59,
|
||||
"asset": "logo"
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"x": 296,
|
||||
"y": 177,
|
||||
"asset": "logo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"description": "rasterText layout options: default left, centre and right alignment, a threshold either side of the default, an explicit line height with LF, and automatic wrapping.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"name": "Centre Test 0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "mono",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "forge-echo-abel-regular",
|
||||
"resource": "/fonts/Abel-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Abel",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 24,
|
||||
"width": 400,
|
||||
"height": 40,
|
||||
"value": "LEFT TEST 0001"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 70,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 24,
|
||||
"width": 400,
|
||||
"height": 40,
|
||||
"valuePath": "/record/name",
|
||||
"align": "center"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 120,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 24,
|
||||
"width": 400,
|
||||
"height": 40,
|
||||
"value": "RIGHT TEST 0001",
|
||||
"align": "right",
|
||||
"threshold": 96
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 170,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 28,
|
||||
"width": 400,
|
||||
"height": 100,
|
||||
"value": "LINE ONE\nLINE TWO\nLINE THREE",
|
||||
"lineHeight": 30,
|
||||
"threshold": 200,
|
||||
"align": "left"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 280,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 24,
|
||||
"width": 300,
|
||||
"height": 120,
|
||||
"value": "Automatic wrapping of a longer synthetic test sentence 0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"description": "rasterText layout options: default left, centre and right alignment, a threshold either side of the default, an explicit line height with LF, and automatic wrapping.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"name": "Centre Test 0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "mono",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "forge-echo-abel-regular",
|
||||
"resource": "/fonts/Abel-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Abel",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 30,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 35,
|
||||
"width": 591,
|
||||
"height": 59,
|
||||
"value": "LEFT TEST 0001"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 103,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 35,
|
||||
"width": 591,
|
||||
"height": 59,
|
||||
"valuePath": "/record/name",
|
||||
"align": "center"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 177,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 35,
|
||||
"width": 591,
|
||||
"height": 59,
|
||||
"value": "RIGHT TEST 0001",
|
||||
"align": "right",
|
||||
"threshold": 96
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 251,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 41,
|
||||
"width": 591,
|
||||
"height": 148,
|
||||
"value": "LINE ONE\nLINE TWO\nLINE THREE",
|
||||
"lineHeight": 44,
|
||||
"threshold": 200,
|
||||
"align": "left"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 414,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 35,
|
||||
"width": 443,
|
||||
"height": 177,
|
||||
"value": "Automatic wrapping of a longer synthetic test sentence 0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"description": "rasterText layout options: default left, centre and right alignment, a threshold either side of the default, an explicit line height with LF, and automatic wrapping.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"name": "Centre Test 0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "mono",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "forge-echo-abel-regular",
|
||||
"resource": "/fonts/Abel-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Abel",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 59,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 71,
|
||||
"width": 1182,
|
||||
"height": 118,
|
||||
"value": "LEFT TEST 0001"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 207,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 71,
|
||||
"width": 1182,
|
||||
"height": 118,
|
||||
"valuePath": "/record/name",
|
||||
"align": "center"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 355,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 71,
|
||||
"width": 1182,
|
||||
"height": 118,
|
||||
"value": "RIGHT TEST 0001",
|
||||
"align": "right",
|
||||
"threshold": 96
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 502,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 83,
|
||||
"width": 1182,
|
||||
"height": 296,
|
||||
"value": "LINE ONE\nLINE TWO\nLINE THREE",
|
||||
"lineHeight": 89,
|
||||
"threshold": 200,
|
||||
"align": "left"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 828,
|
||||
"fontAsset": "forge-echo-abel-regular",
|
||||
"fontSize": 71,
|
||||
"width": 887,
|
||||
"height": 355,
|
||||
"value": "Automatic wrapping of a longer synthetic test sentence 0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"description": "rasterText quarter turns, and the bold and italic faces of one family.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {},
|
||||
"assets": [
|
||||
{
|
||||
"name": "mono",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "monoBold",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 700,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "headingItalic",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 22,
|
||||
"width": 200,
|
||||
"height": 40,
|
||||
"value": "TURN 0",
|
||||
"rotation": 0
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 240,
|
||||
"y": 20,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 22,
|
||||
"width": 200,
|
||||
"height": 40,
|
||||
"value": "TURN 90",
|
||||
"rotation": 90
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 80,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 22,
|
||||
"width": 200,
|
||||
"height": 40,
|
||||
"value": "TURN 180",
|
||||
"rotation": 180
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 300,
|
||||
"y": 20,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 22,
|
||||
"width": 200,
|
||||
"height": 40,
|
||||
"value": "TURN 270",
|
||||
"rotation": 270
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 240,
|
||||
"fontAsset": "monoBold",
|
||||
"fontSize": 22,
|
||||
"width": 200,
|
||||
"height": 40,
|
||||
"value": "BOLD 0001"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 300,
|
||||
"fontAsset": "headingItalic",
|
||||
"fontSize": 22,
|
||||
"width": 200,
|
||||
"height": 40,
|
||||
"value": "ITALIC 0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"description": "rasterText quarter turns, and the bold and italic faces of one family.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {},
|
||||
"assets": [
|
||||
{
|
||||
"name": "mono",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "monoBold",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 700,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "headingItalic",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 30,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 33,
|
||||
"width": 296,
|
||||
"height": 59,
|
||||
"value": "TURN 0",
|
||||
"rotation": 0
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 355,
|
||||
"y": 30,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 33,
|
||||
"width": 296,
|
||||
"height": 59,
|
||||
"value": "TURN 90",
|
||||
"rotation": 90
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 118,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 33,
|
||||
"width": 296,
|
||||
"height": 59,
|
||||
"value": "TURN 180",
|
||||
"rotation": 180
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 443,
|
||||
"y": 30,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 33,
|
||||
"width": 296,
|
||||
"height": 59,
|
||||
"value": "TURN 270",
|
||||
"rotation": 270
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 355,
|
||||
"fontAsset": "monoBold",
|
||||
"fontSize": 33,
|
||||
"width": 296,
|
||||
"height": 59,
|
||||
"value": "BOLD 0001"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 30,
|
||||
"y": 443,
|
||||
"fontAsset": "headingItalic",
|
||||
"fontSize": 33,
|
||||
"width": 296,
|
||||
"height": 59,
|
||||
"value": "ITALIC 0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"description": "rasterText quarter turns, and the bold and italic faces of one family.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {},
|
||||
"assets": [
|
||||
{
|
||||
"name": "mono",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "monoBold",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 700,
|
||||
"fontStyle": "normal"
|
||||
},
|
||||
{
|
||||
"name": "headingItalic",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 59,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 65,
|
||||
"width": 591,
|
||||
"height": 118,
|
||||
"value": "TURN 0",
|
||||
"rotation": 0
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 709,
|
||||
"y": 59,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 65,
|
||||
"width": 591,
|
||||
"height": 118,
|
||||
"value": "TURN 90",
|
||||
"rotation": 90
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 236,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 65,
|
||||
"width": 591,
|
||||
"height": 118,
|
||||
"value": "TURN 180",
|
||||
"rotation": 180
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 887,
|
||||
"y": 59,
|
||||
"fontAsset": "mono",
|
||||
"fontSize": 65,
|
||||
"width": 591,
|
||||
"height": 118,
|
||||
"value": "TURN 270",
|
||||
"rotation": 270
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 709,
|
||||
"fontAsset": "monoBold",
|
||||
"fontSize": 65,
|
||||
"width": 591,
|
||||
"height": 118,
|
||||
"value": "BOLD 0001"
|
||||
},
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 59,
|
||||
"y": 887,
|
||||
"fontAsset": "headingItalic",
|
||||
"fontSize": 65,
|
||||
"width": 591,
|
||||
"height": 118,
|
||||
"value": "ITALIC 0001"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"description": "renderer/BARCODE-FIT.md dynamic scanner-profile example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"barcode": {
|
||||
"type": "qr",
|
||||
"value": "TEST-0001",
|
||||
"label": "QRCODE",
|
||||
"aim": "]Q1"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/barcode/type",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"ean13"
|
||||
],
|
||||
"valuePath": "/barcode/value",
|
||||
"scannerSymbologyPath": "/barcode/label",
|
||||
"aimIdentifierPath": "/barcode/aim",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 90000,
|
||||
"heightMicrons": 50000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"description": "renderer/BARCODE-FIT.md dynamic scanner-profile example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"barcode": {
|
||||
"type": "qr",
|
||||
"value": "TEST-0001",
|
||||
"label": "QRCODE",
|
||||
"aim": "]Q1"
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "barcode",
|
||||
"symbologyPath": "/barcode/type",
|
||||
"allowedSymbologies": [
|
||||
"code128",
|
||||
"qr",
|
||||
"ean13"
|
||||
],
|
||||
"valuePath": "/barcode/value",
|
||||
"scannerSymbologyPath": "/barcode/label",
|
||||
"aimIdentifierPath": "/barcode/aim",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"quiet": 10,
|
||||
"fit": {
|
||||
"widthMicrons": 90000,
|
||||
"heightMicrons": 50000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"description": "renderer/README.md rasterText example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"customerName": "Test Customer 0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "headingItalic",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 250,
|
||||
"fontAsset": "headingItalic",
|
||||
"fontSize": 32,
|
||||
"width": 500,
|
||||
"height": 120,
|
||||
"valuePath": "/record/customerName",
|
||||
"align": "left",
|
||||
"rotation": 0,
|
||||
"threshold": 128
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"description": "renderer/README.md rasterText example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"customerName": "Test Customer 0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "headingItalic",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 250,
|
||||
"fontAsset": "headingItalic",
|
||||
"fontSize": 32,
|
||||
"width": 500,
|
||||
"height": 120,
|
||||
"valuePath": "/record/customerName",
|
||||
"align": "left",
|
||||
"rotation": 0,
|
||||
"threshold": 128
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"description": "renderer/README.md rasterText example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {
|
||||
"record": {
|
||||
"customerName": "Test Customer 0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "headingItalic",
|
||||
"resource": "/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf",
|
||||
"mediaType": "font/ttf",
|
||||
"fontFamily": "Test Mono",
|
||||
"fontWeight": 400,
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rasterText",
|
||||
"x": 20,
|
||||
"y": 250,
|
||||
"fontAsset": "headingItalic",
|
||||
"fontSize": 32,
|
||||
"width": 500,
|
||||
"height": 120,
|
||||
"valuePath": "/record/customerName",
|
||||
"align": "left",
|
||||
"rotation": 0,
|
||||
"threshold": 128
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"description": "renderer/README.md ZPL authoring example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"order": {
|
||||
"id": "ORD-TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "logo",
|
||||
"resource": "/compat-v1/assets/test-mark.png",
|
||||
"mediaType": "image/png"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"valuePath": "/order/id"
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 20,
|
||||
"y": 60,
|
||||
"width": 500,
|
||||
"height": 2,
|
||||
"thickness": 2
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"x": 20,
|
||||
"y": 90,
|
||||
"asset": "logo"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 20,
|
||||
"y": 150,
|
||||
"symbology": "qr",
|
||||
"scale": 4,
|
||||
"quiet": 4,
|
||||
"value": "SHIPMENT-17"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"description": "renderer/README.md ZPL authoring example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"order": {
|
||||
"id": "ORD-TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "logo",
|
||||
"resource": "/compat-v1/assets/test-mark.png",
|
||||
"mediaType": "image/png"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"valuePath": "/order/id"
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 20,
|
||||
"y": 60,
|
||||
"width": 500,
|
||||
"height": 2,
|
||||
"thickness": 2
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"x": 20,
|
||||
"y": 90,
|
||||
"asset": "logo"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 20,
|
||||
"y": 150,
|
||||
"symbology": "qr",
|
||||
"scale": 4,
|
||||
"quiet": 4,
|
||||
"value": "SHIPMENT-17"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"description": "renderer/README.md ZPL authoring example, verbatim.",
|
||||
"stock": {
|
||||
"widthMicrons": 101600,
|
||||
"heightMicrons": 152400,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {
|
||||
"order": {
|
||||
"id": "ORD-TEST-0001"
|
||||
}
|
||||
},
|
||||
"assets": [
|
||||
{
|
||||
"name": "logo",
|
||||
"resource": "/compat-v1/assets/test-mark.png",
|
||||
"mediaType": "image/png"
|
||||
}
|
||||
],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"valuePath": "/order/id"
|
||||
},
|
||||
{
|
||||
"type": "box",
|
||||
"x": 20,
|
||||
"y": 60,
|
||||
"width": 500,
|
||||
"height": 2,
|
||||
"thickness": 2
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"x": 20,
|
||||
"y": 90,
|
||||
"asset": "logo"
|
||||
},
|
||||
{
|
||||
"type": "barcode",
|
||||
"x": 20,
|
||||
"y": 150,
|
||||
"symbology": "qr",
|
||||
"scale": 4,
|
||||
"quiet": 4,
|
||||
"value": "SHIPMENT-17"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"description": "Printer font 0 text: literal and bound values, number and boolean scalars, and UTF-8 with characters that are ZPL command prefixes.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 203
|
||||
},
|
||||
"context": {
|
||||
"order": {
|
||||
"id": "ORD-TEST-0001",
|
||||
"quantity": 12,
|
||||
"shipped": false
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"value": "TEST LABEL 0001"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 60,
|
||||
"width": 10,
|
||||
"height": 20,
|
||||
"valuePath": "/order/id"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 100,
|
||||
"width": 8,
|
||||
"height": 16,
|
||||
"valuePath": "/order/quantity"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 130,
|
||||
"width": 8,
|
||||
"height": 16,
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 160,
|
||||
"width": 8,
|
||||
"height": 16,
|
||||
"value": 3.5
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 190,
|
||||
"width": 14,
|
||||
"height": 28,
|
||||
"value": "Prüfung € ^~_ 0001"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 20,
|
||||
"y": 230,
|
||||
"width": 8,
|
||||
"height": 16,
|
||||
"valuePath": "/order/shipped"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"description": "Printer font 0 text: literal and bound values, number and boolean scalars, and UTF-8 with characters that are ZPL command prefixes.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 300
|
||||
},
|
||||
"context": {
|
||||
"order": {
|
||||
"id": "ORD-TEST-0001",
|
||||
"quantity": 12,
|
||||
"shipped": false
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 30,
|
||||
"width": 18,
|
||||
"height": 35,
|
||||
"value": "TEST LABEL 0001"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 89,
|
||||
"width": 15,
|
||||
"height": 30,
|
||||
"valuePath": "/order/id"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 148,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"valuePath": "/order/quantity"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 192,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 236,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"value": 3.5
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 281,
|
||||
"width": 21,
|
||||
"height": 41,
|
||||
"value": "Prüfung € ^~_ 0001"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 30,
|
||||
"y": 340,
|
||||
"width": 12,
|
||||
"height": 24,
|
||||
"valuePath": "/order/shipped"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"description": "Printer font 0 text: literal and bound values, number and boolean scalars, and UTF-8 with characters that are ZPL command prefixes.",
|
||||
"stock": {
|
||||
"widthMicrons": 76200,
|
||||
"heightMicrons": 50800,
|
||||
"topMicrons": 0,
|
||||
"rightMicrons": 0,
|
||||
"bottomMicrons": 0,
|
||||
"leftMicrons": 0,
|
||||
"dpi": 600
|
||||
},
|
||||
"context": {
|
||||
"order": {
|
||||
"id": "ORD-TEST-0001",
|
||||
"quantity": 12,
|
||||
"shipped": false
|
||||
}
|
||||
},
|
||||
"assets": [],
|
||||
"scene": {
|
||||
"schema": "qqq-zpl-scene/1",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 59,
|
||||
"width": 35,
|
||||
"height": 71,
|
||||
"value": "TEST LABEL 0001"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 177,
|
||||
"width": 30,
|
||||
"height": 59,
|
||||
"valuePath": "/order/id"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 296,
|
||||
"width": 24,
|
||||
"height": 47,
|
||||
"valuePath": "/order/quantity"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 384,
|
||||
"width": 24,
|
||||
"height": 47,
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 473,
|
||||
"width": 24,
|
||||
"height": 47,
|
||||
"value": 3.5
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 562,
|
||||
"width": 41,
|
||||
"height": 83,
|
||||
"value": "Prüfung € ^~_ 0001"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"x": 59,
|
||||
"y": 680,
|
||||
"width": 24,
|
||||
"height": 47,
|
||||
"valuePath": "/order/shipped"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
^XA^PW609^LL1218^LH0,0^CI28
|
||||
^FO16,16^GFA,1080,1080,18,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800003486E28D1BA3714DCBBDB3336674C75800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,144^GFA,1260,1260,21,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,272^GFA,1080,1080,18,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000002BDA6C96B34D2E8A4522948CD692BD0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,400^GFA,900,900,15,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800002AB8E2E8AE3BA28E8E2A2B8EE800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,528^GFA,2280,2280,38,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,656^GFA,975,975,15,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A800000280000000000A00000000002800000280000000000A00000000002800000280000000000A00000000002800000280000000000A00000000002800000280000000000A000000000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,784^GFA,715,715,11,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D128000028D1A649AA15C9D12800002800000028000000280000280000002800000028000028000000280000002800002800000028000000280000280000002800000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,912^GFA,975,975,15,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D324DEA362AA112474E53A80000028D000000000A0000000013A80000028D000000000A0000000013A80000028D000000000A0000000013A80000028D000000000A0000000013A80000028D000000000A0000000013A8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,1040^GFA,585,585,9,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA800002B326F4EB95EA80000280000000000A80000280000000000A80000280000000000A80000280000000000A80000280000000000A800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,11 @@
|
||||
^XA^PW900^LL1800^LH0,0^CI28
|
||||
^FO24,24^GFA,4320,4320,36,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000Line truncated
|
||||
^FO24,213^GFA,4920,4920,41,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF3330F3CCCC3CF33CC333CC33CF300000000000C33CF3333CF0CF33C3333CCF0CCCF3C330F33CCCC3CF333Line truncated
|
||||
^FO24,402^GFA,4200,4200,35,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000000CCFF3CC3CF0C33CCF0F30F30CFCC0CC30330C0CC330C0F0F33CC30CCFF300000000Line truncated
|
||||
^FO24,591^GFA,3600,3600,30,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCFCC0000000000CCCCFC0FC0CFCC0CCFC0FCFCC0CC0FCC0FC0CCC0CCFC0FCLine truncated
|
||||
^FO24,780^GFA,9000,9000,75,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3Line truncated
|
||||
^FO24,969^GFA,3770,3770,29,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303FLine truncated
|
||||
^FO24,1158^GFA,2860,2860,22,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC0F303CC3C30C3CCCC0333F0C3F3030CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000CC00000000000000CC00000000000000CC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO24,1347^GFA,3770,3770,29,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303Line truncated
|
||||
^FO24,1536^GFA,2340,2340,18,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CCF0F0C3CFF30FCCFC333FCCCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC0000000000CC000000000000000000000CCC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,11 @@
|
||||
^XA^PW1800^LL3600^LH0,0^CI28
|
||||
^FO48,48^GFA,17280,17280,72,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO48,426^GFA,19440,19440,81,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO48,804^GFA,16560,16560,69,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO48,1182^GFA,14400,14400,60,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0F0F0F0FFF000FFF000F0FFF0F000F0F0FFF000FFF0FFF0F000F0F000FFF0F000FFF000F0F0F000F0F0FFF000FFF0FFF0F000000000000000000000F0F0F0F0FFF000FFF000F0FFF0F000F0F0FFF00Line truncated
|
||||
^FO48,1560^GFA,35760,35760,149,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO48,1938^GFA,15080,15080,58,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0F000FF0F00FF00F00F00FF0FFFF0F0F000FF0FF000F0F0F0F0F0000F000F00F00F000FFF0F00FFF00F0F00FFF0F0F000000000000000000000F0F000FF0F00FF00F00F00FF0FFFF0F0F000FF0FF000F0F0F0F0F0000F000F00F00F000FFF0F00FFF00F0F00FFF0F0F000000000000000000000F0F000FF0F00FF00F00F00FF0FFFF0F0F000FF0FF000F0F0F0F0F0000F000F00F00F000FFF0F00FFF00F0F0Line truncated
|
||||
^FO48,2316^GFA,11440,11440,44,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FF0F0F0F0000F0F0FFF00F00FFF0F000F00F0F000000000000000000000F0F000FF0F000FF0F00FF00F00F00FFLine truncated
|
||||
^FO48,2694^GFA,15080,15080,58,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0F000FF0F00FF00F00F00FF0FFFF0F0F000FF0FF000F0F0F0F0F0000F000F00F00F000FFF0F00FFF00F0F00FFF0F0F000000000000000000000F0F000FF0F00FF00F00F00FF0FFFF0F0F000FF0FF000F0F0F0F0F0000F000F00F00F000FFF0F00FFF00F0F00FFF0F0F000000000000000000000F0F000FF0F00FF00F00F00FF0FFFF0F0F000FF0FF000F0F0F0F0F0000F000F00F00F000FFF0F00FFF00F0F0Line truncated
|
||||
^FO48,3072^GFA,9360,9360,36,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F000000000000000000000F0F0FF00FF00F00FF0FFFF0F00FFF0F0FFF00F0F0FFFF0F0F0F00000000000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW609^LL1218^LH0,0^CI28
|
||||
^FO16,16^GFA,1740,1740,15,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFF0F0F000FFFFFFF000000000FFFFFFF0F0F000FFFFFFF000000000FFFFFFF0F0F000FFFFFFF000000000FFFFFFF0F0F000FFFFFFF000000000F00000F00F0FF0F00000F000000000F00000F00F0FF0F00000F000000000F00000F00F0FF0F00000F000000000F00000F00F0FF0F00000F000000000F0FFF0F00F00F0F0FFF0F000000000F0FFF0F00F00F0F0FFF0F000000000F0FFF0F00F00F0F0FFF0F000000000F0FFF0F00F00F0F0FFF0F000000000F0FFF0F0F000F0F0FFF0F000000000F0FFF0F0F000F0F0FFF0F000000000F0FFF0F0F000F0F0FFF0F000000000F0FFF0F0F000F0F0FFF0F000000000F0FFF0F00F0F00F0FFF0F000000000F0FFF0F00F0F00F0FFF0F000000000F0FFF0F00F0F00F0FFF0F000000000F0FFF0F00F0F00F0FFF0F000000000F00000F000FF00F00000F000000000F00000F000FF00F00000F000000000F00000F000FF00F00000F000000000F00000F000FF00F00000F000000000FFFFFFF0F0F0F0FFFFFFF000000000FFFFFFF0F0F0F0FFFFFFF000000000FFFFFFF0F0F0F0FFFFFFF000000000FFFFFFF0F0F0F0FFFFFFF000000000000000000FF0F00000000000000000000000000FF0F00000000000000000000000000FF0F00000000000000000000000000FF0F0000000000000000000F0FFF0F0F0FF000F00F00000000000F0FFF0F0F0FF000F00F00000000000F0FFF0F0F0FF000F00F00000000000F0FFF0F0F0FF000F00F0000000000F0FF000F00F0FFF0FF0F0000000000F0FF000F00F0FFF0FF0F0000000000F0FF000F00F0FFF0FF0F0000000000F0FF000F00F0FFF0FF0F0000000000F00FFF0F00F0000F00FF0000000000F00FFF0F00F0000F00FF0000000000F00FFF0F00F0000F00FF0000000000F00FFF0F00F0000F00FF000000000F00F0000FFFFFFFF0F0FF000000000F00F0000FFFFFFFF0F0FF000000000F00F0000FFFFFFFF0F0FF000000000F00F0000FFFFFFFF0F0FF000000000FFFFF0FFFF0F00F0FFF0F000000000FFFFF0FFFF0F00F0FFF0F000000000FFFFF0FFFF0F00F0FFF0F000000000FFFFF0FFFF0F00F0FFF0F00000000000000000FF000F0FFF00000000000000000000FF000F0FFF00000000000000000000FF000F0FFF00000000000000000000FF000F0FFF000000000000FFFFFFF00F00FFF0FF0F0000000000FFFFFFF00F00FFF0FF0F0000000000FFFFFFF00F00FFF0FF0F0000000000FFFFFFF00F00FFF0FF0F0000000000F00000F0FF0F000F00FF0000000000F00000F0FF0F000F00FF0000000000F00000F0FF0F000F00FF0000000000F00000F0FF0F000F00FF0000000000F0FFF0F0F0F0FFF0F0FFF000000000F0FFF0F0F0F0FFF0F0FFF000000000F0FFF0F0F0F0FFF0F0FFF000000000F0FFF0F0F0F0FFF0F0FFF000000000F0FFF0F00FF000FF00FF0000000000F0FFF0F00FF000FF00FF0000000000F0FFF0F00FF000FF00FF0000000000F0FFF0F00FF000FF00FF0000000000F0FFF0F0F0F0FF00FFF0F000000000F0FFF0F0F0F0FF00FFF0F000000000F0FFF0F0F0F0FF00FFF0F000000000F0FFF0F0F0F0FF00FFF0F000000000F00000F000F00FFF000FF000000000F00000F000F00FFF000FF000000000F00000F000F00FFF000FF000000000F00000F000F00FFF000FF000000000FFFFFFF00FFFFF00F0F0F000000000FFFFFFF00FFFFF00F0F0F000000000FFFFFFF00FFFFF00F0F0F000000000FFFFFFF00FFFFF00F0F0F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,160^GFA,1540,1540,14,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F83E0F83E0F83E0F800000000000F83E0F83E0F83E0F800000000000F83E0F83E0F83E0F800000000000F83E0F83E0F83E0F800000000000F83E0F83E0F83E0F800000000000F83FF0001F0000007C0000000000F83FF0001F0000007C0000000000F83FF0001F0000007C0000000000F83FF0001F0000007C0000000000F83FF0001F0000007C0000000000F8000003E0FFFE00000000000000F8000003E0FFFE00000000000000F8000003E0FFFE00000000000000F8000003E0FFFE00000000000000F8000003E0FFFE00000000000000FFFE0F83E0003FF07C0000000000FFFE0F83E0003FF07C0000000000FFFE0F83E0003FF07C0000000000FFFE0F83E0003FF07C0000000000FFFE0F83E0003FF07C0000000000F83E0FFC000001FF800000000000F83E0FFC000001FF800000000000F83E0FFC000001FF800000000000F83E0FFC000001FF800000000000F83E0FFC000001FF800000000000FFC0007C00FFC0007C0000000000FFC0007C00FFC0007C0000000000FFC0007C00FFC0007C0000000000FFC0007C00FFC0007C0000000000FFC0007C00FFC0007C0000000000F801F003FF000000000000000000F801F003FF000000000000000000F801F003FF000000000000000000F801F003FF000000000000000000F801F003FF000000000000000000F801FF83E0FFC00FFC0000000000F801FF83E0FFC00FFC0000000000F801FF83E0FFC00FFC0000000000F801FF83E0FFC00FFC0000000000F801FF83E0FFC00FFC0000000000FFFFFFFC1F07FE0F800000000000FFFFFFFC1F07FE0F800000000000FFFFFFFC1F07FE0F800000000000FFFFFFFC1F07FE0F800000000000FFFFFFFC1F07FE0F800000000000F83FFFFFFF07FFF07C0000000000F83FFFFFFF07FFF07C0000000000F83FFFFFFF07FFF07C0000000000F83FFFFFFF07FFF07C0000000000F83FFFFFFF07FFF07C0000000000FFC1F07C1FF8000F800000000000FFC1F07C1FF8000F800000000000FFC1F07C1FF8000F800000000000FFC1F07C1FF8000F800000000000FFC1F07C1FF8000F800000000000FFFFFFFC00FFC0007C0000000000FFFFFFFC00FFC0007C0000000000FFFFFFFC00FFC0007C0000000000FFFFFFFC00FFC0007C0000000000FFFFFFFC00FFC0007C0000000000FFC0007FE0F801F0000000000000FFC0007FE0F801F0000000000000FFC0007FE0F801F0000000000000FFC0007FE0F801F0000000000000FFC0007FE0F801F0000000000000FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,304^GFA,1725,1725,15,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E007FFF003E0000000000000000003E007FFF003E0000000000000000003E007FFF003E0000000000000000003E007FFF003E0000000000000000003E007FFF003E0000000000000000F83E007FFFFFFE0FFC000000000000F83E007FFFFFFE0FFC000000000000F83E007FFFFFFE0FFC000000000000F83E007FFFFFFE0FFC000000000000F83E007FFFFFFE0FFC000000000000F83FF00000F8000FFC000000000000F83FF00000F8000FFC000000000000F83FF00000F8000FFC000000000000F83FF00000F8000FFC000000000000F83FF00000F8000FFC000000000000F83FFFFFFFFFFFFFFFE00000000000F83FFFFFFFFFFFFFFFE00000000000F83FFFFFFFFFFFFFFFE00000000000F83FFFFFFFFFFFFFFFE00000000000F83FFFFFFFFFFFFFFFE0000000000007C1F000000001F003E0000000000007C1F000000001F003E0000000000007C1F000000001F003E0000000000007C1F000000001F003E0000000000007C1F000000001F003E00000000000F801F07FFFFFC1F07C000000000000F801F07FFFFFC1F07C000000000000F801F07FFFFFC1F07C000000000000F801F07FFFFFC1F07C000000000000F801F07FFFFFC1F07C000000000000F801F07C0007C1FF83E00000000000F801F07C0007C1FF83E00000000000F801F07C0007C1FF83E00000000000F801F07C0007C1FF83E00000000000F801F07C0007C1FF83E00000000000F83FF07C1F07C1FFFFE00000000000F83FF07C1F07C1FFFFE00000000000F83FF07C1F07C1FFFFE00000000000F83FF07C1F07C1FFFFE00000000000F83FF07C1F07C1FFFFE0000000000007FFF07C0007C1FF8000000000000007FFF07C0007C1FF8000000000000007FFF07C0007C1FF8000000000000007FFF07C0007C1FF8000000000000007FFF07C0007C1FF8000000000000007FFF07FFFFFC1F003E0000000000007FFF07FFFFFC1F003E0000000000007FFF07FFFFFC1F003E0000000000007FFF07FFFFFC1F003E0000000000007FFF07FFFFFC1F003E0000000000007C1F000000001FFFFE0000000000007C1F000000001FFFFE0000000000007C1F000000001FFFFE0000000000007C1F000000001FFFFE0000000000007C1F000000001FFFFE000000000000001FFFFFFFFFFFF800000000000000001FFFFFFFFFFFF800000000000000001FFFFFFFFFFFF800000000000000001FFFFFFFFFFFF800000000000000001FFFFFFFFFFFF800000000000000000007C1F003E00000000000000000000007C1F003E00000000000000000000007C1F003E00000000000000000000007C1F003E00000000000000000000007C1F003E0000000000000000F801FF83E0F83E0FFFE00000000000F801FF83E0F83E0FFFE00000000000F801FF83E0F83E0FFFE00000000000F801FF83E0F83E0FFFE00000000000F801FF83E0F83E0FFFE00000000000003FFF80000000007FE00000000000003FFF80000000007FE00000000000003FFF80000000007FE00000000000003FFF80000000007FE00000000000003FFF80000000007FE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO16,448^GFA,1624,1624,28,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFF33303FF333FF0F3303C003CFC0FC3CFF333FC03FFF30330C0000FFFF33303FF333FF0F3303C003CFC0FC3CFF333FC03FFF30330C0000FFFF33303FF333FF0F3303C003CFC0FC3CFF333FC03FFF30330C0000FFFF33303FF333FF0F3303C003CFC0FC3CFF333FC03FFF30330C0000FFFF33303FF333FF0F3303C003CFC0FC3CFF333FC03FFF30330C0000FFFF33303FF333FF0F3303C003CFC0FC3CFF333FC03FFF30330C0000FFFF33303FF3303C0C3C33FFC30FF303FCFF330C003FFF30330C0000FFFF33303FF3303C0C3C33FFC30FF303FCFF330C003FFF30330C0000FFFF33303FF3303C0C3C33FFC30FF303FCFF330C003FFF30330C0000FFFF33303FF3303C0C3C33FFC30FF303FCFF330C003FFF30330C0000FFFF33303FF3303C0C3C33FFC30FF303FCFF330C003FFF30330C0000FFFF33303FF3303C0C3C33FFC30FF303FCFF330C003FFF30330C0000FFFF33303F333FFC0F333FF003F333FFC0F3303FF03FFF30330C0000FFFF33303F333FFC0F333FF003F333FFC0F3303FF03FFF30330C0000FFFF33303F333FFC0F333FF003F333FFC0F3303FF03FFF30330C0000FFFF33303F333FFC0F333FF003F333FFC0F3303FF03FFF30330C0000FFFF33303F333FFC0F333FF003F333FFC0F3303FF03FFF30330C0000FFFF33303F333FFC0F333FF003F333FFC0F3303FF03FFF30330C0000FFFF33303CCFF0FFCF30F0FC030F00F300CCFF0FF03FFF30330C0000FFFF33303CCFF0FFCF30F0FC030F00F300CCFF0FF03FFF30330C0000FFFF33303CCFF0FFCF30F0FC030F00F300CCFF0FF03FFF30330C0000FFFF33303CCFF0FFCF30F0FC030F00F300CCFF0FF03FFF30330C0000FFFF33303CCFF0FFCF30F0FC030F00F300CCFF0FF03FFF30330C0000FFFF33303CCFF0FFCF30F0FC030F00F300CCFF0FF03FFF30330C0000FFFF33303CCFC0300FFC03C333FC30F0F0FF33F0FC3FFF30330C0000FFFF33303CCFC0300FFC03C333FC30F0F0FF33F0FC3FFF30330C0000FFFF33303CCFC0300FFC03C333FC30F0F0FF33F0FC3FFF30330C0000FFFF33303CCFC0300FFC03C333FC30F0F0FF33F0FC3FFF30330C0000FFFF33303CCFC0300FFC03C333FC30F0F0FF33F0FC3FFF30330C0000FFFF33303CCFC0300FFC03C333FC30F0F0FF33F0FC3FFF30330C0000FFFF33303FCCFF300CFC00C0F300FCF0FCFF33FC033FFF30330C0000FFFF33303FCCFF300CFC00C0F300FCF0FCFF33FC033FFF30330C0000FFFF33303FCCFF300CFC00C0F300FCF0FCFF33FC033FFF30330C0000FFFF33303FCCFF300CFC00C0F300FCF0FCFF33FC033FFF30330C0000FFFF33303FCCFF300CFC00C0F300FCF0FCFF33FC033FFF30330C0000FFFF33303FCCFF300CFC00C0F300FCF0FCFF33FC033FFF30330C0000FFFF33303F30FCFFCF00F03303C3CF3C00F30FCFF03FFF30330C0000FFFF33303F30FCFFCF00F03303C3CF3C00F30FCFF03FFF30330C0000FFFF33303F30FCFFCF00F03303C3CF3C00F30FCFF03FFF30330C0000FFFF33303F30FCFFCF00F03303C3CF3C00F30FCFF03FFF30330C0000FFFF33303F30FCFFCF00F03303C3CF3C00F30FCFF03FFF30330C0000FFFF33303F30FCFFCF00F03303C3CF3C00F30FCFF03FFF30330C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW900^LL1800^LH0,0^CI28
|
||||
^FO24,24^GFA,3828,3828,22,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFC0FC0FC0000FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0000FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0000FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0000FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0000FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0000FFFFFFFFFFC000000000000FC0000000FC003F03FFC0FC0000000FC000000000000FC0000000FC003F03FFC0FC0000000FC000000000000FC0000000FC003F03FFC0FC0000000FC000000000000FC0000000FC003F03FFC0FC0000000FC000000000000FC0000000FC003F03FFC0FC0000000FC000000000000FC0000000FC003F03FFC0FC0000000FC000000000000FC0FFFFC0FC003F000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC003F000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC003F000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC003F000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC003F000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC003F000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC0FC0000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC0FC0000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC0FC0000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC0FC0000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC0FC0000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC0FC0000FC0FC0FFFFC0FC000000000000FC0FFFFC0FC003F03F000FC0FFFFC0FC000000000000FC0FFFFC0FC003F03F000FC0FFFFC0FC000000000000FC0FFFFC0FC003F03F000FC0FFFFC0FC000000000000FC0FFFFC0FC003F03F000FC0FFFFC0FC000000000000FC0FFFFC0FC003F03F000FC0FFFFC0FC000000000000FC0FFFFC0FC003F03F000FC0FFFFC0FC000000000000FC0000000FC0000FFF000FC0000000FC000000000000FC0000000FC0000FFF000FC0000000FC000000000000FC0000000FC0000FFF000FC0000000FC000000000000FC0000000FC0000FFF000FC0000000FC000000000000FC0000000FC0000FFF000FC0000000FC000000000000FC0000000FC0000FFF000FC0000000FC000000000000FFFFFFFFFFC0FC0FC0FC0FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0FC0FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0FC0FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0FC0FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0FC0FFFFFFFFFFC000000000000FFFFFFFFFFC0FC0FC0FC0FFFFFFFFFFC00000000000000000000000003FFC0FC00000000000000000000000000000000000003FFC0FC00000000000000000000000000000000000003FFC0FC00000000000000000000000000000000000003FFC0FC00000000000000000000000000000000000003FFC0FC00000000000000000000000000000000000003FFC0FC000000000000000000000000000FC0FFFFC0FC0FC0FFF00003F000FC000000000000000FC0FFFFC0FC0FC0FFF00003F000FC000000000000000FC0FFFFC0FC0FC0FFF00003F000FC000000000000000FC0FFFFC0FC0FC0FFF00003F000FC000000000000000FC0FFFFC0FC0FC0FFF00003F000FC000000000000000FC0FFFFC0FC0FC0FFF00003F000FC00000000000003F03FFC0000FC003F03FFFF03FFC0FC00000000000003F03FFC0000FC003F03FFFF03FFC0FC00000000000003F03FFC0000FC003F03FFFF03FFC0FC00000000000003F03FFC0000FC003F03FFFF03FFC0FC00000000000003F03FFC0000FC003F03FFFF03FFC0FC00000000000003F03FFC0000FC003F03FFFF03FFC0FC00000000000003F000FFFFC0FC003F000000FC003FFC00000000000003F000FFFFC0FC003F000000FC003FFC00000000000003F000FFFFC0FC003F000000FC003FFC00000000000003F000FFFFC0FC003F000000FC003FFC00000000000003F000FFFFC0FC003F000000FC003FFC00000000000003F000FFFFC0FC003F000000FC003FFC000000000000FC003F000000FFFFFFFFFFFF03F03FFC000000000000FC003F000000FFFFFFFFFFFF03F03FFC000000000000FC003F000000FFFFFFFFFFFF03F03FFC000000000000FC003F000000FFFFFFFFFFFF03F03FFC000000000000FC003F000000FFFFFFFFFFFF03F03FFC000000000000FC003F000000FFFFFFFFFFFF03F03FFC000000000000FFFFFFFC0FFFFFF03F000FC0FFFFC0FC000000000000FFFFFFFC0FFFFFF03F000FC0FFFFC0FC000000000000FFFFFFFC0FFFFFF03F000FC0FFFFC0FC000000000000FFFFFFFC0FFFFFF03F000FC0FFFFC0FC000000000000FFFFFFFC0FFFFFF03F000FC0FFFFC0FC000000000000FFFFFFFC0FFFFFF03F000FC0FFFFC0FC000000000000000000000000FFF00003F03FFFF00000000000000000000000000000FFF00003F03FFFF00000000000000000000000000000FFF00003F03FFFF00000000000000000000000000000FFF00003F03FFFF00000000000000000000000000000FFF00003F03FFFF00000000000000000000000000000FFF00003F03FFFF00000000000000000FFFFFFFFFFC003F000FFFFC0FFF03F00000000000000FFFFFFFFFFC003F000FFFFC0FFF03F00000000000000FFFFFFFFFFC003F000FFFFC0FFF03F00000000000000FFFFFFFFFFC003F000FFFFC0FFF03F00000000000000FFFFFFFFFFC003F000FFFFC0FFF03F000000000Line truncated
|
||||
^FO24,237^GFA,3872,3872,22,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF00FFFF000000FF0000000000FF0000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FF0000000000FF00FFFFFF0000000000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FFFFFF00FF00FF000000FFFF00FF0000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FF00FF00FFFF0000000000FFFF000000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FFFF000000FF0000FFFF000000FF0000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FF0000FFFF0000000000000000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FF0000FFFF00FF00FFFF0000FFFF0000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FFFFFFFFFFFF00FF00FFFF00FF000000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FF00FFFFFFFFFFFF00FFFFFF00FF0000000000000000FFFF00FF00FF00FFFF000000FF0000000000Line truncated
|
||||
^FO24,450^GFA,3381,3381,21,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F8001FFFFF0003F800000000000000000000000003F8001FFFFF0003F800000000000000000000000003F8001FFFFF0003F800000000000000000000000003F8001FFFFF0003F800000000000000000000000003F8001FFFFF0003F800000000000000000000000003F8001FFFFF0003F800000000000000000000000003F8001FFFFF0003F80000000000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03F8001FFFFFFFFFF80FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFF0000000FE00000FFFC00000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF8000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF8000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF8000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF8000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF8000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF8000000000000000FE03FFFFFFFFFFFFFFFFFFFFFF800000000000000001FC07F0000000000007F0003F800000000000000001FC07F0000000000007F0003F800000000000000001FC07F0000000000007F0003F800000000000000001FC07F0000000000007F0003F800000000000000001FC07F0000000000007F0003F800000000000000001FC07F0000000000007F0003F800000000000000001FC07F0000000000007F0003F8000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FFFFFFFFC07F01FC00000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE0007F01FC00001FC07FFE03F8000000000000000FE03FFF01FC07F01FC07FFFFFF8000000000000000FE03FFF01FC07F01FC07FFFFFF8000000000000000FE03FFF01FC07F01FC07FFFFFF8000000000000000FE03FFF01FC07F01FC07FFFFFF8000000000000000FE03FFF01FC07F01FC07FFFFFF8000000000000000FE03FFF01FC07F01FC07FFFFFF8000000000000000FE03FFF01FC07F01FC07FFFFFF800000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FC00001FC07FFE000000000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FFFFF01FFFFFFFFC07F0003F800000000000000001FC07F0000000000007FFFFFF800000000000000001FC07F0000000000007FFFFFF800000000000000001FC07F0000000000007FFFFFF800000000000000001FC07F0000000000007FFFFFF800000000000000001FC07F0000000000007FFFFFF800000000000000001FC07F0000000000007FFFFFF800000000000000001FC07F0000000000007FFFFFF8000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000007FFFFFFFFFFFFFFFFE0000000000000000000000000001FC07F0003F80000000000000000000000000000001FC07F0003F80000000000000000000000000000001FC07F0003F80000000000000000000000000000001FC07F0003F80000000000000000000000000000001FC07F0003F80000000000000000000000000000001FC07F0003F80000000000000000000000000000001Line truncated
|
||||
^FO24,663^GFA,6496,6496,56,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F0FFFFF00FF0F0F000FF000000FF0FFF000FFF00FF0FFFF0F0F0FFFF0000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFFFF0F0F000FF000F00FF00F0FFFFFF00F00FFFF0F000FFFF0FFFF0F0F00F000000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFF0F0F0FFFFFF000FF0F0F0FFFFF00000FFF0F0F0FFFFFF000FF0F0F000FFFFF000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFF0F0F0FFFFFF000FF0F0F0FFFFF00000FFF0F0F0FFFFFF000FF0F0F000FFFFF000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFF0F0F0FFFFFF000FF0F0F0FFFFF00000FFF0F0F0FFFFFF000FF0F0F000FFFFF000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFF0F0F0FFFFFF000FF0F0F0FFFFF00000FFF0F0F0FFFFFF000FF0F0F000FFFFF000FFFFFFF0F000F0F00F000000000FFFFFFFF0F0F0F000FFF0F0F0FFFFFF000FF0F0FLine truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW1800^LL3600^LH0,0^CI28
|
||||
^FO48,48^GFA,15312,15312,44,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FFF000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFF000FFF000FLine truncated
|
||||
^FO48,474^GFA,15488,15488,44,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO48,900^GFA,15180,15180,44,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO48,1326^GFA,25752,25752,111,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW609^LL406^LH0,0^CI28
|
||||
^FO20,20^GFA,4320,4320,36,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000Line truncated
|
||||
^FO20,130^GFA,1260,1260,21,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO20,230^GFA,1287,1287,13,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFF8FC7E3803FFFFE0000000FFFFF8FC7E3803FFFFE0000000FFFFF8FC7E3803FFFFE0000000E00038E00FF8E38000E0000000E00038E00FF8E38000E0000000E00038E00FF8E38000E0000000E3FE381F81FFE38FF8E0000000E3FE381F81FFE38FF8E0000000E3FE381F81FFE38FF8E0000000E3FE380071FF038FF8E0000000E3FE380071FF038FF8E0000000E3FE380071FF038FF8E0000000E3FE38FC0FC0038FF8E0000000E3FE38FC0FC0038FF8E0000000E3FE38FC0FC0038FF8E0000000E00038E001F8038000E0000000E00038E001F8038000E0000000E00038E001F8038000E0000000FFFFF8E38E38E3FFFFE0000000FFFFF8E38E38E3FFFFE0000000FFFFF8E38E38E3FFFFE0000000000000E00E07E0000000000000000000E00E07E0000000000000000000E00E07E0000000000000FF81F8FFF000FFFE07E0000000FF81F8FFF000FFFE07E0000000FF81F8FFF000FFFE07E0000000FC0000E07E071FF1C7E0000000FC0000E07E071FF1C7E0000000FC0000E07E071FF1C7E000000003FFF81FF1FF1C0FF8E000000003FFF81FF1FF1C0FF8E000000003FFF81FF1FF1C0FF8E0000000038FC0E07038E071C000000000038FC0E07038E071C000000000038FC0E07038E071C0000000001C7FFF1FF007E3F000E00000001C7FFF1FF007E3F000E00000001C7FFF1FF007E3F000E00000001C7E001FFFC7E3F007E00000001C7E001FFFC7E3F007E00000001C7E001FFFC7E3F007E0000000FF8038E071C7FF81F8E0000000FF8038E071C7FF81F8E0000000FF8038E071C7FF81F8E00000000381C71F8E00FC7FC0000000000381C71F8E00FC7FC0000000000381C71F8E00FC7FC000000000FC003F03FE00FFFE0700000000FC003F03FE00FFFE0700000000FC003F03FE00FFFE0700000000000000FFFFC0E00E00E0000000000000FFFFC0E00E00E0000000000000FFFFC0E00E00E0000000FFFFF8007FF8E38E00E0000000FFFFF8007FF8E38E00E0000000FFFFF8007FF8E38E00E0000000E00038E38E3FE00E0700000000E00038E38E3FE00E0700000000E00038E38E3FE00E0700000000E3FE381C7007FFFE0000000000E3FE381C7007FFFE0000000000E3FE381C7007FFFE0000000000E3FE381FFE001C0E3F00000000E3FE381FFE001C0E3F00000000E3FE381FFE001C0E3F00000000E3FE38E071C7FC7FC7E0000000E3FE38E071C7FC7FC7E0000000E3FE38E071C7FC7FC7E0000000E00038E3FE07FFFE0000000000E00038E3FE07FFFE0000000000E00038E3FE07FFFE0000000000FFFFF8FC0E38E381C0E0000000FFFFF8FC0E38E381C0E0000000FFFFF8FC0E38E381C0E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO200,230^GFA,968,968,11,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0F0F0F0F0F0F000000000F0F0F0F0F0F0F000000000F0F0F0F0F0F0F000000000F0F0F0F0F0F0F000000000F0FF000F00000F00000000F0FF000F00000F00000000F0FF000F00000F00000000F0FF000F00000F00000000F00000F0FFF00000000000F00000F0FFF00000000000F00000F0FFF00000000000F00000F0FFF00000000000FFF0F0F000FF0F00000000FFF0F0F000FF0F00000000FFF0F0F000FF0F00000000FFF0F0F000FF0F00000000F0F0FF00000FF000000000F0F0FF00000FF000000000F0F0FF00000FF000000000F0F0FF00000FF000000000FF000F00FF000F00000000FF000F00FF000F00000000FF000F00FF000F00000000FF000F00FF000F00000000F00F00FF00000000000000F00F00FF00000000000000F00F00FF00000000000000F00F00FF00000000000000F00FF0F0FF00FF00000000F00FF0F0FF00FF00000000F00FF0F0FF00FF00000000F00FF0F0FF00FF00000000FFFFFF0F0FF0F000000000FFFFFF0F0FF0F000000000FFFFFF0F0FF0F000000000FFFFFF0F0FF0F000000000F0FFFFFF0FFF0F00000000F0FFFFFF0FFF0F00000000F0FFFFFF0FFF0F00000000F0FFFFFF0FFF0F00000000FF0F0F0FF000F000000000FF0F0F0FF000F000000000FF0F0F0FF000F000000000FF0F0F0FF000F000000000FFFFFF00FF000F00000000FFFFFF00FF000F00000000FFFFFF00FF000F00000000FFFFFF00FF000F00000000FF000FF0F00F0000000000FF000FF0F00F0000000000FF000FF0F00F0000000000FF000FF0F00F0000000000FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW900^LL600^LH0,0^CI28
|
||||
^FO30,30^GFA,9720,9720,54,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000Line truncated
|
||||
^FO30,192^GFA,1260,1260,21,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D00000025B55B2D655ACAB6535AA6D536A9B5A5696D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO30,340^GFA,2244,2244,17,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFF0FF0FF0F000FFFFFFF000000000FFFFFFF0FF0FF0F000FFFFFFF000000000FFFFFFF0FF0FF0F000FFFFFFF000000000FFFFFFF0FF0FF0F000FFFFFFF000000000F00000F0F000FFF0F0F00000F000000000F00000F0F000FFF0F0F00000F000000000F00000F0F000FFF0F0F00000F000000000F00000F0F000FFF0F0F00000F000000000F0FFF0F00FF00FFFF0F0FFF0F000000000F0FFF0F00FF00FFFF0F0FFF0F000000000F0FFF0F00FF00FFFF0F0FFF0F000000000F0FFF0F00FF00FFFF0F0FFF0F000000000F0FFF0F0000F0FFF00F0FFF0F000000000F0FFF0F0000F0FFF00F0FFF0F000000000F0FFF0F0000F0FFF00F0FFF0F000000000F0FFF0F0000F0FFF00F0FFF0F000000000F0FFF0F0FF00FF0000F0FFF0F000000000F0FFF0F0FF00FF0000F0FFF0F000000000F0FFF0F0FF00FF0000F0FFF0F000000000F0FFF0F0FF00FF0000F0FFF0F000000000F00000F0F0000FF000F00000F000000000F00000F0F0000FF000F00000F000000000F00000F0F0000FF000F00000F000000000F00000F0F0000FF000F00000F000000000FFFFFFF0F0F0F0F0F0FFFFFFF000000000FFFFFFF0F0F0F0F0F0FFFFFFF000000000FFFFFFF0F0F0F0F0F0FFFFFFF000000000FFFFFFF0F0F0F0F0F0FFFFFFF00000000000000000F000F00FF0000000000000000000000000F000F00FF0000000000000000000000000F000F00FF0000000000000000000000000F000F00FF00000000000000000FFF00FF0FFFF0000FFFFF00FF000000000FFF00FF0FFFF0000FFFFF00FF000000000FFF00FF0FFFF0000FFFFF00FF000000000FFF00FF0FFFF0000FFFFF00FF000000000FF000000F00FF00F0FFF0F0FF000000000FF000000F00FF00F0FFF0F0FF000000000FF000000F00FF00F0FFF0F0FF000000000FF000000F00FF00F0FFF0F0FF00000000000FFFFF00FFF0FFF0F00FFF0F00000000000FFFFF00FFF0FFF0F00FFF0F00000000000FFFFF00FFF0FFF0F00FFF0F00000000000FFFFF00FFF0FFF0F00FFF0F00000000000F0FF00F00F00F0F00F0F00000000000000F0FF00F00F00F0F00F0F00000000000000F0FF00F00F00F0F00F0F00000000000000F0FF00F00F00F0F00F0F0000000000000F0FFFFF0FFF000FF0FF0000F0000000000F0FFFFF0FFF000FF0FF0000F0000000000F0FFFFF0FFF000FF0FF0000F0000000000F0FFFFF0FFF000FF0FF0000F0000000000F0FF0000FFFFF0FF0FF000FF0000000000F0FF0000FFFFF0FF0FF000FF0000000000F0FF0000FFFFF0FF0FF000FF0000000000F0FF0000FFFFF0FF0FF000FF000000000FFF000F0F00F0F0FFFF00FF0F000000000FFF000F0F00F0F0FFFF00FF0F000000000FFF000F0F00F0F0FFFF00FF0F000000000FFF000F0F00F0F0FFFF00FF0F00000000000F00F0F0FF0F000FF0FFF00000000000000F00F0F0FF0F000FF0FFF00000000000000F00F0F0FF0F000FF0FFF00000000000000F00F0F0FF0F000FF0FFF000000000000FF0000FF00FFF000FFFFF00F0000000000FF0000FF00FFF000FFFFF00F0000000000FF0000FF00FFF000FFFFF00F0000000000FF0000FF00FFF000FFFFF00F000000000000000000FFFFFF00F000F000F00000000000000000FFFFFF00F000F000F00000000000000000FFFFFF00F000F000F00000000000000000FFFFFF00F000F000F000000000FFFFFFF0000FFFF0F0F0F000F000000000FFFFFFF0000FFFF0F0F0F000F000000000FFFFFFF0000FFFF0F0F0F000F000000000FFFFFFF0000FFFF0F0F0F000F000000000F00000F0F0F0F0FFF000F00F0000000000F00000F0F0F0F0FFF000F00F0000000000F00000F0F0F0F0FFF000F00F0000000000F00000F0F0F0F0FFF000F00F0000000000F0FFF0F00F0F000FFFFFF0000000000000F0FFF0F00F0F000FFFFFF0000000000000F0FFF0F00F0F000FFFFFF0000000000000F0FFF0F00F0F000FFFFFF0000000000000F0FFF0F00FFFF0000F00F0FF0000000000F0FFF0F00FFFF0000F00F0FF0000000000F0FFF0F00FFFF0000F00F0FF0000000000F0FFF0F00FFFF0000F00F0FF0000000000F0FFF0F0F00F0F0FFF0FFF0FF000000000F0FFF0F0F00F0F0FFF0FFF0FF000000000F0FFF0F0F00F0F0FFF0FFF0FF000000000F0FFF0F0F00F0F0FFF0FFF0FF000000000F00000F0F0FFF00FFFFFF0000000000000F00000F0F0FFF00FFFFFF0000000000000F00000F0F0FFF00FFFFFF0000000000000F00000F0F0FFF00FFFFFF0000000000000FFFFFFF0FF00F0F0F0F00F00F000000000FFFFFFF0FF00F0F0F0F00F00F000000000FFFFFFF0FF00F0F0F0F00F00F000000000FFFFFFF0FF00F0F0F0F00F00F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO296,340^GFA,2244,2244,17,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FC0FC0FC0FC0FC0FC0FC00000000000000FC0FC0FC0FC0FC0FC0FC00000000000000FC0FC0FC0FC0FC0FC0FC00000000000000FC0FC0FC0FC0FC0FC0FC00000000000000FC0FC0FC0FC0FC0FC0FC00000000000000FC0FC0FC0FC0FC0FC0FC00000000000000FC0FFF00003F00000003F0000000000000FC0FFF00003F00000003F0000000000000FC0FFF00003F00000003F0000000000000FC0FFF00003F00000003F0000000000000FC0FFF00003F00000003F0000000000000FC0FFF00003F00000003F0000000000000FC0000000FC0FFFFC00000000000000000FC0000000FC0FFFFC00000000000000000FC0000000FC0FFFFC00000000000000000FC0000000FC0FFFFC00000000000000000FC0000000FC0FFFFC00000000000000000FC0000000FC0FFFFC00000000000000000FFFFC0FC0FC0000FFF03F0000000000000FFFFC0FC0FC0000FFF03F0000000000000FFFFC0FC0FC0000FFF03F0000000000000FFFFC0FC0FC0000FFF03F0000000000000FFFFC0FC0FC0000FFF03F0000000000000FFFFC0FC0FC0000FFF03F0000000000000FC0FC0FFF00000003FFC00000000000000FC0FC0FFF00000003FFC00000000000000FC0FC0FFF00000003FFC00000000000000FC0FC0FFF00000003FFC00000000000000FC0FC0FFF00000003FFC00000000000000FC0FC0FFF00000003FFC00000000000000FFF00003F000FFF00003F0000000000000FFF00003F000FFF00003F0000000000000FFF00003F000FFF00003F0000000000000FFF00003F000FFF00003F0000000000000FFF00003F000FFF00003F0000000000000FFF00003F000FFF00003F0000000000000FC003F000FFF0000000000000000000000FC003F000FFF0000000000000000000000FC003F000FFF0000000000000000000000FC003F000FFF0000000000000000000000FC003F000FFF0000000000000000000000FC003F000FFF0000000000000000000000FC003FFC0FC0FFF000FFF0000000000000FC003FFC0FC0FFF000FFF0000000000000FC003FFC0FC0FFF000FFF0000000000000FC003FFC0FC0FFF000FFF0000000000000FC003FFC0FC0FFF000FFF0000000000000FC003FFC0FC0FFF000FFF0000000000000FFFFFFFFF03F03FFC0FC00000000000000FFFFFFFFF03F03FFC0FC00000000000000FFFFFFFFF03F03FFC0FC00000000000000FFFFFFFFF03F03FFC0FC00000000000000FFFFFFFFF03F03FFC0FC00000000000000FFFFFFFFF03F03FFC0FC00000000000000FC0FFFFFFFFF03FFFF03F0000000000000FC0FFFFFFFFF03FFFF03F0000000000000FC0FFFFFFFFF03FFFF03F0000000000000FC0FFFFFFFFF03FFFF03F0000000000000FC0FFFFFFFFF03FFFF03F0000000000000FC0FFFFFFFFF03FFFF03F0000000000000FFF03F03F03FFC0000FC00000000000000FFF03F03F03FFC0000FC00000000000000FFF03F03F03FFC0000FC00000000000000FFF03F03F03FFC0000FC00000000000000FFF03F03F03FFC0000FC00000000000000FFF03F03F03FFC0000FC00000000000000FFFFFFFFF000FFF00003F0000000000000FFFFFFFFF000FFF00003F0000000000000FFFFFFFFF000FFF00003F0000000000000FFFFFFFFF000FFF00003F0000000000000FFFFFFFFF000FFF00003F0000000000000FFFFFFFFF000FFF00003F0000000000000FFF00003FFC0FC003F0000000000000000FFF00003FFC0FC003F0000000000000000FFF00003FFC0FC003F0000000000000000FFF00003FFC0FC003F0000000000000000FFF00003FFC0FC003F0000000000000000FFF00003FFC0FC003F0000000000000000FFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW1800^LL1200^LH0,0^CI28
|
||||
^FO59,59^GFA,38880,38880,108,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO59,384^GFA,10980,10980,61,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07E3F1C7E381C71F8E071F8FC7000000000000000381C7E3F1C71C7E3F038FC71F81C71C7E38FC0E38E3F1F81C703F1C7E38E381F8FC71C703F1F8E38E07Line truncated
|
||||
^FO59,680^GFA,11286,11286,38,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FFFFFFFFFFFFFFFE00FFFFC01FFFF803FE0000003FFFFFFFFFFFFFFF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF800000000003FE00FF8000000FFFFFFE00FF803FE00000000000FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00007FFFE00007FFFFFFFF803FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE000000001FF007FFFFFF00003FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE000000001FF007FFFFFF00003FE00FFFFFFE00FF80000000000000000000FF803FFFFFF803FE00000Line truncated
|
||||
^FO591,680^GFA,8712,8712,33,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFF000FFF000FFF000FFF000FFF000FFF000000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000FFFFFF000000000FFF000000000000000FFF000000000000000000000000FFF000000000000000FFF000FFFFFFFFF000000000000000000000000000000000FFF000000000000000FFF000FFFFFFFFF000000000000000000000000000000000FFF000000000000000FFF000FFFFFFFFF000000000000000000000000000000000FFF000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW609^LL406^LH0,0^CI28
|
||||
^FO20,20^GB200,100,3^FS
|
||||
^FO240,20^GB60,60,30^FS
|
||||
^FO20,140^GB500,2,2^FS
|
||||
^FO560,20^GB2,200,2^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW900^LL600^LH0,0^CI28
|
||||
^FO30,30^GB296,148,4^FS
|
||||
^FO355,30^GB89,89,44^FS
|
||||
^FO30,207^GB739,3,3^FS
|
||||
^FO828,30^GB3,296,3^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,6 @@
|
||||
^XA^PW1800^LL1200^LH0,0^CI28
|
||||
^FO59,59^GB591,296,9^FS
|
||||
^FO709,59^GB177,177,89^FS
|
||||
^FO59,414^GB1478,6,6^FS
|
||||
^FO1655,59^GB6,591,6^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW812^LL203^LH0,0^CI28
|
||||
^FO32,32^GFA,2280,2280,38,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000034E7AECD9B333676EBB10B36F44CC49C9B3666CDC97BB71468DD1B8AEF6CCCD911B1D600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^FO32,144^A0N,24,10^FH_^FD_28_30_31_29_30_30_30_31_32_33_34_35_36_37_38_39_30_35_28_31_31_29_32_36_30_31_30_31_28_32_31_29_54_45_53_54_30_30_30_31^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW1200^LL300^LH0,0^CI28
|
||||
^FO48,48^GFA,9000,9000,75,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CLine truncated
|
||||
^FO48,212^A0N,36,15^FH_^FD_28_30_31_29_30_30_30_31_32_33_34_35_36_37_38_39_30_35_28_31_31_29_32_36_30_31_30_31_28_32_31_29_54_45_53_54_30_30_30_31^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW827^LL203^LH0,0^CI28
|
||||
^FO32,32^GFA,9000,9000,75,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CF0F0F0F3C3F3CFCCFCF0300CF0F3CFF3030F0F030C3F0C3CF0F3C3C3CF0F3F0C33FCFCF3F03303CC0F3F303CFC0CCFCFF3CF0F0F0F3C30303CF03F33C00000000000F30FC3FCCFCF0F3C3CLine truncated
|
||||
^FO32,162^GFA,3840,3840,96,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000003000000000000000000000000000000000000000000000000000000000200000000C0000000000000000000000000040000000180000000000000000000000000000000000000000000000000000000000000000000000000000000100000000100000000000000000000000000000000000000000000000000000000040000000040000000000000000000000000080000000080000000000000000000000000000000000000000000000000000000000000000000000000000000201F000C00800F801F001F000C003E007C000403FC01F80FFE07C007E00F801FE008018001802003E007E00F8003001F000600100F800600407FF0FFE07E07FF03E007C007C003000000000000000000000000000000000000000000000000004031C03C004018E031C031C03C00E300C7000407FC030C0FFC0C700C3018E03FE01007800780100E300C3018E00F0031C01E002038C01E00207FF0FFE0C307FF06380C700C700F00000000000000000000000000000000000000000000000000406040C40060302060406040C400818181000C0600060608041810181830203000101880188018081818183020310060406200202060620030020080018180200C081810181031000000000000000000000000000000000000000000000000008040600400202030406040600401808101800C06000402080C101810082030300020008000800818081008203001004060020040602002001002008001008020080C10181018010000000000000000000000000000000000000000000000000080C0200400206010C020C020040100C300801C0400040200083008100860102000200080008008100C100860100100C020020040403002001002008003008020180430083008010000000000000000000000000000000000000000000000000180C0200400306010C020C020040000C000803C040004000018300810086010200060008000800C000C100060100100C0200200C0003002001802008003000020180430083008010000000000000000000000000000000000000000000000000100C0200400106010C020C0200400008000802404000400001030081008601020004000800080040008100060100100C020020080002002000802008001000020180430083008010000000000000000000000000000000000000000000000000100C0200400106010C020C0200400008001806404F00400001010181008601027804000800080040008100060100100C020020080002002000802008001800020180430083008010000000000000000000000000000000000000000000000000300C0200400186010C020C02004000080030044079C040000301830100860103CE0C000800080060008100060100100C020020180002002000C02008001C00020180430083008010000000000000000000000000000000000000000000000000300C0200400186010C020C020040001000E00C4060405F800200EE0181860103020C00080008006001017E060100100C020020180004002000C02008000700020180430083008010000000000000000000000000000000000000000000000000200C0200400086010C020C020040001001E00840406070C00600FE00C386010203080008000800200101C3060100100C02002010000400200040200FF801C0020180430083008010000000000000000000000000000000000000000000000000200C0200400086010C020C020040002000301840C0206060040183007E8601060108000800080020020181860100100C020020100008002000402008000070020180430083008010000000000000000000000000000000000000000000000000200C0200400086010C020C020040006000103040002040200C010180008601000108000800080020060100860100100C020020100018002000402008000018020180430083008010000000000000000000000000000000000000000000000000200C0200400086010C020C02004000C00008204000204020080300800086010001080008000800200C0100860100100C020020100030002000402008000008020180430083008010000000000000000000000000000000000000000000000000200C0200400086010C020C0200400080000860400020402008030080008601000108000800080020080100860100100C02002010002000200040200800000C020180430083008010000000000000000000000000000000000000000000000000300C0200400186010C020C0200400100000860C0002040201803008000860100010C000800080060100100860100100C020020180040002000C0200800200C020180430083008010000000000000000000000000000000000000000000000000100C0200400186010C020C02004003003008FFF0C020402010030081008601060104000800080060300100860100100C0200200800C0002000C0200800200C02018043008300801000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW1222^LL300^LH0,0^CI28
|
||||
^FO36,36^GFA,20160,20160,112,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Line truncated
|
||||
^FO36,206^GFA,8178,8178,141,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000080000000000000000000000000000000000000010000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000E000000000000C0000000000000000000000000000000000000038000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000001C0000000000006000000000000000000000000000000000000007000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006003F00000C000C0003F00007E0000FC0000600007E0001F800000800FFF8001F8007FFF801F80001F80007E000FFF80018001800003000300007E0001F80007E0000180003F00000C00006003F000018001801FFFF07FFF800FE01FFFF003F0000FC0001F80000C00000000000000000000000000000000000000000000000000000000000000000000000000C00FFC0007C000E000FFC001FF8003FF0003E0001FF8007FE00000800FFF8007FE007FFF807FE0007FE001FF800FFF8003000F80001F00038001FF8007FE001FF8000F8000FFC0007C0000C00FFC000F8001C01FFFF07FFFC03FF81FFFF00FFC003FF0007FE0007C00000000000000000000000000000000000000000000000000000000000000000000000001C01E0E001FC0006001E0E003C1C00783800FE000383C00F0700001800FFF800E0F007FFF80F07000E0F003C1C00FFF8007003F80007F0001800383C00E0F003C1C003F8001E0E001FC0001C01C1E003F8000C01FFFF07FFF80783C1FFFF01E0E00783800F07001FC00000000000000000000000000000000000000000000000000000000000000000000000001803807007CC000300380700700E00E01C03E6000700E01C0380003800C00001C0380600301C03801C0380700E00C00000600F98001F30000C00700E01C0380700E00F98003807007CC000180380700F9800060001800600000E00E001800380700E01C01C03807CC000000000000000000000000000000000000000000000000000000000000000000000000030030038060C000380300380600700C00E0306000E00E01801C0003800C0000380180600301801C0380180600700C00000C00C18001830000E00E00E0380180600700C1800300Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,3 @@
|
||||
^XA^PW812^LL203^LH0,0^CI28
|
||||
^FO32,32^GFA,4320,4320,36,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,3 @@
|
||||
^XA^PW1200^LL300^LH0,0^CI28
|
||||
^FO48,48^GFA,9720,9720,54,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000003F1C0E001F8FF8038E00FC7007E3FE3803F1FF0071C0FC7FC0E3FE3FFC7E3F03F03F03F1F81F81FF1C0FC01FF1C7E0000000000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,3 @@
|
||||
^XA^PW812^LL203^LH0,0^CI28
|
||||
^FO32,32^GFA,1968,1968,16,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFE38E00FFFFF80000000000000003FFFFE38E00FFFFF80000000000000003FFFFE38E00FFFFF800000000000000038000E071F8E0003800000000000000038000E071F8E0003800000000000000038000E071F8E0003800000000000000038FF8E07038E3FE3800000000000000038FF8E07038E3FE3800000000000000038FF8E07038E3FE3800000000000000038FF8E38038E3FE3800000000000000038FF8E38038E3FE3800000000000000038FF8E38038E3FE3800000000000000038FF8E071C0E3FE3800000000000000038FF8E071C0E3FE3800000000000000038FF8E071C0E3FE3800000000000000038000E00FC0E0003800000000000000038000E00FC0E0003800000000000000038000E00FC0E000380000000000000003FFFFE38E38FFFFF80000000000000003FFFFE38E38FFFFF80000000000000003FFFFE38E38FFFFF800000000000000000000007E3800000000000000000000000000007E3800000000000000000000000000007E3800000000000000000000000E3FE38E3F00703800000000000000000E3FE38E3F00703800000000000000000E3FE38E3F007038000000000000000071F80381C7FC7E38000000000000000071F80381C7FC7E38000000000000000071F80381C7FC7E380000000000000000703FE381C00381F80000000000000000703FE381C00381F80000000000000000703FE381C00381F8000000000000000381C003FFFFFC71F8000000000000000381C003FFFFFC71F8000000000000000381C003FFFFFC71F80000000000000003FFF8FFF1C0E3FE380000000000000003FFF8FFF1C0E3FE380000000000000003FFF8FFF1C0E3FE380000000000000000000003F0071FF0000000000000000000000003F0071FF0000000000000000000000003F0071FF0000000000000000003FFFFE0703FE3F1C00000000000000003FFFFE0703FE3F1C00000000000000003FFFFE0703FE3F1C000000000000000038000E3F1C01C0FC000000000000000038000E3F1C01C0FC000000000000000038000E3F1C01C0FC000000000000000038FF8E38E3FE38FF800000000000000038FF8E38E3FE38FF800000000000000038FF8E38E3FE38FF800000000000000038FF8E07E00FC0FC000000000000000038FF8E07E00FC0FC000000000000000038FF8E07E00FC0FC000000000000000038FF8E38E3F03FE3800000000000000038FF8E38E3F03FE3800000000000000038FF8E38E3F03FE3800000000000000038000E00E07FC01F800000000000000038000E00E07FC01F800000000000000038000E00E07FC01F80000000000000003FFFFE07FFF038E380000000000000003FFFFE07FFF038E380000000000000003FFFFE07FFF038E3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,3 @@
|
||||
^XA^PW812^LL203^LH0,0^CI28
|
||||
^FO32,32^GFA,4320,4320,36,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000F30C03CFC0CC0F303CFCC0F3F0330F3F0CFCFF3CF0F0F0F3C3C3F30F03F33C0000000000Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,3 @@
|
||||
^XA^PW812^LL203^LH0,0^CI28
|
||||
^FO32,32^GFA,3770,3770,29,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F30FC330FCCC0000000000CC0F30F0C30F3FCCC0F3C0CCCCC03030C303F3Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,3 @@
|
||||
^XA^PW1200^LL300^LH0,0^CI28
|
||||
^FO48,48^GFA,8580,8580,44,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38E380070070381C01FF1C0FF81C703FE38E000000000000000038E00FC703F0381C0FC7FF8E3803F1F8038E38Line truncated
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW609^LL406^LH0,0^CI28
|
||||
^FO20,20^GFA,144,144,6,FFFFFFFFFFFFFFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFFFFFFFFFFFFFF^FS
|
||||
^FO100,60^GFA,144,144,6,FFFFFFFFFFFFFFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFFFFFFFFFFFFFF^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW900^LL600^LH0,0^CI28
|
||||
^FO30,30^GFA,144,144,6,FFFFFFFFFFFFFFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFFFFFFFFFFFFFF^FS
|
||||
^FO148,89^GFA,144,144,6,FFFFFFFFFFFFFFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFFFFFFFFFFFFFF^FS
|
||||
^XZ
|
||||
@@ -0,0 +1,4 @@
|
||||
^XA^PW1800^LL1200^LH0,0^CI28
|
||||
^FO59,59^GFA,144,144,6,FFFFFFFFFFFFFFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFFFFFFFFFFFFFF^FS
|
||||
^FO296,177^GFA,144,144,6,FFFFFFFFFFFFFFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFF800000FFFFFFFFFFFFFFFFFF^FS
|
||||
^XZ
|
||||
Loaded 100 of 117 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user