All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ALSA: hda/realtek: Enable internal speakers on Razer Blade 16 (2025)
@ 2026-06-20 14:41 Christopher Höner
  2026-06-21 20:57 ` [PATCH v2] " Christopher Höner
  0 siblings, 1 reply; 3+ messages in thread
From: Christopher Höner @ 2026-06-20 14:41 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, linux-kernel, Christopher Höner

On the Razer Blade 16 (2025) (Realtek ALC298, PCI SSID 1a58:300e) the
internal speakers are driven through an external smart amplifier whose
crossover, voicing and protection live in a DSP reached over a vendor
coef mailbox on NID 0x20.  Both speaker pins are fed from the same DAC
through a mixer and the amplifier does the crossover.  The BIOS leaves
the tweeter pin (NID 0x14) disabled (default config 0x411111f0), so the
tweeters are not exposed and the amplifier is never programmed for this
machine under Linux.

Add a fixup for the machine that:

  - re-exposes the tweeter pin (NID 0x14) as an internal speaker and
    sequences it ahead of the woofer pin (NID 0x17) in the same
    association (2), so the tweeter is the pin the parser brings up and
    the controls come out as "Speaker"/"Bass Speaker", with auto-mute
    on headphone insertion;

  - explicitly brings up the second speaker pin (NID 0x17): the parser
    routes it to a path that stays silent for this layout, so the fixup
    points it at the mixer feeding the first pin (the speaker DAC),
    powers it on, switches it to output and unmutes it;

  - programs the external DSP over the NID-0x20 mailbox at init (boot
    and resume) and parks the amplifier; it is woken for playback and
    parked again afterwards from a pcm_playback_hook, like the existing
    Samsung and LG Gram amplifier fixups.

The DSP sequence was obtained by capturing the Windows driver's
HD-audio traffic via QEMU/VFIO passthrough of the controller and
reducing it to the NID-0x20 writes; everything else the parser
rebuilds.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=207423
Signed-off-by: Christopher Höner <christopher-hoener@web.de>
---
Notes (not part of the commit message - for reviewers):

  * Tested on Linux 7.1 (mainline + this patch) on a Razer Blade 16
    2025 (RZ09-0528).  Both internal speakers play; auto-mute works on
    headphone insertion; the amplifier powers up on playback and parks
    on idle (the PCM goes to "closed" once PipeWire suspends the
    stream); audio survives suspend/resume.  No power-on pop is heard
    with this sequencing: the tweeter is brought up by the parser and
    the woofer is already powered by the BIOS.

  * The four explicit verbs on NID 0x17 mirror exactly what is needed
    by hand to make the second pin audible: select connection 1 (the
    mixer fed by the speaker DAC, the same one NID 0x14 uses), set D0,
    pin output, and output unmute.  Without them only the first pin
    plays.

  * The init table is a faithful capture of the external DSP
    programming and is therefore large; after it runs the amplifier is
    parked with the same sequence used at runtime sleep.  It could be
    compacted, or moved to a request_firmware() blob the way other
    smart-amp codecs load their data; guidance welcome.

  * The captured sequence is the OS-level programming only and contains
    no DSP coefficient-bank loads; those appear to be primed by the
    platform firmware at power-on.  Cold boot and S3 are covered;
    hibernation (S4) should be too, as the firmware re-primes on the
    power cycle, but is worth confirming.

 sound/hda/codecs/realtek/alc269.c | 884 ++++++++++++++++++++++++++++++
 1 file changed, 884 insertions(+)

diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 5d09baa..3daec26 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -4041,6 +4041,8 @@ enum {
 	ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS,
 	ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS,
 	ALC298_FIXUP_LG_GRAM_STYLE_14,
+	ALC298_FIXUP_RAZER_BLADE16_PINS,
+	ALC298_FIXUP_RAZER_BLADE16,
 	ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
 	ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
 	ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
@@ -4205,7 +4207,888 @@ static void alc287_fixup_lenovo_yoga_book_9i(struct hda_codec *codec,
 	__snd_hda_apply_fixup(codec, id, action, 0);
 }
 
+/*
+ * Razer Blade 16 (2025): Realtek ALC298 driving an external smart amp.
+ * Crossover, voicing and speaker protection live in an external DSP reached
+ * through a vendor-coef mailbox on NID 0x20.  The Windows driver programs the
+ * DSP at boot and powers it up/down around playback; this replays the same
+ * traffic.  The sequence was captured from the Windows driver via QEMU/VFIO
+ * passthrough of the HD-audio controller and reduced to the NID-0x20 traffic
+ * (everything else the HDA parser rebuilds).  NID 0x14, the BIOS-disabled
+ * tweeter pin, is re-exposed via a pin-config override so the parser drives it
+ * as a normal internal speaker (shared volume/mute, auto-mute on headphone
+ * insertion).
+ *
+ * Each table entry is either a plain codec coef write or an external-DSP
+ * mailbox write:
+ *   strobe == 0:  coef[addr] = lo
+ *   strobe != 0:  amp[addr]  = (hi << 16) | lo, bank selected on port 0x89 and
+ *                 committed by the strobe opcode.
+ */
+/*
+ * Razer Blade 16 (2025): the internal speakers sit behind an external
+ * smart amplifier whose DSP is programmed through a vendor coef mailbox
+ * on node 0x20.  Each entry below is one programming step.
+ */
+struct alc298_rb16_op {
+	u16 bank;	/* mailbox bank (port 0x89); unused for a plain coef */
+	u16 addr;	/* mailbox register, or plain coef index */
+	u16 hi;		/* mailbox high word; unused for a plain coef */
+	u16 lo;		/* mailbox low word, or plain coef value */
+	u16 strobe;	/* mailbox commit opcode; 0 marks a plain coef write */
+};
+
+/*
+ * Run one op-table: a plain coef write when strobe == 0, otherwise a
+ * mailbox register packed into the node 0x20 PROC_COEF stream.
+ */
+static void alc298_rb16_apply(struct hda_codec *codec,
+			      const struct alc298_rb16_op *seq, int num)
+{
+	int i;
+
+	for (i = 0; i < num; i++) {
+		if (!seq[i].strobe) {
+			alc_write_coef_idx(codec, seq[i].addr, seq[i].lo);
+			continue;
+		}
+		alc_write_coef_idx(codec, 0x89, seq[i].bank);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x23);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].addr);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].hi);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].lo);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].strobe);
+	}
+}
+
+/* configure the external DSP over the node 0x20 mailbox */
+static const struct alc298_rb16_op alc298_rb16_amp_init[] = {
+	{ 0x0000, 0x0010, 0x0000, 0x0e21, 0x0000 },
+	{ 0x0000, 0x0022, 0x0000, 0x0010, 0x0000 },
+	{ 0x0000, 0x0052, 0x0000, 0xd191, 0x0000 },
+	{ 0x0000, 0xea00, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf102, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf103, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+	{ 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0x000e, 0x0000, 0x6f40, 0x0000 },
+	{ 0x0000, 0x0010, 0x0000, 0x0e21, 0x0000 },
+	{ 0x0000, 0x0055, 0x0000, 0xc840, 0x0000 },
+	{ 0x0000, 0x0008, 0x0000, 0x0fcf, 0x0000 },
+	{ 0x0000, 0x0008, 0x0000, 0x0fcf, 0x0000 },
+	{ 0x0000, 0x002d, 0x0000, 0x4020, 0x0000 },
+	{ 0x0000, 0x0008, 0x0000, 0x0fcf, 0x0000 },
+	{ 0x0000, 0x0080, 0x0000, 0x0011, 0x0000 },
+	{ 0x0000, 0x002b, 0x0000, 0x0c10, 0x0000 },
+	{ 0x0000, 0x0003, 0x0000, 0x0042, 0x0000 },
+	{ 0x0000, 0x0005, 0x0000, 0x2be0, 0x0000 },
+	{ 0x0000, 0x0008, 0x0000, 0x0fcf, 0x0000 },
+	{ 0x0000, 0x000c, 0x0000, 0x811e, 0x0000 },
+	{ 0x0000, 0x000e, 0x0000, 0x6f40, 0x0000 },
+	{ 0x0000, 0x000f, 0x0000, 0x0062, 0x0000 },
+	{ 0x0000, 0x0010, 0x0000, 0x0e21, 0x0000 },
+	{ 0x0000, 0x0019, 0x0000, 0x1317, 0x0000 },
+	{ 0x0000, 0x002b, 0x0000, 0x0c10, 0x0000 },
+	{ 0x0000, 0x002d, 0x0000, 0x4020, 0x0000 },
+	{ 0x0000, 0x004f, 0x0000, 0xd409, 0x0000 },
+	{ 0x0000, 0x0050, 0x0000, 0x3078, 0x0000 },
+	{ 0x0000, 0x0052, 0x0000, 0xd191, 0x0000 },
+	{ 0x0000, 0x0054, 0x0000, 0xcf00, 0x0000 },
+	{ 0x0000, 0x0055, 0x0000, 0xc840, 0x0000 },
+	{ 0x0000, 0x0056, 0x0000, 0x001e, 0x0000 },
+	{ 0x0000, 0x0066, 0x0000, 0x0404, 0x0000 },
+	{ 0x0000, 0x0067, 0x0000, 0x1110, 0x0000 },
+	{ 0x0000, 0x0080, 0x0000, 0x0011, 0x0000 },
+	{ 0x0000, 0x008e, 0x0000, 0x0020, 0x0000 },
+	{ 0x0000, 0x0099, 0x0000, 0x8000, 0x0000 },
+	{ 0x0000, 0x0010, 0x0000, 0x0f21, 0x0000 },
+	{ 0x0000, 0x004f, 0x0000, 0xd409, 0x0000 },
+	{ 0x0000, 0x0005, 0x0000, 0x2be0, 0x0000 },
+	{ 0x0000, 0x0010, 0x0000, 0x0e21, 0x0000 },
+	{ 0x0000, 0xc000, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
+	{ 0x0000, 0xf20d, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf212, 0x0000, 0x003e, 0xb031 },
+	{ 0x0000, 0xc001, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc003, 0x0000, 0x0022, 0xb031 },
+	{ 0x0000, 0xc004, 0x0000, 0x0044, 0xb031 },
+	{ 0x0000, 0xc005, 0x0000, 0x0044, 0xb031 },
+	{ 0x0000, 0xc007, 0x0000, 0x0064, 0xb031 },
+	{ 0x0000, 0xc00e, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xf223, 0x0000, 0x007f, 0xb031 },
+	{ 0x0000, 0xf224, 0x0000, 0x00db, 0xb031 },
+	{ 0x0000, 0xf225, 0x0000, 0x00ee, 0xb031 },
+	{ 0x0000, 0xf226, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xf227, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xf21a, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xf242, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xc120, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xc321, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xc200, 0x0000, 0x00d8, 0xb031 },
+	{ 0x0000, 0xc201, 0x0000, 0x0027, 0xb031 },
+	{ 0x0000, 0xc202, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xc400, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc401, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xc402, 0x0000, 0x00e0, 0xb031 },
+	{ 0x0000, 0xc403, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc404, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xc406, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xc407, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc408, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xc300, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xdf5f, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xdf60, 0x0000, 0x00a7, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x0084, 0xb031 },
+	{ 0x0000, 0xc206, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x0065, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0031, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xe706, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xe707, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xe806, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xe807, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xce04, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xce05, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xce06, 0x0000, 0x0031, 0xb031 },
+	{ 0x0000, 0xce07, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xcf04, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xcf05, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xcf06, 0x0000, 0x0031, 0xb031 },
+	{ 0x0000, 0xcf07, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xc130, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xe000, 0x0000, 0x00a8, 0xb031 },
+	{ 0x4100, 0x1888, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xea00, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xed00, 0x0000, 0x0090, 0xb031 },
+	{ 0x0000, 0xcc2c, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc2d, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xcc2e, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xcc2f, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcd2c, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd2d, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xcd2e, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xcd2f, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcc24, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc25, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xcc26, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xcc27, 0x0000, 0x0085, 0xb031 },
+	{ 0x0000, 0xcd24, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd25, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xcd26, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xcd27, 0x0000, 0x0085, 0xb031 },
+	{ 0x0000, 0xcc20, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc21, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc22, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcd20, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd21, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd22, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcc16, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xcc17, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd16, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xcd17, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc29, 0x0000, 0x005d, 0xb031 },
+	{ 0x0000, 0xcc2a, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xcd29, 0x0000, 0x005d, 0xb031 },
+	{ 0x0000, 0xcd2a, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xcc31, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xcc32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc33, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc34, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd31, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xcd32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd33, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd34, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc36, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xcc37, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcc38, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcc39, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcd36, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xcd37, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcd38, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcd39, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcc09, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc0a, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xcc0b, 0x0000, 0x007c, 0xb031 },
+	{ 0x0000, 0xcc0c, 0x0000, 0x005b, 0xb031 },
+	{ 0x0000, 0xcd09, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd0a, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xcd0b, 0x0000, 0x007c, 0xb031 },
+	{ 0x0000, 0xcd0c, 0x0000, 0x005b, 0xb031 },
+	{ 0x0000, 0xcc0e, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc0f, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xcc10, 0x0000, 0x003e, 0xb031 },
+	{ 0x0000, 0xcc11, 0x0000, 0x002d, 0xb031 },
+	{ 0x0000, 0xcd0e, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd0f, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xcd10, 0x0000, 0x003e, 0xb031 },
+	{ 0x0000, 0xcd11, 0x0000, 0x002d, 0xb031 },
+	{ 0x0000, 0xccd6, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xccd7, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xcdd6, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcdd7, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xccd8, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xccd9, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xcdd8, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcdd9, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xccda, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xccdb, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xcdda, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcddb, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xc320, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xc321, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xe604, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xdd00, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xdc19, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdc1a, 0x0000, 0x006a, 0xb031 },
+	{ 0x0000, 0xdc1b, 0x0000, 0x00aa, 0xb031 },
+	{ 0x0000, 0xdc1c, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xdc1d, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdc1e, 0x0000, 0x0027, 0xb031 },
+	{ 0x0000, 0xdc1f, 0x0000, 0x0062, 0xb031 },
+	{ 0x0000, 0xdc20, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xde19, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xde1a, 0x0000, 0x006a, 0xb031 },
+	{ 0x0000, 0xde1b, 0x0000, 0x00aa, 0xb031 },
+	{ 0x0000, 0xde1c, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xde1d, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xde1e, 0x0000, 0x0027, 0xb031 },
+	{ 0x0000, 0xde1f, 0x0000, 0x0062, 0xb031 },
+	{ 0x0000, 0xde20, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xdb32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdd32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdb33, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xdd33, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xdb34, 0x0000, 0x001a, 0xb031 },
+	{ 0x0000, 0xdd34, 0x0000, 0x001a, 0xb031 },
+	{ 0x0000, 0xdb15, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xdd15, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xdb17, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xdd17, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xdb94, 0x0000, 0x0070, 0xb031 },
+	{ 0x0000, 0xdd94, 0x0000, 0x0070, 0xb031 },
+	{ 0x0000, 0xdb19, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xdd19, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x001c, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xdb04, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xdb05, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xdd04, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xdd05, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xdbbb, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xdbbc, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xdbbd, 0x0000, 0x00f3, 0xb031 },
+	{ 0x0000, 0xdbbe, 0x0000, 0x00cf, 0xb031 },
+	{ 0x0000, 0xddbb, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xddbc, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xddbd, 0x0000, 0x00f3, 0xb031 },
+	{ 0x0000, 0xddbe, 0x0000, 0x00cf, 0xb031 },
+	{ 0x0000, 0xdb01, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xdd01, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xdb08, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xdd08, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xdc52, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xde52, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0xdf0a, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdf0b, 0x0000, 0x007f, 0xb031 },
+	{ 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xdf01, 0x0000, 0x0073, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xebcb, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeb10, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb11, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xeb12, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xeb13, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xeb14, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb15, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xeb16, 0x0000, 0x0069, 0xb031 },
+	{ 0x0000, 0xeb21, 0x0000, 0x0011, 0xb031 },
+	{ 0x0000, 0xeb22, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xeb23, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeb24, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb25, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xeb26, 0x0000, 0x0055, 0xb031 },
+	{ 0x0000, 0xeb27, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xeb28, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb29, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xeb2a, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xeb2b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xeb30, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb31, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xeb32, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xeb33, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb34, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb35, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xeb36, 0x0000, 0x0024, 0xb031 },
+	{ 0x0000, 0xeb37, 0x0000, 0x0068, 0xb031 },
+	{ 0x0000, 0xeb40, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb41, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xeb42, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xeb43, 0x0000, 0x00e8, 0xb031 },
+	{ 0x0000, 0xeb44, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb45, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xeb46, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xeb47, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb48, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb49, 0x0000, 0x00c5, 0xb031 },
+	{ 0x0000, 0xeb4a, 0x0000, 0x0032, 0xb031 },
+	{ 0x0000, 0xeb4b, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeb50, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb51, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xeb52, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xeb53, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb54, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb55, 0x0000, 0x007d, 0xb031 },
+	{ 0x0000, 0xeb56, 0x0000, 0x00d9, 0xb031 },
+	{ 0x0000, 0xeb57, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xeb60, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xeb61, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xeb62, 0x0000, 0x00b5, 0xb031 },
+	{ 0x0000, 0xeb63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb64, 0x0000, 0x00fa, 0xb031 },
+	{ 0x0000, 0xeb65, 0x0000, 0x0086, 0xb031 },
+	{ 0x0000, 0xeb66, 0x0000, 0x00a8, 0xb031 },
+	{ 0x0000, 0xeb67, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb68, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xeb69, 0x0000, 0x009a, 0xb031 },
+	{ 0x0000, 0xeb6a, 0x0000, 0x002f, 0xb031 },
+	{ 0x0000, 0xeb6b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xebb6, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeb70, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xeb71, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xeb72, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xeb73, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xeb74, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xeb75, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xeb76, 0x0000, 0x002c, 0xb031 },
+	{ 0x0000, 0xeb77, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xeb80, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb81, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xeb82, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xeb83, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xeb84, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xeb85, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xeb86, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xeb87, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xeb88, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb89, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xeb8a, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xeb8b, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xebb8, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeb90, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xeb91, 0x0000, 0x008b, 0xb031 },
+	{ 0x0000, 0xeb92, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xeb93, 0x0000, 0x0064, 0xb031 },
+	{ 0x0000, 0xeb94, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xeb95, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xeb96, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xeb97, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xeba0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeba1, 0x0000, 0x0091, 0xb031 },
+	{ 0x0000, 0xeba2, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xeba3, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeba4, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xeba5, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeba6, 0x0000, 0x0093, 0xb031 },
+	{ 0x0000, 0xeba7, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xeba8, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xeba9, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xebaa, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xebab, 0x0000, 0x006c, 0xb031 },
+	{ 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
+	{ 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xeb00, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xeb01, 0x0000, 0x00a9, 0xb031 },
+	{ 0x0000, 0xeb02, 0x0000, 0x00df, 0xb031 },
+	{ 0x0000, 0xeb03, 0x0000, 0x007b, 0xb031 },
+	{ 0x0000, 0xeb05, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xeb06, 0x0000, 0x005a, 0xb031 },
+	{ 0x0000, 0xeb07, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xd0cb, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xd0b0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd010, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd011, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd012, 0x0000, 0x0092, 0xb031 },
+	{ 0x0000, 0xd013, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd014, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd015, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xd016, 0x0000, 0x0072, 0xb031 },
+	{ 0x0000, 0xd017, 0x0000, 0x00b0, 0xb031 },
+	{ 0x0000, 0xd020, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd021, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd022, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd023, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd024, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd025, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd026, 0x0000, 0x0090, 0xb031 },
+	{ 0x0000, 0xd027, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xd028, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd029, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd02a, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd02b, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xce6a, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xdb04, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xdb05, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xcc00, 0x0000, 0x00c1, 0xb031 },
+	{ 0x0000, 0xca02, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xca00, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca62, 0x0000, 0x0077, 0xb031 },
+	{ 0x0000, 0xca65, 0x0000, 0x0082, 0xb031 },
+	{ 0x0000, 0xca68, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xca75, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xca7b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc860, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc861, 0x0000, 0x00e5, 0xb031 },
+	{ 0x0000, 0xc862, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xc863, 0x0000, 0x00c6, 0xb031 },
+	{ 0x0000, 0xc864, 0x0000, 0x00ba, 0xb031 },
+	{ 0x0000, 0xc865, 0x0000, 0x0061, 0xb031 },
+	{ 0x0000, 0xc867, 0x0000, 0x0017, 0xb031 },
+	{ 0x0000, 0xc868, 0x0000, 0x00ed, 0xb031 },
+	{ 0x0000, 0xc869, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xc86a, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xc86b, 0x0000, 0x00e2, 0xb031 },
+	{ 0x0000, 0xc875, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xc87b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xc836, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc8a0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc833, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xc834, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc83f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc83e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc83a, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xc83b, 0x0000, 0x0089, 0xb031 },
+	{ 0x0000, 0xc830, 0x0000, 0x0013, 0xb031 },
+	{ 0x0000, 0xc826, 0x0000, 0x00d1, 0xb031 },
+	{ 0x0000, 0xc890, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc823, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc824, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xc82f, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xc82e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc820, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc816, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc880, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xc813, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc814, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc81f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc81e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc81a, 0x0000, 0x0066, 0xb031 },
+	{ 0x0000, 0xc81b, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc810, 0x0000, 0x000d, 0xb031 },
+	{ 0x0000, 0xc846, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc8d0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc844, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc84f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc84e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc84a, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc84b, 0x0000, 0x0056, 0xb031 },
+	{ 0x0000, 0xc800, 0x0000, 0x00b0, 0xb031 },
+	{ 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xc500, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc501, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc502, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc503, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc504, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc505, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc506, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc507, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc510, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc511, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc512, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc513, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc514, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc515, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc516, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc517, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc518, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xd251, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xecb0, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec10, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec11, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xec12, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xec13, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xec14, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec15, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xec16, 0x0000, 0x0069, 0xb031 },
+	{ 0x0000, 0xec21, 0x0000, 0x0011, 0xb031 },
+	{ 0x0000, 0xec22, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xec23, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xec24, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec25, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xec26, 0x0000, 0x0055, 0xb031 },
+	{ 0x0000, 0xec27, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xec28, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec29, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xec2a, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xec2b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xecb2, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec30, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec31, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xec32, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xec33, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec34, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec35, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xec36, 0x0000, 0x0024, 0xb031 },
+	{ 0x0000, 0xec37, 0x0000, 0x0068, 0xb031 },
+	{ 0x0000, 0xec40, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec41, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xec42, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xec43, 0x0000, 0x00e8, 0xb031 },
+	{ 0x0000, 0xec44, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec45, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xec46, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xec47, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec48, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec49, 0x0000, 0x00c5, 0xb031 },
+	{ 0x0000, 0xec4a, 0x0000, 0x0032, 0xb031 },
+	{ 0x0000, 0xec4b, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xecb4, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec50, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec51, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xec52, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xec53, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec54, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec55, 0x0000, 0x007d, 0xb031 },
+	{ 0x0000, 0xec56, 0x0000, 0x00d9, 0xb031 },
+	{ 0x0000, 0xec57, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec60, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xec61, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xec62, 0x0000, 0x00b5, 0xb031 },
+	{ 0x0000, 0xec63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec64, 0x0000, 0x00fa, 0xb031 },
+	{ 0x0000, 0xec65, 0x0000, 0x0086, 0xb031 },
+	{ 0x0000, 0xec66, 0x0000, 0x00a8, 0xb031 },
+	{ 0x0000, 0xec67, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec68, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xec69, 0x0000, 0x009a, 0xb031 },
+	{ 0x0000, 0xec6a, 0x0000, 0x002f, 0xb031 },
+	{ 0x0000, 0xec6b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xecb6, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xec70, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xec71, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xec72, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xec73, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xec74, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xec75, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xec76, 0x0000, 0x002c, 0xb031 },
+	{ 0x0000, 0xec77, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xec80, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec81, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xec82, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xec83, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xec84, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xec85, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xec86, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xec87, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xec88, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec89, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xec8a, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xec8b, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xecb8, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xec90, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xec91, 0x0000, 0x008b, 0xb031 },
+	{ 0x0000, 0xec92, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xec93, 0x0000, 0x0064, 0xb031 },
+	{ 0x0000, 0xec94, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xec95, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xec96, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xec97, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xeca0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeca1, 0x0000, 0x0091, 0xb031 },
+	{ 0x0000, 0xeca2, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xeca3, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeca4, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xeca5, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeca6, 0x0000, 0x0093, 0xb031 },
+	{ 0x0000, 0xeca7, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xeca8, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xeca9, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xecaa, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xecab, 0x0000, 0x006c, 0xb031 },
+	{ 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
+	{ 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xec00, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xec01, 0x0000, 0x00a9, 0xb031 },
+	{ 0x0000, 0xec02, 0x0000, 0x00df, 0xb031 },
+	{ 0x0000, 0xec03, 0x0000, 0x007b, 0xb031 },
+	{ 0x0000, 0xec05, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xec06, 0x0000, 0x005a, 0xb031 },
+	{ 0x0000, 0xec07, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xd1b0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd110, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd111, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd112, 0x0000, 0x0092, 0xb031 },
+	{ 0x0000, 0xd113, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd114, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd115, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xd116, 0x0000, 0x0072, 0xb031 },
+	{ 0x0000, 0xd117, 0x0000, 0x00b0, 0xb031 },
+	{ 0x0000, 0xd120, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd121, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd122, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd123, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd124, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd125, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd126, 0x0000, 0x0090, 0xb031 },
+	{ 0x0000, 0xd127, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xd128, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd129, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd12a, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd12b, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xdd04, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xdd05, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xca12, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca82, 0x0000, 0x0077, 0xb031 },
+	{ 0x0000, 0xca85, 0x0000, 0x0082, 0xb031 },
+	{ 0x0000, 0xca88, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xca95, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xca9b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc960, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc961, 0x0000, 0x00e5, 0xb031 },
+	{ 0x0000, 0xc962, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xc963, 0x0000, 0x00c6, 0xb031 },
+	{ 0x0000, 0xc964, 0x0000, 0x00ba, 0xb031 },
+	{ 0x0000, 0xc965, 0x0000, 0x0061, 0xb031 },
+	{ 0x0000, 0xc967, 0x0000, 0x0017, 0xb031 },
+	{ 0x0000, 0xc968, 0x0000, 0x00ed, 0xb031 },
+	{ 0x0000, 0xc969, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xc96a, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xc96b, 0x0000, 0x00e2, 0xb031 },
+	{ 0x0000, 0xc975, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xc97b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xc936, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc9a0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc933, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xc934, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc93f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc93e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc93a, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xc93b, 0x0000, 0x0089, 0xb031 },
+	{ 0x0000, 0xc930, 0x0000, 0x0013, 0xb031 },
+	{ 0x0000, 0xc926, 0x0000, 0x00d1, 0xb031 },
+	{ 0x0000, 0xc990, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc923, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc924, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xc92f, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xc92e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc920, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc916, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc980, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xc913, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc914, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc91f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc91e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc91a, 0x0000, 0x0066, 0xb031 },
+	{ 0x0000, 0xc91b, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc910, 0x0000, 0x000d, 0xb031 },
+	{ 0x0000, 0xc946, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc9d0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc944, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc94f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc94e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc94a, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc94b, 0x0000, 0x0056, 0xb031 },
+	{ 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xc600, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc601, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc602, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc603, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc604, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc605, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc606, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc607, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc610, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc611, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc612, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc613, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc614, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc615, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc616, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc617, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc618, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xc802, 0x0000, 0x00d2, 0xb031 },
+	{ 0x0000, 0xc902, 0x0000, 0x00d2, 0xb031 },
+	{ 0x0000, 0xc800, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xd252, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xdbb5, 0x0041, 0xd27f, 0xb037 },
+	{ 0x0000, 0xddb5, 0x0040, 0x6e3b, 0xb037 },
+	{ 0x0000, 0xdb93, 0x0000, 0x009e, 0xb033 },
+	{ 0x0000, 0xdd93, 0x0000, 0x009e, 0xb033 },
+	{ 0x0000, 0xdb12, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xdd12, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xdb08, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xdd08, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0x0010, 0x0000, 0x0f21, 0x0000 },
+};
+
+/* wake the amp (ea00=0x43, c121=0x0b, f109=0xe0) */
+static const struct alc298_rb16_op alc298_rb16_amp_wake[] = {
+	{ 0x0000, 0xea00, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf102, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf103, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+	{ 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+};
+
+/* park the amp (ea00=0x47, c121=0x0a, f109=0xa0) */
+static const struct alc298_rb16_op alc298_rb16_amp_sleep[] = {
+	{ 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xf102, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf103, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00a0, 0xb031 },
+	{ 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+};
+
+static void alc298_rb16_pcm_hook(struct hda_pcm_stream *hinfo,
+				 struct hda_codec *codec,
+				 struct snd_pcm_substream *substream,
+				 int action)
+{
+	/* power the external amp only while a stream is running */
+	switch (action) {
+	case HDA_GEN_PCM_ACT_PREPARE:
+		alc298_rb16_apply(codec, alc298_rb16_amp_wake,
+				  ARRAY_SIZE(alc298_rb16_amp_wake));
+		break;
+	case HDA_GEN_PCM_ACT_CLEANUP:
+		alc298_rb16_apply(codec, alc298_rb16_amp_sleep,
+				  ARRAY_SIZE(alc298_rb16_amp_sleep));
+		break;
+	}
+}
+
+static void alc298_fixup_razer_blade16(struct hda_codec *codec,
+				       const struct hda_fixup *fix, int action)
+{
+	struct alc_spec *spec = codec->spec;
+
+	switch (action) {
+	case HDA_FIXUP_ACT_PROBE:
+		spec->gen.pcm_playback_hook = alc298_rb16_pcm_hook;
+		break;
+	case HDA_FIXUP_ACT_INIT:
+		/*
+		 * Program the external DSP at boot and on resume, then
+		 * park the amp.  It is woken again only for playback,
+		 * from the pcm_playback_hook.
+		 */
+		alc298_rb16_apply(codec, alc298_rb16_amp_init,
+				  ARRAY_SIZE(alc298_rb16_amp_init));
+		alc298_rb16_apply(codec, alc298_rb16_amp_sleep,
+				  ARRAY_SIZE(alc298_rb16_amp_sleep));
+		/*
+		 * The parser fully brings up only the first speaker pin
+		 * (NID 0x14).  It routes the second one (NID 0x17) to a
+		 * path that stays silent for this layout, so point it at
+		 * connection 1 (mixer 0x0d, fed by the speaker DAC NID
+		 * 0x03 - the same source as NID 0x14), power it on, switch
+		 * it to output and unmute it.
+		 */
+		snd_hda_codec_write(codec, 0x17, 0,
+				    AC_VERB_SET_CONNECT_SEL, 0x01);
+		snd_hda_codec_write(codec, 0x17, 0,
+				    AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
+		snd_hda_codec_write(codec, 0x17, 0,
+				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
+		snd_hda_codec_write(codec, 0x17, 0, AC_VERB_SET_AMP_GAIN_MUTE,
+				    AC_AMP_SET_OUTPUT | AC_AMP_SET_LEFT |
+				    AC_AMP_SET_RIGHT);
+		break;
+	}
+}
+
 static const struct hda_fixup alc269_fixups[] = {
+	[ALC298_FIXUP_RAZER_BLADE16_PINS] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = (const struct hda_pintbl[]) {
+			{ 0x14, 0x90170120 }, /* tweeter as internal speaker, seq 0 */
+			{ 0x17, 0x90170121 }, /* woofer  as internal speaker, seq 1 */
+			{ }
+		},
+		.chained = true,
+		.chain_id = ALC298_FIXUP_RAZER_BLADE16,
+	},
+	[ALC298_FIXUP_RAZER_BLADE16] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc298_fixup_razer_blade16,
+	},
 	[ALC269_FIXUP_GPIO2] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc_fixup_gpio2,
@@ -7852,6 +8735,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
 	SND_PCI_QUIRK(0x19e5, 0x320f, "Huawei WRT-WX9 ", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x19e5, 0x3212, "Huawei KLV-WX9 ", ALC256_FIXUP_ACER_HEADSET_MIC),
+	SND_PCI_QUIRK(0x1a58, 0x300e, "Razer Blade 16 (2025)", ALC298_FIXUP_RAZER_BLADE16_PINS),
 	SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20),
 	SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
 	SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v2] ALSA: hda/realtek: Enable internal speakers on Razer Blade 16 (2025)
  2026-06-20 14:41 [PATCH] ALSA: hda/realtek: Enable internal speakers on Razer Blade 16 (2025) Christopher Höner
@ 2026-06-21 20:57 ` Christopher Höner
  2026-06-22  8:55   ` Takashi Iwai
  0 siblings, 1 reply; 3+ messages in thread
From: Christopher Höner @ 2026-06-21 20:57 UTC (permalink / raw)
  To: christopher-hoener; +Cc: linux-kernel, linux-sound, perex, tiwai

On the Razer Blade 16 (2025) (Realtek ALC298, PCI SSID 1a58:300e) the
internal speakers are driven through an external smart amplifier whose
crossover, voicing and protection live in a DSP reached over a vendor
coef mailbox on NID 0x20.  Both speaker pins are fed from one DAC
through a mixer and the amplifier does the crossover.  The BIOS leaves
the tweeter pin (NID 0x14) disabled (default config 0x411111f0), so the
tweeters are not exposed and the amplifier is never programmed for this
machine under Linux.

Add a fixup for the machine that:

  - re-exposes the tweeter pin (NID 0x14) as an internal speaker in the
    same association (2) as the woofer (NID 0x17), so the controls come
    out as "Speaker"/"Bass Speaker", with auto-mute on headphone
    insertion;

  - pins every output to a fixed converter via preferred_dacs so the
    routing does not depend on the generic parser's DAC-allocation
    heuristics: both speaker pins share DAC 0x03 (the only converter
    that drives the woofer on this machine) through the mixer, while the
    headphone (NID 0x21) keeps DAC 0x02.  Without a fixed assignment the
    parser brings up only one speaker pin and leaves the other silent;

  - wakes the external amp, programs its DSP over the NID-0x20 mailbox
    at init (boot and resume) and parks it; it is woken again for
    playback and parked afterwards from a pcm_playback_hook, like the
    existing Samsung and LG Gram amplifier fixups.

The DSP sequence was obtained by capturing the Windows driver's HD-audio
traffic via QEMU/VFIO passthrough of the controller and reducing it to
the NID-0x20 writes this machine needs; everything else the parser
rebuilds.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=207423
Signed-off-by: Christopher Höner <christopher-hoener@web.de>
---
Changes in v2:
  - Bring up both speaker pins via preferred_dacs instead of explicit
    SET_CONNECT_SEL/SET_POWER_STATE/SET_PIN_WIDGET_CONTROL/amp verbs at
    init.  All three output pins are pinned to fixed converters
    (headphone NID 0x21 -> DAC 0x02, both speaker pins -> DAC 0x03), so
    the generic parser routes, powers and unmutes them and the routing
    no longer depends on its DAC-allocation heuristics.  This also drops
    the hardcoded NID 0x17 connection-select value questioned in v1.
  - Drop the codec-coef preamble that the captured trace replayed before
    the DSP body: the standard codec init already establishes that state
    on this machine, so the preamble is redundant.  Init now wakes the
    amp, programs the DSP body and parks it.
  - Reduce the per-playback wake and park to the three coef writes that
    select the amp's run/idle state (ea00, c121, f109); the rest of the
    captured wake/park was constant context the Windows driver re-sends
    on every transition.
  - Explain in a comment why the NID-0x20 mailbox stream uses
    snd_hda_codec_write() rather than alc_process_coef_fw(); drop a
    duplicated comment and correct the init comment.
  - Limit the quirk to PCI SSID 1a58:300e.
  - Tested from cold boot, warm reboot, S3 resume and a full power cycle
    on Linux 7.1.1.

Notes (not part of the commit message - for reviewers):

  * Scope: this fixup covers only PCI SSID 1a58:300e (the 2025 model).
    Other Razer Blade models use a similar design but are not tested
    here and are intentionally left out.

  * Speaker pin sequence: the woofer (NID 0x17) is sequenced ahead of
    the tweeter (NID 0x14) in association 2 (sequence 0 vs 1) so the
    parser treats the woofer as the primary speaker channel.

  * The fixup pins all output pins with preferred_dacs instead of letting
    the parser allocate converters and overriding the result.  Both
    speaker pins share DAC 0x03 (each routed through mixer 0x0d); the
    headphone keeps DAC 0x02.  DAC 0x03 is required: of the woofer pin's
    three sources -- mixer 0x0c (DAC 0x02), mixer 0x0d (DAC 0x03) and the
    digital converter 0x06 -- only DAC 0x03 drives the woofer on
    hardware; DAC 0x02 and converter 0x06 both leave it silent (which is
    also why the Windows converter map, tweeter on 0x02 and woofer on
    0x06, cannot be reused on Linux).  Pinning all pins also keeps the
    routing stable if the parser's allocation heuristics change in a
    later kernel.

  * On WRITE_COEF()/alc_process_coef_fw(): the plain coefficient writes
    already go through alc_write_coef_idx().  The amp programming is not
    a list of independent coefficients, though -- each step streams four
    PROC_COEF words into a single coef index (0x23) on NID 0x20 to reach
    the external DSP, which alc_process_coef_fw() (one value per index)
    cannot express.  The plain coefs and mailbox writes share one
    order-dependent table.

  * Tested on Linux 7.1.1 on a Razer Blade 16 2025 (RZ09-0528): both
    internal speakers play (tweeter and woofer), auto-mute works on
    headphone insertion, the amplifier powers up on playback and parks on
    idle, and audio survives suspend/resume and a cold boot.

  * The init table is the captured DSP body, kept verbatim and in order
    (the writes are ordered, with phase-dependent repeats); only the
    redundant preamble and the constant wake/park padding were removed.
    It could be moved to a request_firmware() blob the way other
    smart-amp codecs load their data if that is preferred -- guidance
    welcome.

  * The captured sequence is the OS-level programming only and contains
    no DSP coefficient-bank loads; those appear to be primed by the
    platform firmware at power-on.  Cold boot and S3 are covered;
    hibernation (S4) should be too, as the firmware re-primes on the
    power cycle, but is worth confirming.

 sound/hda/codecs/realtek/alc269.c | 828 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 828 insertions(+)

diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 5d09baa..91a6115 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -4041,6 +4041,8 @@ enum {
 	ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS,
 	ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS,
 	ALC298_FIXUP_LG_GRAM_STYLE_14,
+	ALC298_FIXUP_RAZER_BLADE16_PINS,
+	ALC298_FIXUP_RAZER_BLADE16,
 	ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
 	ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
 	ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
@@ -4205,7 +4207,832 @@ static void alc287_fixup_lenovo_yoga_book_9i(struct hda_codec *codec,
 	__snd_hda_apply_fixup(codec, id, action, 0);
 }
 
+/*
+ * Razer Blade 16 (2025): Realtek ALC298 driving an external smart amp.
+ * Crossover, voicing and speaker protection live in an external DSP reached
+ * through a vendor-coef mailbox on NID 0x20.  The Windows driver programs the
+ * DSP at boot and powers it up/down around playback; this replays the same
+ * traffic.  The sequence was captured from the Windows driver via QEMU/VFIO
+ * passthrough of the HD-audio controller and reduced to the NID-0x20 traffic
+ * (everything else the HDA parser rebuilds).  NID 0x14, the BIOS-disabled
+ * tweeter pin, is re-exposed via a pin-config override so the parser drives it
+ * as a normal internal speaker (shared volume/mute, auto-mute on headphone
+ * insertion).
+ *
+ * Each table entry is either a plain codec coef write or an external-DSP
+ * mailbox write:
+ *   strobe == 0:  coef[addr] = lo
+ *   strobe != 0:  amp[addr]  = (hi << 16) | lo, bank selected on port 0x89 and
+ *                 committed by the strobe opcode.
+ */
+struct alc298_rb16_op {
+	u16 bank;	/* mailbox bank (port 0x89); unused for a plain coef */
+	u16 addr;	/* mailbox register, or plain coef index */
+	u16 hi;		/* mailbox high word; unused for a plain coef */
+	u16 lo;		/* mailbox low word, or plain coef value */
+	u16 strobe;	/* mailbox commit opcode; 0 marks a plain coef write */
+};
+
+/*
+ * Run one op-table.  A plain coef write (strobe == 0) uses the normal
+ * codec coef registers via alc_write_coef_idx().  A mailbox op selects
+ * a bank, then streams four PROC_COEF words (addr/hi/lo/commit) into a
+ * single coef index (0x23) on node 0x20 to reach the external DSP --
+ * that one-index/many-words form is why the mailbox cannot be written
+ * as an alc_process_coef_fw() table (which is one value per index).
+ */
+static void alc298_rb16_apply(struct hda_codec *codec,
+			      const struct alc298_rb16_op *seq, int num)
+{
+	int i;
+
+	for (i = 0; i < num; i++) {
+		if (!seq[i].strobe) {
+			alc_write_coef_idx(codec, seq[i].addr, seq[i].lo);
+			continue;
+		}
+		alc_write_coef_idx(codec, 0x89, seq[i].bank);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x23);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].addr);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].hi);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].lo);
+		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].strobe);
+	}
+}
+
+/* program the external DSP at init; the amp is woken/parked separately */
+static const struct alc298_rb16_op alc298_rb16_amp_init[] = {
+	{ 0x0000, 0xc000, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
+	{ 0x0000, 0xf20d, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xf212, 0x0000, 0x003e, 0xb031 },
+	{ 0x0000, 0xc001, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc003, 0x0000, 0x0022, 0xb031 },
+	{ 0x0000, 0xc004, 0x0000, 0x0044, 0xb031 },
+	{ 0x0000, 0xc005, 0x0000, 0x0044, 0xb031 },
+	{ 0x0000, 0xc007, 0x0000, 0x0064, 0xb031 },
+	{ 0x0000, 0xc00e, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xf223, 0x0000, 0x007f, 0xb031 },
+	{ 0x0000, 0xf224, 0x0000, 0x00db, 0xb031 },
+	{ 0x0000, 0xf225, 0x0000, 0x00ee, 0xb031 },
+	{ 0x0000, 0xf226, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xf227, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xf21a, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xf242, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xc120, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xc321, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xc200, 0x0000, 0x00d8, 0xb031 },
+	{ 0x0000, 0xc201, 0x0000, 0x0027, 0xb031 },
+	{ 0x0000, 0xc202, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xc400, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc401, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xc402, 0x0000, 0x00e0, 0xb031 },
+	{ 0x0000, 0xc403, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc404, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xc406, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xc407, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc408, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xc300, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xdf5f, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xdf60, 0x0000, 0x00a7, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x0084, 0xb031 },
+	{ 0x0000, 0xc206, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x0065, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
+	{ 0x0000, 0xf105, 0x0000, 0x0031, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+	{ 0x0000, 0xe706, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xe707, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xe806, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xe807, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xce04, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xce05, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xce06, 0x0000, 0x0031, 0xb031 },
+	{ 0x0000, 0xce07, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xcf04, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xcf05, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xcf06, 0x0000, 0x0031, 0xb031 },
+	{ 0x0000, 0xcf07, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xc130, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xe000, 0x0000, 0x00a8, 0xb031 },
+	{ 0x4100, 0x1888, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xea00, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xed00, 0x0000, 0x0090, 0xb031 },
+	{ 0x0000, 0xcc2c, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc2d, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xcc2e, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xcc2f, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcd2c, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd2d, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xcd2e, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xcd2f, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcc24, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc25, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xcc26, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xcc27, 0x0000, 0x0085, 0xb031 },
+	{ 0x0000, 0xcd24, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd25, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xcd26, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xcd27, 0x0000, 0x0085, 0xb031 },
+	{ 0x0000, 0xcc20, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc21, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc22, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcd20, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd21, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd22, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xcc16, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xcc17, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd16, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xcd17, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc29, 0x0000, 0x005d, 0xb031 },
+	{ 0x0000, 0xcc2a, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xcd29, 0x0000, 0x005d, 0xb031 },
+	{ 0x0000, 0xcd2a, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xcc31, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xcc32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc33, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc34, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd31, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xcd32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd33, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd34, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc36, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xcc37, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcc38, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcc39, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcd36, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xcd37, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcd38, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcd39, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xcc09, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc0a, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xcc0b, 0x0000, 0x007c, 0xb031 },
+	{ 0x0000, 0xcc0c, 0x0000, 0x005b, 0xb031 },
+	{ 0x0000, 0xcd09, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd0a, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xcd0b, 0x0000, 0x007c, 0xb031 },
+	{ 0x0000, 0xcd0c, 0x0000, 0x005b, 0xb031 },
+	{ 0x0000, 0xcc0e, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcc0f, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xcc10, 0x0000, 0x003e, 0xb031 },
+	{ 0x0000, 0xcc11, 0x0000, 0x002d, 0xb031 },
+	{ 0x0000, 0xcd0e, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcd0f, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xcd10, 0x0000, 0x003e, 0xb031 },
+	{ 0x0000, 0xcd11, 0x0000, 0x002d, 0xb031 },
+	{ 0x0000, 0xccd6, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xccd7, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xcdd6, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcdd7, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xccd8, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xccd9, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xcdd8, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcdd9, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xccda, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xccdb, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xcdda, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xcddb, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xc320, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xc321, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xe604, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xdd00, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xdc19, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdc1a, 0x0000, 0x006a, 0xb031 },
+	{ 0x0000, 0xdc1b, 0x0000, 0x00aa, 0xb031 },
+	{ 0x0000, 0xdc1c, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xdc1d, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdc1e, 0x0000, 0x0027, 0xb031 },
+	{ 0x0000, 0xdc1f, 0x0000, 0x0062, 0xb031 },
+	{ 0x0000, 0xdc20, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xde19, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xde1a, 0x0000, 0x006a, 0xb031 },
+	{ 0x0000, 0xde1b, 0x0000, 0x00aa, 0xb031 },
+	{ 0x0000, 0xde1c, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xde1d, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xde1e, 0x0000, 0x0027, 0xb031 },
+	{ 0x0000, 0xde1f, 0x0000, 0x0062, 0xb031 },
+	{ 0x0000, 0xde20, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xdb32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdd32, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdb33, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xdd33, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xdb34, 0x0000, 0x001a, 0xb031 },
+	{ 0x0000, 0xdd34, 0x0000, 0x001a, 0xb031 },
+	{ 0x0000, 0xdb15, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xdd15, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xdb17, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xdd17, 0x0000, 0x003f, 0xb031 },
+	{ 0x0000, 0xdb94, 0x0000, 0x0070, 0xb031 },
+	{ 0x0000, 0xdd94, 0x0000, 0x0070, 0xb031 },
+	{ 0x0000, 0xdb19, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xdd19, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x001c, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xdb04, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xdb05, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xdd04, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xdd05, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xdbbb, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xdbbc, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xdbbd, 0x0000, 0x00f3, 0xb031 },
+	{ 0x0000, 0xdbbe, 0x0000, 0x00cf, 0xb031 },
+	{ 0x0000, 0xddbb, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xddbc, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xddbd, 0x0000, 0x00f3, 0xb031 },
+	{ 0x0000, 0xddbe, 0x0000, 0x00cf, 0xb031 },
+	{ 0x0000, 0xdb01, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xdd01, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xdb08, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xdd08, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xdc52, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xde52, 0x0000, 0x00ef, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0xdf0a, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xdf0b, 0x0000, 0x007f, 0xb031 },
+	{ 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xdf01, 0x0000, 0x0073, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xebcb, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeb10, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb11, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xeb12, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xeb13, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xeb14, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb15, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xeb16, 0x0000, 0x0069, 0xb031 },
+	{ 0x0000, 0xeb21, 0x0000, 0x0011, 0xb031 },
+	{ 0x0000, 0xeb22, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xeb23, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeb24, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb25, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xeb26, 0x0000, 0x0055, 0xb031 },
+	{ 0x0000, 0xeb27, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xeb28, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb29, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xeb2a, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xeb2b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xeb30, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb31, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xeb32, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xeb33, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb34, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb35, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xeb36, 0x0000, 0x0024, 0xb031 },
+	{ 0x0000, 0xeb37, 0x0000, 0x0068, 0xb031 },
+	{ 0x0000, 0xeb40, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb41, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xeb42, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xeb43, 0x0000, 0x00e8, 0xb031 },
+	{ 0x0000, 0xeb44, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb45, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xeb46, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xeb47, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb48, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb49, 0x0000, 0x00c5, 0xb031 },
+	{ 0x0000, 0xeb4a, 0x0000, 0x0032, 0xb031 },
+	{ 0x0000, 0xeb4b, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeb50, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb51, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xeb52, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xeb53, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb54, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb55, 0x0000, 0x007d, 0xb031 },
+	{ 0x0000, 0xeb56, 0x0000, 0x00d9, 0xb031 },
+	{ 0x0000, 0xeb57, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xeb60, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xeb61, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xeb62, 0x0000, 0x00b5, 0xb031 },
+	{ 0x0000, 0xeb63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xeb64, 0x0000, 0x00fa, 0xb031 },
+	{ 0x0000, 0xeb65, 0x0000, 0x0086, 0xb031 },
+	{ 0x0000, 0xeb66, 0x0000, 0x00a8, 0xb031 },
+	{ 0x0000, 0xeb67, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xeb68, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xeb69, 0x0000, 0x009a, 0xb031 },
+	{ 0x0000, 0xeb6a, 0x0000, 0x002f, 0xb031 },
+	{ 0x0000, 0xeb6b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xebb6, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeb70, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xeb71, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xeb72, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xeb73, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xeb74, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xeb75, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xeb76, 0x0000, 0x002c, 0xb031 },
+	{ 0x0000, 0xeb77, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xeb80, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb81, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xeb82, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xeb83, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xeb84, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xeb85, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xeb86, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xeb87, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xeb88, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xeb89, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xeb8a, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xeb8b, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xebb8, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeb90, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xeb91, 0x0000, 0x008b, 0xb031 },
+	{ 0x0000, 0xeb92, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xeb93, 0x0000, 0x0064, 0xb031 },
+	{ 0x0000, 0xeb94, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xeb95, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xeb96, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xeb97, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xeba0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeba1, 0x0000, 0x0091, 0xb031 },
+	{ 0x0000, 0xeba2, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xeba3, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeba4, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xeba5, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeba6, 0x0000, 0x0093, 0xb031 },
+	{ 0x0000, 0xeba7, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xeba8, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xeba9, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xebaa, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xebab, 0x0000, 0x006c, 0xb031 },
+	{ 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
+	{ 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xeb00, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xeb01, 0x0000, 0x00a9, 0xb031 },
+	{ 0x0000, 0xeb02, 0x0000, 0x00df, 0xb031 },
+	{ 0x0000, 0xeb03, 0x0000, 0x007b, 0xb031 },
+	{ 0x0000, 0xeb05, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xeb06, 0x0000, 0x005a, 0xb031 },
+	{ 0x0000, 0xeb07, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xd0cb, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xd0b0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd010, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd011, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd012, 0x0000, 0x0092, 0xb031 },
+	{ 0x0000, 0xd013, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd014, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd015, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xd016, 0x0000, 0x0072, 0xb031 },
+	{ 0x0000, 0xd017, 0x0000, 0x00b0, 0xb031 },
+	{ 0x0000, 0xd020, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd021, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd022, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd023, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd024, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd025, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd026, 0x0000, 0x0090, 0xb031 },
+	{ 0x0000, 0xd027, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xd028, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd029, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd02a, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd02b, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xce6a, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xdb04, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xdb05, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xcc00, 0x0000, 0x00c1, 0xb031 },
+	{ 0x0000, 0xca02, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xca00, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca62, 0x0000, 0x0077, 0xb031 },
+	{ 0x0000, 0xca65, 0x0000, 0x0082, 0xb031 },
+	{ 0x0000, 0xca68, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xca75, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xca7b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc860, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc861, 0x0000, 0x00e5, 0xb031 },
+	{ 0x0000, 0xc862, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xc863, 0x0000, 0x00c6, 0xb031 },
+	{ 0x0000, 0xc864, 0x0000, 0x00ba, 0xb031 },
+	{ 0x0000, 0xc865, 0x0000, 0x0061, 0xb031 },
+	{ 0x0000, 0xc867, 0x0000, 0x0017, 0xb031 },
+	{ 0x0000, 0xc868, 0x0000, 0x00ed, 0xb031 },
+	{ 0x0000, 0xc869, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xc86a, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xc86b, 0x0000, 0x00e2, 0xb031 },
+	{ 0x0000, 0xc875, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xc87b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xc836, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc8a0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc833, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xc834, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc83f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc83e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc83a, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xc83b, 0x0000, 0x0089, 0xb031 },
+	{ 0x0000, 0xc830, 0x0000, 0x0013, 0xb031 },
+	{ 0x0000, 0xc826, 0x0000, 0x00d1, 0xb031 },
+	{ 0x0000, 0xc890, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc823, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc824, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xc82f, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xc82e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc820, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc816, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc880, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xc813, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc814, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc81f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc81e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc81a, 0x0000, 0x0066, 0xb031 },
+	{ 0x0000, 0xc81b, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc810, 0x0000, 0x000d, 0xb031 },
+	{ 0x0000, 0xc846, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc8d0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc844, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc84f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc84e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc84a, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc84b, 0x0000, 0x0056, 0xb031 },
+	{ 0x0000, 0xc800, 0x0000, 0x00b0, 0xb031 },
+	{ 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xc500, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc501, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc502, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc503, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc504, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc505, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc506, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc507, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc510, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc511, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc512, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc513, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc514, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc515, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc516, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc517, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc518, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xd251, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xecb0, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec10, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec11, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xec12, 0x0000, 0x00ab, 0xb031 },
+	{ 0x0000, 0xec13, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xec14, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec15, 0x0000, 0x004c, 0xb031 },
+	{ 0x0000, 0xec16, 0x0000, 0x0069, 0xb031 },
+	{ 0x0000, 0xec21, 0x0000, 0x0011, 0xb031 },
+	{ 0x0000, 0xec22, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xec23, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xec24, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec25, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xec26, 0x0000, 0x0055, 0xb031 },
+	{ 0x0000, 0xec27, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xec28, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec29, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xec2a, 0x0000, 0x0051, 0xb031 },
+	{ 0x0000, 0xec2b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xecb2, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec30, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec31, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xec32, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xec33, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec34, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec35, 0x0000, 0x00bb, 0xb031 },
+	{ 0x0000, 0xec36, 0x0000, 0x0024, 0xb031 },
+	{ 0x0000, 0xec37, 0x0000, 0x0068, 0xb031 },
+	{ 0x0000, 0xec40, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec41, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xec42, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xec43, 0x0000, 0x00e8, 0xb031 },
+	{ 0x0000, 0xec44, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec45, 0x0000, 0x004f, 0xb031 },
+	{ 0x0000, 0xec46, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xec47, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec48, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec49, 0x0000, 0x00c5, 0xb031 },
+	{ 0x0000, 0xec4a, 0x0000, 0x0032, 0xb031 },
+	{ 0x0000, 0xec4b, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xecb4, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec50, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec51, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xec52, 0x0000, 0x00b4, 0xb031 },
+	{ 0x0000, 0xec53, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec54, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec55, 0x0000, 0x007d, 0xb031 },
+	{ 0x0000, 0xec56, 0x0000, 0x00d9, 0xb031 },
+	{ 0x0000, 0xec57, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xec60, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xec61, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xec62, 0x0000, 0x00b5, 0xb031 },
+	{ 0x0000, 0xec63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xec64, 0x0000, 0x00fa, 0xb031 },
+	{ 0x0000, 0xec65, 0x0000, 0x0086, 0xb031 },
+	{ 0x0000, 0xec66, 0x0000, 0x00a8, 0xb031 },
+	{ 0x0000, 0xec67, 0x0000, 0x0040, 0xb031 },
+	{ 0x0000, 0xec68, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xec69, 0x0000, 0x009a, 0xb031 },
+	{ 0x0000, 0xec6a, 0x0000, 0x002f, 0xb031 },
+	{ 0x0000, 0xec6b, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xecb6, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xec70, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xec71, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xec72, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xec73, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xec74, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xec75, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xec76, 0x0000, 0x002c, 0xb031 },
+	{ 0x0000, 0xec77, 0x0000, 0x0050, 0xb031 },
+	{ 0x0000, 0xec80, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec81, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xec82, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xec83, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xec84, 0x0000, 0x00f5, 0xb031 },
+	{ 0x0000, 0xec85, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xec86, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xec87, 0x0000, 0x00d0, 0xb031 },
+	{ 0x0000, 0xec88, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xec89, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xec8a, 0x0000, 0x0016, 0xb031 },
+	{ 0x0000, 0xec8b, 0x0000, 0x0028, 0xb031 },
+	{ 0x0000, 0xecb8, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xec90, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xec91, 0x0000, 0x008b, 0xb031 },
+	{ 0x0000, 0xec92, 0x0000, 0x00bd, 0xb031 },
+	{ 0x0000, 0xec93, 0x0000, 0x0064, 0xb031 },
+	{ 0x0000, 0xec94, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xec95, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xec96, 0x0000, 0x00e7, 0xb031 },
+	{ 0x0000, 0xec97, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xeca0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeca1, 0x0000, 0x0091, 0xb031 },
+	{ 0x0000, 0xeca2, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xeca3, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xeca4, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xeca5, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xeca6, 0x0000, 0x0093, 0xb031 },
+	{ 0x0000, 0xeca7, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xeca8, 0x0000, 0x0003, 0xb031 },
+	{ 0x0000, 0xeca9, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xecaa, 0x0000, 0x0099, 0xb031 },
+	{ 0x0000, 0xecab, 0x0000, 0x006c, 0xb031 },
+	{ 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
+	{ 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
+	{ 0x0000, 0xec00, 0x0000, 0x0005, 0xb031 },
+	{ 0x0000, 0xec01, 0x0000, 0x00a9, 0xb031 },
+	{ 0x0000, 0xec02, 0x0000, 0x00df, 0xb031 },
+	{ 0x0000, 0xec03, 0x0000, 0x007b, 0xb031 },
+	{ 0x0000, 0xec05, 0x0000, 0x0079, 0xb031 },
+	{ 0x0000, 0xec06, 0x0000, 0x005a, 0xb031 },
+	{ 0x0000, 0xec07, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xd1b0, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd110, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd111, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd112, 0x0000, 0x0092, 0xb031 },
+	{ 0x0000, 0xd113, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd114, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd115, 0x0000, 0x00f6, 0xb031 },
+	{ 0x0000, 0xd116, 0x0000, 0x0072, 0xb031 },
+	{ 0x0000, 0xd117, 0x0000, 0x00b0, 0xb031 },
+	{ 0x0000, 0xd120, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd121, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd122, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd123, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd124, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd125, 0x0000, 0x0009, 0xb031 },
+	{ 0x0000, 0xd126, 0x0000, 0x0090, 0xb031 },
+	{ 0x0000, 0xd127, 0x0000, 0x0020, 0xb031 },
+	{ 0x0000, 0xd128, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xd129, 0x0000, 0x00fb, 0xb031 },
+	{ 0x0000, 0xd12a, 0x0000, 0x0037, 0xb031 },
+	{ 0x0000, 0xd12b, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
+	{ 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xdd04, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xdd05, 0x0000, 0x0006, 0xb031 },
+	{ 0x0000, 0xca12, 0x0000, 0x000f, 0xb031 },
+	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca82, 0x0000, 0x0077, 0xb031 },
+	{ 0x0000, 0xca85, 0x0000, 0x0082, 0xb031 },
+	{ 0x0000, 0xca88, 0x0000, 0x00c2, 0xb031 },
+	{ 0x0000, 0xca95, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xca9b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc960, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc961, 0x0000, 0x00e5, 0xb031 },
+	{ 0x0000, 0xc962, 0x0000, 0x00eb, 0xb031 },
+	{ 0x0000, 0xc963, 0x0000, 0x00c6, 0xb031 },
+	{ 0x0000, 0xc964, 0x0000, 0x00ba, 0xb031 },
+	{ 0x0000, 0xc965, 0x0000, 0x0061, 0xb031 },
+	{ 0x0000, 0xc967, 0x0000, 0x0017, 0xb031 },
+	{ 0x0000, 0xc968, 0x0000, 0x00ed, 0xb031 },
+	{ 0x0000, 0xc969, 0x0000, 0x003c, 0xb031 },
+	{ 0x0000, 0xc96a, 0x0000, 0x008a, 0xb031 },
+	{ 0x0000, 0xc96b, 0x0000, 0x00e2, 0xb031 },
+	{ 0x0000, 0xc975, 0x0000, 0x003a, 0xb031 },
+	{ 0x0000, 0xc97b, 0x0000, 0x006f, 0xb031 },
+	{ 0x0000, 0xc936, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc9a0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc933, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xc934, 0x0000, 0x0002, 0xb031 },
+	{ 0x0000, 0xc93f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc93e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc93a, 0x0000, 0x0076, 0xb031 },
+	{ 0x0000, 0xc93b, 0x0000, 0x0089, 0xb031 },
+	{ 0x0000, 0xc930, 0x0000, 0x0013, 0xb031 },
+	{ 0x0000, 0xc926, 0x0000, 0x00d1, 0xb031 },
+	{ 0x0000, 0xc990, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc923, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc924, 0x0000, 0x0004, 0xb031 },
+	{ 0x0000, 0xc92f, 0x0000, 0x0018, 0xb031 },
+	{ 0x0000, 0xc92e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc920, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc916, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc980, 0x0000, 0x00e1, 0xb031 },
+	{ 0x0000, 0xc913, 0x0000, 0x0000, 0xb031 },
+	{ 0x0000, 0xc914, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc91f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc91e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc91a, 0x0000, 0x0066, 0xb031 },
+	{ 0x0000, 0xc91b, 0x0000, 0x0078, 0xb031 },
+	{ 0x0000, 0xc910, 0x0000, 0x000d, 0xb031 },
+	{ 0x0000, 0xc946, 0x0000, 0x00f9, 0xb031 },
+	{ 0x0000, 0xc9d0, 0x0000, 0x00f1, 0xb031 },
+	{ 0x0000, 0xc944, 0x0000, 0x0001, 0xb031 },
+	{ 0x0000, 0xc94f, 0x0000, 0x0014, 0xb031 },
+	{ 0x0000, 0xc94e, 0x0000, 0x0094, 0xb031 },
+	{ 0x0000, 0xc94a, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc94b, 0x0000, 0x0056, 0xb031 },
+	{ 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xc600, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc601, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc602, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc603, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc604, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc605, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc606, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc607, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc610, 0x0000, 0x0007, 0xb031 },
+	{ 0x0000, 0xc611, 0x0000, 0x00da, 0xb031 },
+	{ 0x0000, 0xc612, 0x0000, 0x000e, 0xb031 },
+	{ 0x0000, 0xc613, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc614, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xc615, 0x0000, 0x0026, 0xb031 },
+	{ 0x0000, 0xc616, 0x0000, 0x004a, 0xb031 },
+	{ 0x0000, 0xc617, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xc618, 0x0000, 0x0008, 0xb031 },
+	{ 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xc802, 0x0000, 0x00d2, 0xb031 },
+	{ 0x0000, 0xc902, 0x0000, 0x00d2, 0xb031 },
+	{ 0x0000, 0xc800, 0x0000, 0x00f0, 0xb031 },
+	{ 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
+	{ 0x0000, 0xd252, 0x0000, 0x0030, 0xb031 },
+	{ 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+	{ 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
+	{ 0x0000, 0xdbb5, 0x0041, 0xd27f, 0xb037 },
+	{ 0x0000, 0xddb5, 0x0040, 0x6e3b, 0xb037 },
+	{ 0x0000, 0xdb93, 0x0000, 0x009e, 0xb033 },
+	{ 0x0000, 0xdd93, 0x0000, 0x009e, 0xb033 },
+	{ 0x0000, 0xdb12, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xdd12, 0x0000, 0x00c0, 0xb031 },
+	{ 0x0000, 0xdb08, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xdd08, 0x0000, 0x0080, 0xb031 },
+	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+	{ 0x0000, 0x0010, 0x0000, 0x0f21, 0x0000 },
+};
+
+/* wake the amp (ea00=0x43, c121=0x0b, f109=0xe0) */
+static const struct alc298_rb16_op alc298_rb16_amp_wake[] = {
+	{ 0x0000, 0xea00, 0x0000, 0x0043, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+};
+
+/* park the amp (ea00=0x47, c121=0x0a, f109=0xa0) */
+static const struct alc298_rb16_op alc298_rb16_amp_sleep[] = {
+	{ 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
+	{ 0x0000, 0xc121, 0x0000, 0x000a, 0xb031 },
+	{ 0x0000, 0xf109, 0x0000, 0x00a0, 0xb031 },
+};
+
+static void alc298_rb16_pcm_hook(struct hda_pcm_stream *hinfo,
+				 struct hda_codec *codec,
+				 struct snd_pcm_substream *substream,
+				 int action)
+{
+	/* power the external amp only while a stream is running */
+	switch (action) {
+	case HDA_GEN_PCM_ACT_PREPARE:
+		alc298_rb16_apply(codec, alc298_rb16_amp_wake,
+				  ARRAY_SIZE(alc298_rb16_amp_wake));
+		break;
+	case HDA_GEN_PCM_ACT_CLEANUP:
+		alc298_rb16_apply(codec, alc298_rb16_amp_sleep,
+				  ARRAY_SIZE(alc298_rb16_amp_sleep));
+		break;
+	}
+}
+
+static void alc298_fixup_razer_blade16(struct hda_codec *codec,
+				       const struct hda_fixup *fix, int action)
+{
+	/*
+	 * Pin every output to a fixed converter so the routing does not
+	 * rely on the generic parser's DAC-allocation heuristics: without
+	 * a fixed assignment the parser brings up only one speaker pin and
+	 * leaves the other silent, and the allocation could change between
+	 * kernel versions.  Both speaker pins share DAC 0x03 through mixer
+	 * 0x0d: that is the only converter that drives the woofer (NID
+	 * 0x17) on this machine -- feeding it from DAC 0x02 or the digital
+	 * converter 0x06 leaves the woofer silent.  Both pins carry the
+	 * same stereo stream and the external amp does the crossover.
+	 * Headphone NID 0x21 keeps DAC 0x02.
+	 */
+	static const hda_nid_t preferred_pairs[] = {
+		0x21, 0x02,
+		0x14, 0x03,
+		0x17, 0x03,
+		0
+	};
+	struct alc_spec *spec = codec->spec;
+
+	switch (action) {
+	case HDA_FIXUP_ACT_PRE_PROBE:
+		spec->gen.preferred_dacs = preferred_pairs;
+		break;
+	case HDA_FIXUP_ACT_PROBE:
+		spec->gen.pcm_playback_hook = alc298_rb16_pcm_hook;
+		break;
+	case HDA_FIXUP_ACT_INIT:
+		/*
+		 * Wake the amp, program its DSP at boot and on resume, then
+		 * park it.  It is woken again for playback and parked
+		 * afterwards from the pcm_playback_hook.
+		 */
+		alc298_rb16_apply(codec, alc298_rb16_amp_wake,
+				  ARRAY_SIZE(alc298_rb16_amp_wake));
+		alc298_rb16_apply(codec, alc298_rb16_amp_init,
+				  ARRAY_SIZE(alc298_rb16_amp_init));
+		alc298_rb16_apply(codec, alc298_rb16_amp_sleep,
+				  ARRAY_SIZE(alc298_rb16_amp_sleep));
+		break;
+	}
+}
+
 static const struct hda_fixup alc269_fixups[] = {
+	[ALC298_FIXUP_RAZER_BLADE16_PINS] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = (const struct hda_pintbl[]) {
+			{ 0x14, 0x90170121 }, /* tweeter as internal speaker, seq 1 */
+			{ 0x17, 0x90170120 }, /* woofer  as internal speaker, seq 0 */
+			{ }
+		},
+		.chained = true,
+		.chain_id = ALC298_FIXUP_RAZER_BLADE16,
+	},
+	[ALC298_FIXUP_RAZER_BLADE16] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc298_fixup_razer_blade16,
+	},
 	[ALC269_FIXUP_GPIO2] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc_fixup_gpio2,
@@ -7852,6 +8679,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
 	SND_PCI_QUIRK(0x19e5, 0x320f, "Huawei WRT-WX9 ", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x19e5, 0x3212, "Huawei KLV-WX9 ", ALC256_FIXUP_ACER_HEADSET_MIC),
+	SND_PCI_QUIRK(0x1a58, 0x300e, "Razer Blade 16 (2025)", ALC298_FIXUP_RAZER_BLADE16_PINS),
 	SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20),
 	SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
 	SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] ALSA: hda/realtek: Enable internal speakers on Razer Blade 16 (2025)
  2026-06-21 20:57 ` [PATCH v2] " Christopher Höner
@ 2026-06-22  8:55   ` Takashi Iwai
  0 siblings, 0 replies; 3+ messages in thread
From: Takashi Iwai @ 2026-06-22  8:55 UTC (permalink / raw)
  To: Christopher Höner; +Cc: linux-kernel, linux-sound, perex, tiwai

On Sun, 21 Jun 2026 22:57:11 +0200,
Christopher Höner wrote:
> 
> On the Razer Blade 16 (2025) (Realtek ALC298, PCI SSID 1a58:300e) the
> internal speakers are driven through an external smart amplifier whose
> crossover, voicing and protection live in a DSP reached over a vendor
> coef mailbox on NID 0x20.  Both speaker pins are fed from one DAC
> through a mixer and the amplifier does the crossover.  The BIOS leaves
> the tweeter pin (NID 0x14) disabled (default config 0x411111f0), so the
> tweeters are not exposed and the amplifier is never programmed for this
> machine under Linux.
> 
> Add a fixup for the machine that:
> 
>   - re-exposes the tweeter pin (NID 0x14) as an internal speaker in the
>     same association (2) as the woofer (NID 0x17), so the controls come
>     out as "Speaker"/"Bass Speaker", with auto-mute on headphone
>     insertion;
> 
>   - pins every output to a fixed converter via preferred_dacs so the
>     routing does not depend on the generic parser's DAC-allocation
>     heuristics: both speaker pins share DAC 0x03 (the only converter
>     that drives the woofer on this machine) through the mixer, while the
>     headphone (NID 0x21) keeps DAC 0x02.  Without a fixed assignment the
>     parser brings up only one speaker pin and leaves the other silent;
> 
>   - wakes the external amp, programs its DSP over the NID-0x20 mailbox
>     at init (boot and resume) and parks it; it is woken again for
>     playback and parked afterwards from a pcm_playback_hook, like the
>     existing Samsung and LG Gram amplifier fixups.
> 
> The DSP sequence was obtained by capturing the Windows driver's HD-audio
> traffic via QEMU/VFIO passthrough of the controller and reducing it to
> the NID-0x20 writes this machine needs; everything else the parser
> rebuilds.
> 
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=207423
> Signed-off-by: Christopher Höner <christopher-hoener@web.de>
> ---
> Changes in v2:
>   - Bring up both speaker pins via preferred_dacs instead of explicit
>     SET_CONNECT_SEL/SET_POWER_STATE/SET_PIN_WIDGET_CONTROL/amp verbs at
>     init.  All three output pins are pinned to fixed converters
>     (headphone NID 0x21 -> DAC 0x02, both speaker pins -> DAC 0x03), so
>     the generic parser routes, powers and unmutes them and the routing
>     no longer depends on its DAC-allocation heuristics.  This also drops
>     the hardcoded NID 0x17 connection-select value questioned in v1.
>   - Drop the codec-coef preamble that the captured trace replayed before
>     the DSP body: the standard codec init already establishes that state
>     on this machine, so the preamble is redundant.  Init now wakes the
>     amp, programs the DSP body and parks it.
>   - Reduce the per-playback wake and park to the three coef writes that
>     select the amp's run/idle state (ea00, c121, f109); the rest of the
>     captured wake/park was constant context the Windows driver re-sends
>     on every transition.
>   - Explain in a comment why the NID-0x20 mailbox stream uses
>     snd_hda_codec_write() rather than alc_process_coef_fw(); drop a
>     duplicated comment and correct the init comment.
>   - Limit the quirk to PCI SSID 1a58:300e.
>   - Tested from cold boot, warm reboot, S3 resume and a full power cycle
>     on Linux 7.1.1.
> 
> Notes (not part of the commit message - for reviewers):
> 
>   * Scope: this fixup covers only PCI SSID 1a58:300e (the 2025 model).
>     Other Razer Blade models use a similar design but are not tested
>     here and are intentionally left out.
> 
>   * Speaker pin sequence: the woofer (NID 0x17) is sequenced ahead of
>     the tweeter (NID 0x14) in association 2 (sequence 0 vs 1) so the
>     parser treats the woofer as the primary speaker channel.
> 
>   * The fixup pins all output pins with preferred_dacs instead of letting
>     the parser allocate converters and overriding the result.  Both
>     speaker pins share DAC 0x03 (each routed through mixer 0x0d); the
>     headphone keeps DAC 0x02.  DAC 0x03 is required: of the woofer pin's
>     three sources -- mixer 0x0c (DAC 0x02), mixer 0x0d (DAC 0x03) and the
>     digital converter 0x06 -- only DAC 0x03 drives the woofer on
>     hardware; DAC 0x02 and converter 0x06 both leave it silent (which is
>     also why the Windows converter map, tweeter on 0x02 and woofer on
>     0x06, cannot be reused on Linux).  Pinning all pins also keeps the
>     routing stable if the parser's allocation heuristics change in a
>     later kernel.
> 
>   * On WRITE_COEF()/alc_process_coef_fw(): the plain coefficient writes
>     already go through alc_write_coef_idx().  The amp programming is not
>     a list of independent coefficients, though -- each step streams four
>     PROC_COEF words into a single coef index (0x23) on NID 0x20 to reach
>     the external DSP, which alc_process_coef_fw() (one value per index)
>     cannot express.  The plain coefs and mailbox writes share one
>     order-dependent table.
> 
>   * Tested on Linux 7.1.1 on a Razer Blade 16 2025 (RZ09-0528): both
>     internal speakers play (tweeter and woofer), auto-mute works on
>     headphone insertion, the amplifier powers up on playback and parks on
>     idle, and audio survives suspend/resume and a cold boot.
> 
>   * The init table is the captured DSP body, kept verbatim and in order
>     (the writes are ordered, with phase-dependent repeats); only the
>     redundant preamble and the constant wake/park padding were removed.
>     It could be moved to a request_firmware() blob the way other
>     smart-amp codecs load their data if that is preferred -- guidance
>     welcome.
> 
>   * The captured sequence is the OS-level programming only and contains
>     no DSP coefficient-bank loads; those appear to be primed by the
>     platform firmware at power-on.  Cold boot and S3 are covered;
>     hibernation (S4) should be too, as the firmware re-primes on the
>     power cycle, but is worth confirming.
> 
>  sound/hda/codecs/realtek/alc269.c | 828 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 828 insertions(+)
> 
> diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
> index 5d09baa..91a6115 100644
> --- a/sound/hda/codecs/realtek/alc269.c
> +++ b/sound/hda/codecs/realtek/alc269.c
> @@ -4041,6 +4041,8 @@ enum {
>  	ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS,
>  	ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS,
>  	ALC298_FIXUP_LG_GRAM_STYLE_14,
> +	ALC298_FIXUP_RAZER_BLADE16_PINS,
> +	ALC298_FIXUP_RAZER_BLADE16,
>  	ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
>  	ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
>  	ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
> @@ -4205,7 +4207,832 @@ static void alc287_fixup_lenovo_yoga_book_9i(struct hda_codec *codec,
>  	__snd_hda_apply_fixup(codec, id, action, 0);
>  }
>  
> +/*
> + * Razer Blade 16 (2025): Realtek ALC298 driving an external smart amp.
> + * Crossover, voicing and speaker protection live in an external DSP reached
> + * through a vendor-coef mailbox on NID 0x20.  The Windows driver programs the
> + * DSP at boot and powers it up/down around playback; this replays the same
> + * traffic.  The sequence was captured from the Windows driver via QEMU/VFIO
> + * passthrough of the HD-audio controller and reduced to the NID-0x20 traffic
> + * (everything else the HDA parser rebuilds).  NID 0x14, the BIOS-disabled
> + * tweeter pin, is re-exposed via a pin-config override so the parser drives it
> + * as a normal internal speaker (shared volume/mute, auto-mute on headphone
> + * insertion).
> + *
> + * Each table entry is either a plain codec coef write or an external-DSP
> + * mailbox write:
> + *   strobe == 0:  coef[addr] = lo
> + *   strobe != 0:  amp[addr]  = (hi << 16) | lo, bank selected on port 0x89 and
> + *                 committed by the strobe opcode.
> + */
> +struct alc298_rb16_op {
> +	u16 bank;	/* mailbox bank (port 0x89); unused for a plain coef */
> +	u16 addr;	/* mailbox register, or plain coef index */
> +	u16 hi;		/* mailbox high word; unused for a plain coef */
> +	u16 lo;		/* mailbox low word, or plain coef value */
> +	u16 strobe;	/* mailbox commit opcode; 0 marks a plain coef write */
> +};
> +
> +/*
> + * Run one op-table.  A plain coef write (strobe == 0) uses the normal
> + * codec coef registers via alc_write_coef_idx().  A mailbox op selects
> + * a bank, then streams four PROC_COEF words (addr/hi/lo/commit) into a
> + * single coef index (0x23) on node 0x20 to reach the external DSP --
> + * that one-index/many-words form is why the mailbox cannot be written
> + * as an alc_process_coef_fw() table (which is one value per index).
> + */
> +static void alc298_rb16_apply(struct hda_codec *codec,
> +			      const struct alc298_rb16_op *seq, int num)
> +{
> +	int i;
> +
> +	for (i = 0; i < num; i++) {
> +		if (!seq[i].strobe) {
> +			alc_write_coef_idx(codec, seq[i].addr, seq[i].lo);
> +			continue;
> +		}
> +		alc_write_coef_idx(codec, 0x89, seq[i].bank);
> +		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x23);
> +		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].addr);
> +		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].hi);
> +		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].lo);
> +		snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].strobe);
> +	}
> +}
> +
> +/* program the external DSP at init; the amp is woken/parked separately */
> +static const struct alc298_rb16_op alc298_rb16_amp_init[] = {
> +	{ 0x0000, 0xc000, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
> +	{ 0x0000, 0xf20d, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xf212, 0x0000, 0x003e, 0xb031 },
> +	{ 0x0000, 0xc001, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xc003, 0x0000, 0x0022, 0xb031 },
> +	{ 0x0000, 0xc004, 0x0000, 0x0044, 0xb031 },
> +	{ 0x0000, 0xc005, 0x0000, 0x0044, 0xb031 },
> +	{ 0x0000, 0xc007, 0x0000, 0x0064, 0xb031 },
> +	{ 0x0000, 0xc00e, 0x0000, 0x00e7, 0xb031 },
> +	{ 0x0000, 0xf223, 0x0000, 0x007f, 0xb031 },
> +	{ 0x0000, 0xf224, 0x0000, 0x00db, 0xb031 },
> +	{ 0x0000, 0xf225, 0x0000, 0x00ee, 0xb031 },
> +	{ 0x0000, 0xf226, 0x0000, 0x003f, 0xb031 },
> +	{ 0x0000, 0xf227, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xf21a, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xf242, 0x0000, 0x003c, 0xb031 },
> +	{ 0x0000, 0xc120, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xc321, 0x0000, 0x000b, 0xb031 },
> +	{ 0x0000, 0xc200, 0x0000, 0x00d8, 0xb031 },
> +	{ 0x0000, 0xc201, 0x0000, 0x0027, 0xb031 },
> +	{ 0x0000, 0xc202, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xc400, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xc401, 0x0000, 0x0043, 0xb031 },
> +	{ 0x0000, 0xc402, 0x0000, 0x00e0, 0xb031 },
> +	{ 0x0000, 0xc403, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xc404, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xc406, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xc407, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xc408, 0x0000, 0x003f, 0xb031 },
> +	{ 0x0000, 0xc300, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xdf5f, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xdf60, 0x0000, 0x00a7, 0xb031 },
> +	{ 0x0000, 0xc203, 0x0000, 0x0084, 0xb031 },
> +	{ 0x0000, 0xc206, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
> +	{ 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
> +	{ 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
> +	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
> +	{ 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
> +	{ 0x0000, 0xf105, 0x0000, 0x0004, 0xb031 },
> +	{ 0x0000, 0xf109, 0x0000, 0x0065, 0xb031 },
> +	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
> +	{ 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
> +	{ 0x0000, 0xf105, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xf109, 0x0000, 0x0006, 0xb031 },
> +	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
> +	{ 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
> +	{ 0x0000, 0xf105, 0x0000, 0x0031, 0xb031 },
> +	{ 0x0000, 0xf109, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
> +	{ 0x0000, 0xe706, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xe707, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xe806, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xe807, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xce04, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xce05, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xce06, 0x0000, 0x0031, 0xb031 },
> +	{ 0x0000, 0xce07, 0x0000, 0x00b4, 0xb031 },
> +	{ 0x0000, 0xcf04, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xcf05, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xcf06, 0x0000, 0x0031, 0xb031 },
> +	{ 0x0000, 0xcf07, 0x0000, 0x00b4, 0xb031 },
> +	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xc130, 0x0000, 0x0051, 0xb031 },
> +	{ 0x0000, 0xe000, 0x0000, 0x00a8, 0xb031 },
> +	{ 0x4100, 0x1888, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
> +	{ 0x0000, 0xea00, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xed00, 0x0000, 0x0090, 0xb031 },
> +	{ 0x0000, 0xcc2c, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc2d, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xcc2e, 0x0000, 0x0076, 0xb031 },
> +	{ 0x0000, 0xcc2f, 0x0000, 0x0043, 0xb031 },
> +	{ 0x0000, 0xcd2c, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd2d, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xcd2e, 0x0000, 0x0076, 0xb031 },
> +	{ 0x0000, 0xcd2f, 0x0000, 0x0043, 0xb031 },
> +	{ 0x0000, 0xcc24, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc25, 0x0000, 0x0051, 0xb031 },
> +	{ 0x0000, 0xcc26, 0x0000, 0x00eb, 0xb031 },
> +	{ 0x0000, 0xcc27, 0x0000, 0x0085, 0xb031 },
> +	{ 0x0000, 0xcd24, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd25, 0x0000, 0x0051, 0xb031 },
> +	{ 0x0000, 0xcd26, 0x0000, 0x00eb, 0xb031 },
> +	{ 0x0000, 0xcd27, 0x0000, 0x0085, 0xb031 },
> +	{ 0x0000, 0xcc20, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc21, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc22, 0x0000, 0x0043, 0xb031 },
> +	{ 0x0000, 0xcd20, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd21, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd22, 0x0000, 0x0043, 0xb031 },
> +	{ 0x0000, 0xcc16, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xcc17, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd16, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xcd17, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc29, 0x0000, 0x005d, 0xb031 },
> +	{ 0x0000, 0xcc2a, 0x0000, 0x00c0, 0xb031 },
> +	{ 0x0000, 0xcd29, 0x0000, 0x005d, 0xb031 },
> +	{ 0x0000, 0xcd2a, 0x0000, 0x00c0, 0xb031 },
> +	{ 0x0000, 0xcc31, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xcc32, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc33, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc34, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd31, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xcd32, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd33, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd34, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc36, 0x0000, 0x0079, 0xb031 },
> +	{ 0x0000, 0xcc37, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xcc38, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xcc39, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xcd36, 0x0000, 0x0079, 0xb031 },
> +	{ 0x0000, 0xcd37, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xcd38, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xcd39, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xcc09, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc0a, 0x0000, 0x000a, 0xb031 },
> +	{ 0x0000, 0xcc0b, 0x0000, 0x007c, 0xb031 },
> +	{ 0x0000, 0xcc0c, 0x0000, 0x005b, 0xb031 },
> +	{ 0x0000, 0xcd09, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd0a, 0x0000, 0x000a, 0xb031 },
> +	{ 0x0000, 0xcd0b, 0x0000, 0x007c, 0xb031 },
> +	{ 0x0000, 0xcd0c, 0x0000, 0x005b, 0xb031 },
> +	{ 0x0000, 0xcc0e, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcc0f, 0x0000, 0x0005, 0xb031 },
> +	{ 0x0000, 0xcc10, 0x0000, 0x003e, 0xb031 },
> +	{ 0x0000, 0xcc11, 0x0000, 0x002d, 0xb031 },
> +	{ 0x0000, 0xcd0e, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcd0f, 0x0000, 0x0005, 0xb031 },
> +	{ 0x0000, 0xcd10, 0x0000, 0x003e, 0xb031 },
> +	{ 0x0000, 0xcd11, 0x0000, 0x002d, 0xb031 },
> +	{ 0x0000, 0xccd6, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xccd7, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xcdd6, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcdd7, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xccd8, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xccd9, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xcdd8, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcdd9, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xccda, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xccdb, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xcdda, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xcddb, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xc320, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xc321, 0x0000, 0x000a, 0xb031 },
> +	{ 0x0000, 0xe604, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xdb00, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xdd00, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xdc19, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xdc1a, 0x0000, 0x006a, 0xb031 },
> +	{ 0x0000, 0xdc1b, 0x0000, 0x00aa, 0xb031 },
> +	{ 0x0000, 0xdc1c, 0x0000, 0x00ab, 0xb031 },
> +	{ 0x0000, 0xdc1d, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xdc1e, 0x0000, 0x0027, 0xb031 },
> +	{ 0x0000, 0xdc1f, 0x0000, 0x0062, 0xb031 },
> +	{ 0x0000, 0xdc20, 0x0000, 0x0076, 0xb031 },
> +	{ 0x0000, 0xde19, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xde1a, 0x0000, 0x006a, 0xb031 },
> +	{ 0x0000, 0xde1b, 0x0000, 0x00aa, 0xb031 },
> +	{ 0x0000, 0xde1c, 0x0000, 0x00ab, 0xb031 },
> +	{ 0x0000, 0xde1d, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xde1e, 0x0000, 0x0027, 0xb031 },
> +	{ 0x0000, 0xde1f, 0x0000, 0x0062, 0xb031 },
> +	{ 0x0000, 0xde20, 0x0000, 0x0076, 0xb031 },
> +	{ 0x0000, 0xdb32, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xdd32, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xdb33, 0x0000, 0x000a, 0xb031 },
> +	{ 0x0000, 0xdd33, 0x0000, 0x000a, 0xb031 },
> +	{ 0x0000, 0xdb34, 0x0000, 0x001a, 0xb031 },
> +	{ 0x0000, 0xdd34, 0x0000, 0x001a, 0xb031 },
> +	{ 0x0000, 0xdb15, 0x0000, 0x00ef, 0xb031 },
> +	{ 0x0000, 0xdd15, 0x0000, 0x00ef, 0xb031 },
> +	{ 0x0000, 0xdb17, 0x0000, 0x003f, 0xb031 },
> +	{ 0x0000, 0xdd17, 0x0000, 0x003f, 0xb031 },
> +	{ 0x0000, 0xdb94, 0x0000, 0x0070, 0xb031 },
> +	{ 0x0000, 0xdd94, 0x0000, 0x0070, 0xb031 },
> +	{ 0x0000, 0xdb19, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xdd19, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xc203, 0x0000, 0x001c, 0xb031 },
> +	{ 0x0000, 0xdb00, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xdb04, 0x0000, 0x0005, 0xb031 },
> +	{ 0x0000, 0xdb05, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xdd04, 0x0000, 0x0005, 0xb031 },
> +	{ 0x0000, 0xdd05, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xdbbb, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xdbbc, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xdbbd, 0x0000, 0x00f3, 0xb031 },
> +	{ 0x0000, 0xdbbe, 0x0000, 0x00cf, 0xb031 },
> +	{ 0x0000, 0xddbb, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xddbc, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xddbd, 0x0000, 0x00f3, 0xb031 },
> +	{ 0x0000, 0xddbe, 0x0000, 0x00cf, 0xb031 },
> +	{ 0x0000, 0xdb01, 0x0000, 0x0079, 0xb031 },
> +	{ 0x0000, 0xdd01, 0x0000, 0x0079, 0xb031 },
> +	{ 0x0000, 0xdb08, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xdd08, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xdc52, 0x0000, 0x00ef, 0xb031 },
> +	{ 0x0000, 0xde52, 0x0000, 0x00ef, 0xb031 },
> +	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
> +	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
> +	{ 0x0000, 0xdf0a, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xdf0b, 0x0000, 0x007f, 0xb031 },
> +	{ 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xdf01, 0x0000, 0x0073, 0xb031 },
> +	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
> +	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xebcb, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xeb10, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xeb11, 0x0000, 0x00bb, 0xb031 },
> +	{ 0x0000, 0xeb12, 0x0000, 0x00ab, 0xb031 },
> +	{ 0x0000, 0xeb13, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xeb14, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb15, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xeb16, 0x0000, 0x0069, 0xb031 },
> +	{ 0x0000, 0xeb21, 0x0000, 0x0011, 0xb031 },
> +	{ 0x0000, 0xeb22, 0x0000, 0x00c2, 0xb031 },
> +	{ 0x0000, 0xeb23, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xeb24, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xeb25, 0x0000, 0x00bd, 0xb031 },
> +	{ 0x0000, 0xeb26, 0x0000, 0x0055, 0xb031 },
> +	{ 0x0000, 0xeb27, 0x0000, 0x00d0, 0xb031 },
> +	{ 0x0000, 0xeb28, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb29, 0x0000, 0x003c, 0xb031 },
> +	{ 0x0000, 0xeb2a, 0x0000, 0x0051, 0xb031 },
> +	{ 0x0000, 0xeb2b, 0x0000, 0x0018, 0xb031 },
> +	{ 0x0000, 0xeb30, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xeb31, 0x0000, 0x004f, 0xb031 },
> +	{ 0x0000, 0xeb32, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xeb33, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xeb34, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb35, 0x0000, 0x00bb, 0xb031 },
> +	{ 0x0000, 0xeb36, 0x0000, 0x0024, 0xb031 },
> +	{ 0x0000, 0xeb37, 0x0000, 0x0068, 0xb031 },
> +	{ 0x0000, 0xeb40, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb41, 0x0000, 0x00f5, 0xb031 },
> +	{ 0x0000, 0xeb42, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xeb43, 0x0000, 0x00e8, 0xb031 },
> +	{ 0x0000, 0xeb44, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xeb45, 0x0000, 0x004f, 0xb031 },
> +	{ 0x0000, 0xeb46, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xeb47, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xeb48, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb49, 0x0000, 0x00c5, 0xb031 },
> +	{ 0x0000, 0xeb4a, 0x0000, 0x0032, 0xb031 },
> +	{ 0x0000, 0xeb4b, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xeb50, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xeb51, 0x0000, 0x008a, 0xb031 },
> +	{ 0x0000, 0xeb52, 0x0000, 0x00b4, 0xb031 },
> +	{ 0x0000, 0xeb53, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xeb54, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb55, 0x0000, 0x007d, 0xb031 },
> +	{ 0x0000, 0xeb56, 0x0000, 0x00d9, 0xb031 },
> +	{ 0x0000, 0xeb57, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xeb60, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xeb61, 0x0000, 0x00e7, 0xb031 },
> +	{ 0x0000, 0xeb62, 0x0000, 0x00b5, 0xb031 },
> +	{ 0x0000, 0xeb63, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xeb64, 0x0000, 0x00fa, 0xb031 },
> +	{ 0x0000, 0xeb65, 0x0000, 0x0086, 0xb031 },
> +	{ 0x0000, 0xeb66, 0x0000, 0x00a8, 0xb031 },
> +	{ 0x0000, 0xeb67, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xeb68, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xeb69, 0x0000, 0x009a, 0xb031 },
> +	{ 0x0000, 0xeb6a, 0x0000, 0x002f, 0xb031 },
> +	{ 0x0000, 0xeb6b, 0x0000, 0x0018, 0xb031 },
> +	{ 0x0000, 0xebb6, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xeb70, 0x0000, 0x00f5, 0xb031 },
> +	{ 0x0000, 0xeb71, 0x0000, 0x00e1, 0xb031 },
> +	{ 0x0000, 0xeb72, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xeb73, 0x0000, 0x00d0, 0xb031 },
> +	{ 0x0000, 0xeb74, 0x0000, 0x0006, 0xb031 },
> +	{ 0x0000, 0xeb75, 0x0000, 0x0050, 0xb031 },
> +	{ 0x0000, 0xeb76, 0x0000, 0x002c, 0xb031 },
> +	{ 0x0000, 0xeb77, 0x0000, 0x0050, 0xb031 },
> +	{ 0x0000, 0xeb80, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb81, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xeb82, 0x0000, 0x0016, 0xb031 },
> +	{ 0x0000, 0xeb83, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xeb84, 0x0000, 0x00f5, 0xb031 },
> +	{ 0x0000, 0xeb85, 0x0000, 0x00e1, 0xb031 },
> +	{ 0x0000, 0xeb86, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xeb87, 0x0000, 0x00d0, 0xb031 },
> +	{ 0x0000, 0xeb88, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xeb89, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xeb8a, 0x0000, 0x0016, 0xb031 },
> +	{ 0x0000, 0xeb8b, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xebb8, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xeb90, 0x0000, 0x00fc, 0xb031 },
> +	{ 0x0000, 0xeb91, 0x0000, 0x008b, 0xb031 },
> +	{ 0x0000, 0xeb92, 0x0000, 0x00bd, 0xb031 },
> +	{ 0x0000, 0xeb93, 0x0000, 0x0064, 0xb031 },
> +	{ 0x0000, 0xeb94, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xeb95, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xeb96, 0x0000, 0x00e7, 0xb031 },
> +	{ 0x0000, 0xeb97, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xeba0, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xeba1, 0x0000, 0x0091, 0xb031 },
> +	{ 0x0000, 0xeba2, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xeba3, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xeba4, 0x0000, 0x00f6, 0xb031 },
> +	{ 0x0000, 0xeba5, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xeba6, 0x0000, 0x0093, 0xb031 },
> +	{ 0x0000, 0xeba7, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xeba8, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xeba9, 0x0000, 0x0087, 0xb031 },
> +	{ 0x0000, 0xebaa, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xebab, 0x0000, 0x006c, 0xb031 },
> +	{ 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
> +	{ 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
> +	{ 0x0000, 0xeb00, 0x0000, 0x0005, 0xb031 },
> +	{ 0x0000, 0xeb01, 0x0000, 0x00a9, 0xb031 },
> +	{ 0x0000, 0xeb02, 0x0000, 0x00df, 0xb031 },
> +	{ 0x0000, 0xeb03, 0x0000, 0x007b, 0xb031 },
> +	{ 0x0000, 0xeb05, 0x0000, 0x0079, 0xb031 },
> +	{ 0x0000, 0xeb06, 0x0000, 0x005a, 0xb031 },
> +	{ 0x0000, 0xeb07, 0x0000, 0x0004, 0xb031 },
> +	{ 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xd0cb, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xd0b0, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xd010, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd011, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xd012, 0x0000, 0x0092, 0xb031 },
> +	{ 0x0000, 0xd013, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd014, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xd015, 0x0000, 0x00f6, 0xb031 },
> +	{ 0x0000, 0xd016, 0x0000, 0x0072, 0xb031 },
> +	{ 0x0000, 0xd017, 0x0000, 0x00b0, 0xb031 },
> +	{ 0x0000, 0xd020, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xd021, 0x0000, 0x00fb, 0xb031 },
> +	{ 0x0000, 0xd022, 0x0000, 0x0037, 0xb031 },
> +	{ 0x0000, 0xd023, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd024, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd025, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xd026, 0x0000, 0x0090, 0xb031 },
> +	{ 0x0000, 0xd027, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xd028, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xd029, 0x0000, 0x00fb, 0xb031 },
> +	{ 0x0000, 0xd02a, 0x0000, 0x0037, 0xb031 },
> +	{ 0x0000, 0xd02b, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xce6a, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
> +	{ 0x0000, 0xdb04, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xdb05, 0x0000, 0x0006, 0xb031 },
> +	{ 0x0000, 0xcc00, 0x0000, 0x00c1, 0xb031 },
> +	{ 0x0000, 0xca02, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xca00, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xca62, 0x0000, 0x0077, 0xb031 },
> +	{ 0x0000, 0xca65, 0x0000, 0x0082, 0xb031 },
> +	{ 0x0000, 0xca68, 0x0000, 0x00c2, 0xb031 },
> +	{ 0x0000, 0xca75, 0x0000, 0x003a, 0xb031 },
> +	{ 0x0000, 0xca7b, 0x0000, 0x006f, 0xb031 },
> +	{ 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xc860, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xc861, 0x0000, 0x00e5, 0xb031 },
> +	{ 0x0000, 0xc862, 0x0000, 0x00eb, 0xb031 },
> +	{ 0x0000, 0xc863, 0x0000, 0x00c6, 0xb031 },
> +	{ 0x0000, 0xc864, 0x0000, 0x00ba, 0xb031 },
> +	{ 0x0000, 0xc865, 0x0000, 0x0061, 0xb031 },
> +	{ 0x0000, 0xc867, 0x0000, 0x0017, 0xb031 },
> +	{ 0x0000, 0xc868, 0x0000, 0x00ed, 0xb031 },
> +	{ 0x0000, 0xc869, 0x0000, 0x003c, 0xb031 },
> +	{ 0x0000, 0xc86a, 0x0000, 0x008a, 0xb031 },
> +	{ 0x0000, 0xc86b, 0x0000, 0x00e2, 0xb031 },
> +	{ 0x0000, 0xc875, 0x0000, 0x003a, 0xb031 },
> +	{ 0x0000, 0xc87b, 0x0000, 0x006f, 0xb031 },
> +	{ 0x0000, 0xc836, 0x0000, 0x00f9, 0xb031 },
> +	{ 0x0000, 0xc8a0, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xc833, 0x0000, 0x000b, 0xb031 },
> +	{ 0x0000, 0xc834, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xc83f, 0x0000, 0x0014, 0xb031 },
> +	{ 0x0000, 0xc83e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc83a, 0x0000, 0x0076, 0xb031 },
> +	{ 0x0000, 0xc83b, 0x0000, 0x0089, 0xb031 },
> +	{ 0x0000, 0xc830, 0x0000, 0x0013, 0xb031 },
> +	{ 0x0000, 0xc826, 0x0000, 0x00d1, 0xb031 },
> +	{ 0x0000, 0xc890, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xc823, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xc824, 0x0000, 0x0004, 0xb031 },
> +	{ 0x0000, 0xc82f, 0x0000, 0x0018, 0xb031 },
> +	{ 0x0000, 0xc82e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc820, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xc816, 0x0000, 0x00f9, 0xb031 },
> +	{ 0x0000, 0xc880, 0x0000, 0x00e1, 0xb031 },
> +	{ 0x0000, 0xc813, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xc814, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xc81f, 0x0000, 0x0014, 0xb031 },
> +	{ 0x0000, 0xc81e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc81a, 0x0000, 0x0066, 0xb031 },
> +	{ 0x0000, 0xc81b, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xc810, 0x0000, 0x000d, 0xb031 },
> +	{ 0x0000, 0xc846, 0x0000, 0x00f9, 0xb031 },
> +	{ 0x0000, 0xc8d0, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xc844, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xc84f, 0x0000, 0x0014, 0xb031 },
> +	{ 0x0000, 0xc84e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc84a, 0x0000, 0x0026, 0xb031 },
> +	{ 0x0000, 0xc84b, 0x0000, 0x0056, 0xb031 },
> +	{ 0x0000, 0xc800, 0x0000, 0x00b0, 0xb031 },
> +	{ 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xc500, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc501, 0x0000, 0x0026, 0xb031 },
> +	{ 0x0000, 0xc502, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xc503, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xc504, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xc505, 0x0000, 0x00da, 0xb031 },
> +	{ 0x0000, 0xc506, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xc507, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc510, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xc511, 0x0000, 0x00da, 0xb031 },
> +	{ 0x0000, 0xc512, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xc513, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc514, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc515, 0x0000, 0x0026, 0xb031 },
> +	{ 0x0000, 0xc516, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xc517, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xc518, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
> +	{ 0x0000, 0xd251, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
> +	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
> +	{ 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xecb0, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xec10, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xec11, 0x0000, 0x00bb, 0xb031 },
> +	{ 0x0000, 0xec12, 0x0000, 0x00ab, 0xb031 },
> +	{ 0x0000, 0xec13, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xec14, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec15, 0x0000, 0x004c, 0xb031 },
> +	{ 0x0000, 0xec16, 0x0000, 0x0069, 0xb031 },
> +	{ 0x0000, 0xec21, 0x0000, 0x0011, 0xb031 },
> +	{ 0x0000, 0xec22, 0x0000, 0x00c2, 0xb031 },
> +	{ 0x0000, 0xec23, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xec24, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xec25, 0x0000, 0x00bd, 0xb031 },
> +	{ 0x0000, 0xec26, 0x0000, 0x0055, 0xb031 },
> +	{ 0x0000, 0xec27, 0x0000, 0x00d0, 0xb031 },
> +	{ 0x0000, 0xec28, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec29, 0x0000, 0x003c, 0xb031 },
> +	{ 0x0000, 0xec2a, 0x0000, 0x0051, 0xb031 },
> +	{ 0x0000, 0xec2b, 0x0000, 0x0018, 0xb031 },
> +	{ 0x0000, 0xecb2, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xec30, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xec31, 0x0000, 0x004f, 0xb031 },
> +	{ 0x0000, 0xec32, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xec33, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xec34, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec35, 0x0000, 0x00bb, 0xb031 },
> +	{ 0x0000, 0xec36, 0x0000, 0x0024, 0xb031 },
> +	{ 0x0000, 0xec37, 0x0000, 0x0068, 0xb031 },
> +	{ 0x0000, 0xec40, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec41, 0x0000, 0x00f5, 0xb031 },
> +	{ 0x0000, 0xec42, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xec43, 0x0000, 0x00e8, 0xb031 },
> +	{ 0x0000, 0xec44, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xec45, 0x0000, 0x004f, 0xb031 },
> +	{ 0x0000, 0xec46, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xec47, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xec48, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec49, 0x0000, 0x00c5, 0xb031 },
> +	{ 0x0000, 0xec4a, 0x0000, 0x0032, 0xb031 },
> +	{ 0x0000, 0xec4b, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xecb4, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xec50, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xec51, 0x0000, 0x008a, 0xb031 },
> +	{ 0x0000, 0xec52, 0x0000, 0x00b4, 0xb031 },
> +	{ 0x0000, 0xec53, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xec54, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec55, 0x0000, 0x007d, 0xb031 },
> +	{ 0x0000, 0xec56, 0x0000, 0x00d9, 0xb031 },
> +	{ 0x0000, 0xec57, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xec60, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xec61, 0x0000, 0x00e7, 0xb031 },
> +	{ 0x0000, 0xec62, 0x0000, 0x00b5, 0xb031 },
> +	{ 0x0000, 0xec63, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xec64, 0x0000, 0x00fa, 0xb031 },
> +	{ 0x0000, 0xec65, 0x0000, 0x0086, 0xb031 },
> +	{ 0x0000, 0xec66, 0x0000, 0x00a8, 0xb031 },
> +	{ 0x0000, 0xec67, 0x0000, 0x0040, 0xb031 },
> +	{ 0x0000, 0xec68, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xec69, 0x0000, 0x009a, 0xb031 },
> +	{ 0x0000, 0xec6a, 0x0000, 0x002f, 0xb031 },
> +	{ 0x0000, 0xec6b, 0x0000, 0x0018, 0xb031 },
> +	{ 0x0000, 0xecb6, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xec70, 0x0000, 0x00f5, 0xb031 },
> +	{ 0x0000, 0xec71, 0x0000, 0x00e1, 0xb031 },
> +	{ 0x0000, 0xec72, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xec73, 0x0000, 0x00d0, 0xb031 },
> +	{ 0x0000, 0xec74, 0x0000, 0x0006, 0xb031 },
> +	{ 0x0000, 0xec75, 0x0000, 0x0050, 0xb031 },
> +	{ 0x0000, 0xec76, 0x0000, 0x002c, 0xb031 },
> +	{ 0x0000, 0xec77, 0x0000, 0x0050, 0xb031 },
> +	{ 0x0000, 0xec80, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec81, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xec82, 0x0000, 0x0016, 0xb031 },
> +	{ 0x0000, 0xec83, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xec84, 0x0000, 0x00f5, 0xb031 },
> +	{ 0x0000, 0xec85, 0x0000, 0x00e1, 0xb031 },
> +	{ 0x0000, 0xec86, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xec87, 0x0000, 0x00d0, 0xb031 },
> +	{ 0x0000, 0xec88, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xec89, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xec8a, 0x0000, 0x0016, 0xb031 },
> +	{ 0x0000, 0xec8b, 0x0000, 0x0028, 0xb031 },
> +	{ 0x0000, 0xecb8, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xec90, 0x0000, 0x00fc, 0xb031 },
> +	{ 0x0000, 0xec91, 0x0000, 0x008b, 0xb031 },
> +	{ 0x0000, 0xec92, 0x0000, 0x00bd, 0xb031 },
> +	{ 0x0000, 0xec93, 0x0000, 0x0064, 0xb031 },
> +	{ 0x0000, 0xec94, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xec95, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xec96, 0x0000, 0x00e7, 0xb031 },
> +	{ 0x0000, 0xec97, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xeca0, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xeca1, 0x0000, 0x0091, 0xb031 },
> +	{ 0x0000, 0xeca2, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xeca3, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xeca4, 0x0000, 0x00f6, 0xb031 },
> +	{ 0x0000, 0xeca5, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xeca6, 0x0000, 0x0093, 0xb031 },
> +	{ 0x0000, 0xeca7, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xeca8, 0x0000, 0x0003, 0xb031 },
> +	{ 0x0000, 0xeca9, 0x0000, 0x0087, 0xb031 },
> +	{ 0x0000, 0xecaa, 0x0000, 0x0099, 0xb031 },
> +	{ 0x0000, 0xecab, 0x0000, 0x006c, 0xb031 },
> +	{ 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
> +	{ 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
> +	{ 0x0000, 0xec00, 0x0000, 0x0005, 0xb031 },
> +	{ 0x0000, 0xec01, 0x0000, 0x00a9, 0xb031 },
> +	{ 0x0000, 0xec02, 0x0000, 0x00df, 0xb031 },
> +	{ 0x0000, 0xec03, 0x0000, 0x007b, 0xb031 },
> +	{ 0x0000, 0xec05, 0x0000, 0x0079, 0xb031 },
> +	{ 0x0000, 0xec06, 0x0000, 0x005a, 0xb031 },
> +	{ 0x0000, 0xec07, 0x0000, 0x0004, 0xb031 },
> +	{ 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xd1b0, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xd110, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd111, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xd112, 0x0000, 0x0092, 0xb031 },
> +	{ 0x0000, 0xd113, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd114, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xd115, 0x0000, 0x00f6, 0xb031 },
> +	{ 0x0000, 0xd116, 0x0000, 0x0072, 0xb031 },
> +	{ 0x0000, 0xd117, 0x0000, 0x00b0, 0xb031 },
> +	{ 0x0000, 0xd120, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xd121, 0x0000, 0x00fb, 0xb031 },
> +	{ 0x0000, 0xd122, 0x0000, 0x0037, 0xb031 },
> +	{ 0x0000, 0xd123, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd124, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd125, 0x0000, 0x0009, 0xb031 },
> +	{ 0x0000, 0xd126, 0x0000, 0x0090, 0xb031 },
> +	{ 0x0000, 0xd127, 0x0000, 0x0020, 0xb031 },
> +	{ 0x0000, 0xd128, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xd129, 0x0000, 0x00fb, 0xb031 },
> +	{ 0x0000, 0xd12a, 0x0000, 0x0037, 0xb031 },
> +	{ 0x0000, 0xd12b, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
> +	{ 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
> +	{ 0x0000, 0xdd04, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xdd05, 0x0000, 0x0006, 0xb031 },
> +	{ 0x0000, 0xca12, 0x0000, 0x000f, 0xb031 },
> +	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xca82, 0x0000, 0x0077, 0xb031 },
> +	{ 0x0000, 0xca85, 0x0000, 0x0082, 0xb031 },
> +	{ 0x0000, 0xca88, 0x0000, 0x00c2, 0xb031 },
> +	{ 0x0000, 0xca95, 0x0000, 0x003a, 0xb031 },
> +	{ 0x0000, 0xca9b, 0x0000, 0x006f, 0xb031 },
> +	{ 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xc960, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xc961, 0x0000, 0x00e5, 0xb031 },
> +	{ 0x0000, 0xc962, 0x0000, 0x00eb, 0xb031 },
> +	{ 0x0000, 0xc963, 0x0000, 0x00c6, 0xb031 },
> +	{ 0x0000, 0xc964, 0x0000, 0x00ba, 0xb031 },
> +	{ 0x0000, 0xc965, 0x0000, 0x0061, 0xb031 },
> +	{ 0x0000, 0xc967, 0x0000, 0x0017, 0xb031 },
> +	{ 0x0000, 0xc968, 0x0000, 0x00ed, 0xb031 },
> +	{ 0x0000, 0xc969, 0x0000, 0x003c, 0xb031 },
> +	{ 0x0000, 0xc96a, 0x0000, 0x008a, 0xb031 },
> +	{ 0x0000, 0xc96b, 0x0000, 0x00e2, 0xb031 },
> +	{ 0x0000, 0xc975, 0x0000, 0x003a, 0xb031 },
> +	{ 0x0000, 0xc97b, 0x0000, 0x006f, 0xb031 },
> +	{ 0x0000, 0xc936, 0x0000, 0x00f9, 0xb031 },
> +	{ 0x0000, 0xc9a0, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xc933, 0x0000, 0x000b, 0xb031 },
> +	{ 0x0000, 0xc934, 0x0000, 0x0002, 0xb031 },
> +	{ 0x0000, 0xc93f, 0x0000, 0x0014, 0xb031 },
> +	{ 0x0000, 0xc93e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc93a, 0x0000, 0x0076, 0xb031 },
> +	{ 0x0000, 0xc93b, 0x0000, 0x0089, 0xb031 },
> +	{ 0x0000, 0xc930, 0x0000, 0x0013, 0xb031 },
> +	{ 0x0000, 0xc926, 0x0000, 0x00d1, 0xb031 },
> +	{ 0x0000, 0xc990, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xc923, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xc924, 0x0000, 0x0004, 0xb031 },
> +	{ 0x0000, 0xc92f, 0x0000, 0x0018, 0xb031 },
> +	{ 0x0000, 0xc92e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc920, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xc916, 0x0000, 0x00f9, 0xb031 },
> +	{ 0x0000, 0xc980, 0x0000, 0x00e1, 0xb031 },
> +	{ 0x0000, 0xc913, 0x0000, 0x0000, 0xb031 },
> +	{ 0x0000, 0xc914, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xc91f, 0x0000, 0x0014, 0xb031 },
> +	{ 0x0000, 0xc91e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc91a, 0x0000, 0x0066, 0xb031 },
> +	{ 0x0000, 0xc91b, 0x0000, 0x0078, 0xb031 },
> +	{ 0x0000, 0xc910, 0x0000, 0x000d, 0xb031 },
> +	{ 0x0000, 0xc946, 0x0000, 0x00f9, 0xb031 },
> +	{ 0x0000, 0xc9d0, 0x0000, 0x00f1, 0xb031 },
> +	{ 0x0000, 0xc944, 0x0000, 0x0001, 0xb031 },
> +	{ 0x0000, 0xc94f, 0x0000, 0x0014, 0xb031 },
> +	{ 0x0000, 0xc94e, 0x0000, 0x0094, 0xb031 },
> +	{ 0x0000, 0xc94a, 0x0000, 0x0026, 0xb031 },
> +	{ 0x0000, 0xc94b, 0x0000, 0x0056, 0xb031 },
> +	{ 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xc600, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc601, 0x0000, 0x0026, 0xb031 },
> +	{ 0x0000, 0xc602, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xc603, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xc604, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xc605, 0x0000, 0x00da, 0xb031 },
> +	{ 0x0000, 0xc606, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xc607, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc610, 0x0000, 0x0007, 0xb031 },
> +	{ 0x0000, 0xc611, 0x0000, 0x00da, 0xb031 },
> +	{ 0x0000, 0xc612, 0x0000, 0x000e, 0xb031 },
> +	{ 0x0000, 0xc613, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc614, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xc615, 0x0000, 0x0026, 0xb031 },
> +	{ 0x0000, 0xc616, 0x0000, 0x004a, 0xb031 },
> +	{ 0x0000, 0xc617, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xc618, 0x0000, 0x0008, 0xb031 },
> +	{ 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xc802, 0x0000, 0x00d2, 0xb031 },
> +	{ 0x0000, 0xc902, 0x0000, 0x00d2, 0xb031 },
> +	{ 0x0000, 0xc800, 0x0000, 0x00f0, 0xb031 },
> +	{ 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
> +	{ 0x0000, 0xd252, 0x0000, 0x0030, 0xb031 },
> +	{ 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
> +	{ 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
> +	{ 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
> +	{ 0x0000, 0xdbb5, 0x0041, 0xd27f, 0xb037 },
> +	{ 0x0000, 0xddb5, 0x0040, 0x6e3b, 0xb037 },
> +	{ 0x0000, 0xdb93, 0x0000, 0x009e, 0xb033 },
> +	{ 0x0000, 0xdd93, 0x0000, 0x009e, 0xb033 },
> +	{ 0x0000, 0xdb12, 0x0000, 0x00c0, 0xb031 },
> +	{ 0x0000, 0xdd12, 0x0000, 0x00c0, 0xb031 },
> +	{ 0x0000, 0xdb08, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xdd08, 0x0000, 0x0080, 0xb031 },
> +	{ 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
> +	{ 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
> +	{ 0x0000, 0x0010, 0x0000, 0x0f21, 0x0000 },
> +};
> +
> +/* wake the amp (ea00=0x43, c121=0x0b, f109=0xe0) */
> +static const struct alc298_rb16_op alc298_rb16_amp_wake[] = {
> +	{ 0x0000, 0xea00, 0x0000, 0x0043, 0xb031 },
> +	{ 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
> +	{ 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
> +};
> +
> +/* park the amp (ea00=0x47, c121=0x0a, f109=0xa0) */
> +static const struct alc298_rb16_op alc298_rb16_amp_sleep[] = {
> +	{ 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
> +	{ 0x0000, 0xc121, 0x0000, 0x000a, 0xb031 },
> +	{ 0x0000, 0xf109, 0x0000, 0x00a0, 0xb031 },
> +};

It's way too big to embed into alc269.c.  Please put into another file
and include it, instead.

> +
> +static void alc298_rb16_pcm_hook(struct hda_pcm_stream *hinfo,
> +				 struct hda_codec *codec,
> +				 struct snd_pcm_substream *substream,
> +				 int action)
> +{
> +	/* power the external amp only while a stream is running */
> +	switch (action) {
> +	case HDA_GEN_PCM_ACT_PREPARE:
> +		alc298_rb16_apply(codec, alc298_rb16_amp_wake,
> +				  ARRAY_SIZE(alc298_rb16_amp_wake));
> +		break;
> +	case HDA_GEN_PCM_ACT_CLEANUP:
> +		alc298_rb16_apply(codec, alc298_rb16_amp_sleep,
> +				  ARRAY_SIZE(alc298_rb16_amp_sleep));
> +		break;
> +	}
> +}

Any reason this must be a PCM hook?  The amp control could be done via
the normal power control path by simply setting
codec->power_save_node=1; then the power up of each widget is
optimized depending on the used path dynamically via runtime PM.


thanks,

Takashi

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-06-22  8:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-20 14:41 [PATCH] ALSA: hda/realtek: Enable internal speakers on Razer Blade 16 (2025) Christopher Höner
2026-06-21 20:57 ` [PATCH v2] " Christopher Höner
2026-06-22  8:55   ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.