1
0
mirror of https://github.com/taigrr/gopher-os synced 2025-01-18 04:43:13 -08:00

acpi: test the parser against actual AML dumps

All dumps are located in the tabletest package. The DSDT/SSDT dumps were
obtained by running an aml dump tool inside a virtualbox instance. The
dumps were disassembled using the iasl tool (version 20180105) from
Intel's reference ACPICA implementation.

The parser-testsuite dumps were written by hand to ensure that all
possible happy-paths in the parser were followed and then compiled into
AML using the same iasl tool.

The added TestParser function attempts to parse various sets of AML
dumps and then uses the object tree pretty-printer to obtain a dump of
the tree. The dump is then compared to an expected value (.exp files are
also placed in the tabletest package). The test code supports passing
the "-aml-regenerate-parser-exp-files" flag to update the exp files:

go test -run TestParser -aml-regenerate-parser-exp-files
This commit is contained in:
Achilleas Anagnostopoulos 2018-03-06 08:49:52 +00:00
parent 9dd9ab9add
commit d7028ed73d
7 changed files with 8065 additions and 0 deletions

View File

@ -2,14 +2,94 @@ package aml
import (
"bytes"
"flag"
"fmt"
"gopheros/device/acpi/table"
"io/ioutil"
"os"
"path/filepath"
"reflect"
"runtime"
"strings"
"testing"
"unsafe"
)
var (
regenExpFiles = flag.Bool("aml-regenerate-parser-exp-files", false, "Regenerate the expected output files for AML parser tests against real AML files")
)
func TestParser(t *testing.T) {
flag.Parse()
pathToDumps := pkgDir() + "/../table/tabletest/"
specs := []struct {
expTreeContentFile string
tableFiles []string
}{
{
"DSDT-SSDT.exp",
[]string{"DSDT.aml", "SSDT.aml"},
},
{
"parser-testsuite-DSDT.exp",
[]string{"parser-testsuite-DSDT.aml"},
},
}
for _, spec := range specs {
t.Run(fmt.Sprintf("parse [%s]", strings.Join(spec.tableFiles, ", ")), func(t *testing.T) {
var resolver = mockResolver{
pathToDumps: pathToDumps,
tableFiles: spec.tableFiles,
}
tree := NewObjectTree()
tree.CreateDefaultScopes(42)
p := NewParser(&testWriter{t: t}, tree)
for tableIndex, tableFile := range spec.tableFiles {
tableName := strings.Replace(tableFile, ".aml", "", -1)
if err := p.ParseAML(uint8(tableIndex), tableName, resolver.LookupTable(tableName)); err != nil {
t.Errorf("[%s]: %v", tableName, err)
return
}
}
// Pretty-print tree
var treeDump bytes.Buffer
tree.PrettyPrint(&treeDump)
// Check if we need to rebuild the exp files
pathToExpFile := filepath.Join(pathToDumps, spec.expTreeContentFile)
if *regenExpFiles {
f, err := os.Create(pathToExpFile)
if err != nil {
t.Fatal(err)
}
defer func() { _ = f.Close() }()
if _, err = treeDump.WriteTo(f); err != nil {
t.Fatal(err)
}
t.Logf("regenerated exp file contents: %s", pathToExpFile)
return
}
// Read the exp file and compare its contents to the generated dump
expDump, err := ioutil.ReadFile(pathToExpFile)
if err != nil {
t.Fatalf("error opening exp file: %s; try running tests with -aml-regenerate-parser-exp-files", pathToExpFile)
}
if !reflect.DeepEqual(expDump, treeDump.Bytes()) {
t.Fatal("parsed tree content does not match expected content")
}
})
}
}
func TestParseAMLErrors(t *testing.T) {
t.Run("parseObjectList failed", func(t *testing.T) {
p, resolver := parserForMockPayload(t, []byte{uint8(pOpBuffer)})
@ -903,3 +983,30 @@ func (m mockByteDataResolver) LookupTable(string) *table.SDTHeader {
return header
}
func pkgDir() string {
_, f, _, _ := runtime.Caller(1)
return filepath.Dir(f)
}
type mockResolver struct {
pathToDumps string
tableFiles []string
}
func (m mockResolver) LookupTable(name string) *table.SDTHeader {
for _, f := range m.tableFiles {
if !strings.Contains(f, name) {
continue
}
data, err := ioutil.ReadFile(filepath.Join(m.pathToDumps, f))
if err != nil {
panic(err)
}
return (*table.SDTHeader)(unsafe.Pointer(&data[0]))
}
return nil
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,431 @@
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20180105 (64-bit version)
* Copyright (c) 2000 - 2018 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of SSDT.aml, Tue Jan 30 08:22:57 2018
*
* Original Table Header:
* Signature "SSDT"
* Length 0x000001CC (460)
* Revision 0x01
* Checksum 0x9D
* OEM ID "VBOX "
* OEM Table ID "VBOXCPUT"
* OEM Revision 0x00000002 (2)
* Compiler ID "INTL"
* Compiler Version 0x20100528 (537920808)
*/
DefinitionBlock ("", "SSDT", 1, "VBOX ", "VBOXCPUT", 0x00000002)
{
Scope (\_PR)
{
Processor (CPU0, 0x00, 0x00000000, 0x00){}
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
Noop
}
}

View File

@ -0,0 +1,255 @@
// DSDT-parser-testsuite
//
// This file contains various ASL constructs to ensure that the AML parser
// properly handles all possible ASL opcodes it may encounter. This test file
// is used in addition to the DSDT.aml file obtained by running acpidump inside
// virtualbox.
DefinitionBlock ("parser-testsuite-DSDT.aml", "DSDT", 2, "GOPHER", "GOPHEROS", 0x00000002)
{
OperationRegion (DBG0, SystemIO, 0x3000, 0x04)
Field (DBG0, ByteAcc, NoLock, Preserve)
{
DHE1, 8
}
Device (DRV0)
{
Name (_ADR, Ones)
// named entity containing qword const
Name (H15F, 0xBADC0FEEDEADC0DE)
Method (_GTF, 0, NotSerialized) // _GTF: Get Task File
{
Return (H15F)
}
}
// example from p. 268 of ACPI 6.2 spec
Scope(\_SB){
OperationRegion(TOP1, GenericSerialBus, 0x00, 0x100) // GenericSerialBus device at command offset 0x00
Name (SDB0, ResourceTemplate() {})
Field(TOP1, BufferAcc, NoLock, Preserve){
Connection(SDB0), // Use the Resource Descriptor defined above
AccessAs(BufferAcc, AttribWord),
FLD0, 8,
FLD1, 8
}
Field(TOP1, BufferAcc, NoLock, Preserve){
Connection(I2cSerialBus(0x5b,,100000,, "\\_SB",,,,RawDataBuffer(){3,9})),
AccessAs(BufferAcc, AttribBytes(4)),
FLD2, 8,
AccessAs(BufferAcc, AttribRawBytes(3)),
FLD3, 8,
AccessAs(BufferAcc, AttribRawProcessBytes(2)),
FLD4, 8
}
}
// Buffer whose size is given by a nested method invocation which is
// evaluated at load-time
Method(BLE1, 1, Serialized)
{
Return(Arg0 + 1)
}
Name(BUFZ, Buffer(BLEN(BLE1(0xff), 0x0f)){0x48, 0x49, 0x21} )
Method(BLEN, 2, Serialized)
{
Return(Arg0 + Arg1 + 12)
}
// Load time assignment
FET0 = 1
// A buffer whose length is given by a named object
Name(BUFL, One)
Name(BUFF, Buffer(BUFL){})
// Other entity types
Event(HLO0)
Mutex(MUT0,1)
Signal(HLO0)
// Other executable bits
Method (EXE0, 1, Serialized)
{
// AML interpreter revision
Local0 = Revision
// NameString target
Local1 = SizeOf(GLB1)
Local0 = "my-handle"
Load(DBG0, Local0)
Unload(Local0)
// CreateXXXField
CreateBitField(Arg0, 0, WFL0)
if(Arg0==0){
Return(WFL0)
}
CreateByteField(Arg0, 0, WFL1)
if(Arg0==1){
Return(WFL1)
}
CreateWordField(Arg0, 0, WFL2)
if(Arg0==2){
Return(WFL2)
}
CreateDwordField(Arg0, 0, WFL3)
if(Arg0==3){
Return(WFL3)
}
CreateQwordField(Arg0, 0, WFL4)
if(Arg0==4){
Return(WFL4)
}
CreateField(Arg0, 0, 13, WFL5)
if(Arg0==5){
Return(WFL5)
}
// Example from p. 951 of the spec
Store (
LoadTable ("OEM1", "MYOEM", "TABLE1", "\\_SB.PCI0","MYD", Package () {0,"\\_SB.PCI0"}),
Local0
)
// Various Assignments
Local0 = 0xff
Local0 = 0xffff
Local0 = 0xffffffff
Local0 = 0xffffffffffffffff
Local0 = Zero
Local0 = One
Local0 = Ones
Local0 = "FOO"
// Conversions
FromBCD(9, Arg0)
ToBCD(Arg0, Local1)
// Debugging and error handling
Breakpoint
Debug = "test"
Fatal(0xf0, 0xdeadc0de, 1)
// Mutex support
Acquire(MUT0, 0xffff) // no timeout
Release(MUT0)
// Signal/Wait
Reset(HLO0)
Wait(HLO0, 0xffff)
// Get monotonic timer value
Local0 = Timer
CopyObject(Local0, Local1)
Return(ObjectType(Local1))
}
// BankField example from p. 910 of the spec
// Define a 256-byte operational region in SystemIO space and name it GIO0
OperationRegion (GIO0, SystemIO, 0x125, 0x100)
Field (GIO0, ByteAcc, NoLock, Preserve) {
GLB1, 1,
GLB2, 1,
Offset (1), // Move to offset for byte 1
BNK1, 4
}
BankField (GIO0, BNK1, 0, ByteAcc, Lock, WriteAsOnes) {
Offset (0x30),
FET0, 1,
FET1, 1,
}
// SMBus fields access types
OperationRegion(SMBD, SMBus, 0x4200, 0x100)
Field(SMBD, BufferAcc, NoLock, WriteAsZeros){
AccessAs(BufferAcc, SMBByte),
SFL0, 8,
AccessAs(BufferAcc, SMBWord),
SFL1, 8,
AccessAs(BufferAcc, SMBBlock),
SFL2, 8,
AccessAs(BufferAcc, SMBQuick),
SFL3, 8,
AccessAs(BufferAcc, SMBSendReceive),
SFL4, 8,
AccessAs(BufferAcc, SMBProcessCall),
SFL5, 8,
AccessAs(BufferAcc, SMBBlockProcessCall),
SFL6, 8,
AccessAs(BufferAcc, AttribBytes(0x12)),
SFL7, 8,
AccessAs(BufferAcc, AttribRawBytes(0x13)),
SFL8, 8,
AccessAs(BufferAcc, AttribRawProcessBytes(0x14)),
SFL9, 8,
//
AccessAs(AnyAcc),
SF10, 8,
AccessAs(ByteAcc),
SF11, 8,
AccessAs(WordAcc),
SF12, 8,
AccessAs(DwordAcc),
SF13, 8,
AccessAs(QwordAcc),
SF14, 8,
}
// Data Region
DataTableRegion (REG0, "FOOF", "BAR", "BAZ")
// Other resources
Processor(CPU0, 1, 0x120, 6){}
PowerResource(PWR0, 0, 0){}
ThermalZone(TZ0){}
// Method with various logic/flow changing opcodes
Method (FLOW, 2, NotSerialized)
{
While(Arg0 < Arg1)
{
Arg0++
If( Arg0 < 5 ) {
Continue
} Else {
If ( Arg1 == 0xff ) {
Break
} Else {
Arg0 = Arg0 + 1
}
}
}
Return(Arg0)
}
// Forward declaration to SCP0
Scope(\_SB) {
ThermalZone(^THRM){
Name(DEF0, Ones)
}
}
Scope(\THRM){
Name(DEF1, Zero)
}
Method(\THRM.MTH0, 0, NotSerialized){
Return(1)
}
}

View File

@ -0,0 +1,346 @@
+- [ScopeBlock, name: "\", table: 42, index: 0, offset: 0x0]
+- [ScopeBlock, name: "_GPE", table: 42, index: 1, offset: 0x0]
+- [ScopeBlock, name: "_PR_", table: 42, index: 2, offset: 0x0]
+- [ScopeBlock, name: "_SB_", table: 42, index: 3, offset: 0x0]
| +- [OpRegion, name: "TOP1", table: 0, index: 33, offset: 0x6c]
| | +- [NamePath, table: 0, index: 34, offset: 0x6e] -> [namepath: "TOP1"]
| | +- [BytePrefix, table: 0, index: 35, offset: 0x72] -> [num value; dec: 9, hex: 0x9]
| | +- [BytePrefix, table: 0, index: 36, offset: 0x73] -> [num value; dec: 0, hex: 0x0]
| | +- [WordPrefix, table: 0, index: 37, offset: 0x75] -> [num value; dec: 256, hex: 0x100]
| +- [Name, name: "SDB0", table: 0, index: 38, offset: 0x78]
| | +- [NamePath, table: 0, index: 39, offset: 0x79] -> [namepath: "SDB0"]
| | +- [Buffer, table: 0, index: 40, offset: 0x7d]
| | +- [BytePrefix, table: 0, index: 316, offset: 0x7f] -> [num value; dec: 2, hex: 0x2]
| | +- [ByteList, table: 0, index: 318, offset: 0x3cb] -> [bytelist value; len: 2; data: [0x79, 0x0]]
| +- [Field, table: 0, index: 41, offset: 0x83]
| | +- [NamePath, table: 0, index: 42, offset: 0x86] -> [namepath: "TOP1"]
| | +- [BytePrefix, table: 0, index: 43, offset: 0x8a] -> [num value; dec: 5, hex: 0x5]
| | +- [Connection, table: 0, index: 44, offset: 0x0]
| | +- [NamePath, table: 0, index: 45, offset: 0x8c] -> [namepath: "SDB0"]
| +- [NamedField, name: "FLD0", table: 0, index: 46, offset: 0x93] -> [field index: 41, offset(bytes): 0x0, width(bits): 0x8, accType: Buffer, accAttr: Word, lockType: NoLock, updateType: Preserve, connection: index 44]
| +- [NamedField, name: "FLD1", table: 0, index: 47, offset: 0x98] -> [field index: 41, offset(bytes): 0x8, width(bits): 0x8, accType: Buffer, accAttr: Word, lockType: NoLock, updateType: Preserve, connection: index 44]
| +- [Field, table: 0, index: 48, offset: 0x9d]
| | +- [NamePath, table: 0, index: 49, offset: 0xa0] -> [namepath: "TOP1"]
| | +- [BytePrefix, table: 0, index: 50, offset: 0xa4] -> [num value; dec: 5, hex: 0x5]
| | +- [Connection, table: 0, index: 51, offset: 0x0]
| | +- [ByteList, table: 0, index: 52, offset: 0xa7] -> [bytelist value; len: 25; data: [0x8e, 0x16, 0x0, 0x1, 0x0, 0x1, 0x2, 0x0, 0x0, 0x1, 0x8, 0x0, 0xa0, 0x86, 0x1, 0x0, 0x5b, 0x0, 0x3, 0x9, 0x5c, 0x5f, 0x53, 0x42, 0x0]]
| +- [NamedField, name: "FLD2", table: 0, index: 53, offset: 0xc7] -> [field index: 48, offset(bytes): 0x0, width(bits): 0x8, accType: Buffer, accAttr: Bytes(0x4), lockType: NoLock, updateType: Preserve, connection: index 51]
| +- [NamedField, name: "FLD3", table: 0, index: 54, offset: 0xd0] -> [field index: 48, offset(bytes): 0x8, width(bits): 0x8, accType: Buffer, accAttr: RawBytes(0x3), lockType: NoLock, updateType: Preserve, connection: index 51]
| +- [NamedField, name: "FLD4", table: 0, index: 55, offset: 0xd9] -> [field index: 48, offset(bytes): 0x10, width(bits): 0x8, accType: Buffer, accAttr: RawProcessBytes(0x2), lockType: NoLock, updateType: Preserve, connection: index 51]
+- [ScopeBlock, name: "_SI_", table: 42, index: 4, offset: 0x0]
+- [ScopeBlock, name: "_TZ_", table: 42, index: 5, offset: 0x0]
+- [OpRegion, name: "DBG0", table: 0, index: 6, offset: 0x24]
| +- [NamePath, table: 0, index: 7, offset: 0x26] -> [namepath: "DBG0"]
| +- [BytePrefix, table: 0, index: 8, offset: 0x2a] -> [num value; dec: 1, hex: 0x1]
| +- [WordPrefix, table: 0, index: 9, offset: 0x2b] -> [num value; dec: 12288, hex: 0x3000]
| +- [BytePrefix, table: 0, index: 10, offset: 0x2e] -> [num value; dec: 4, hex: 0x4]
+- [Field, table: 0, index: 11, offset: 0x30]
| +- [NamePath, table: 0, index: 12, offset: 0x33] -> [namepath: "DBG0"]
| +- [BytePrefix, table: 0, index: 13, offset: 0x37] -> [num value; dec: 1, hex: 0x1]
+- [NamedField, name: "DHE1", table: 0, index: 14, offset: 0x38] -> [field index: 11, offset(bytes): 0x0, width(bits): 0x8, accType: Byte, lockType: NoLock, updateType: Preserve, connection: -]
+- [Device, name: "DRV0", table: 0, index: 15, offset: 0x3d]
| +- [NamePath, table: 0, index: 16, offset: 0x40] -> [namepath: "DRV0"]
| +- [ScopeBlock, table: 0, index: 17, offset: 0x44]
| +- [Name, name: "_ADR", table: 0, index: 18, offset: 0x44]
| | +- [NamePath, table: 0, index: 19, offset: 0x45] -> [namepath: "_ADR"]
| | +- [Ones, table: 0, index: 20, offset: 0x49]
| +- [Name, name: "H15F", table: 0, index: 21, offset: 0x4a]
| | +- [NamePath, table: 0, index: 22, offset: 0x4b] -> [namepath: "H15F"]
| | +- [QwordPrefix, table: 0, index: 23, offset: 0x4f] -> [num value; dec: 13464654504543502558, hex: 0xbadc0feedeadc0de]
| +- [Method, name: "_GTF", argCount: 0, table: 0, index: 24, offset: 0x58]
| +- [NamePath, table: 0, index: 25, offset: 0x5a] -> [namepath: "_GTF"]
| +- [BytePrefix, table: 0, index: 26, offset: 0x5e] -> [num value; dec: 0, hex: 0x0]
| +- [ScopeBlock, table: 0, index: 27, offset: 0x5f]
| +- [Return, table: 0, index: 28, offset: 0x5f]
| +- [ResolvedNamePath, table: 0, index: 29, offset: 0x60] -> [resolved to "H15F", table: 0, index: 21, offset: 0x4a]
+- [Method, name: "BLE1", argCount: 1, table: 0, index: 56, offset: 0xde]
| +- [NamePath, table: 0, index: 57, offset: 0xe0] -> [namepath: "BLE1"]
| +- [BytePrefix, table: 0, index: 58, offset: 0xe4] -> [num value; dec: 9, hex: 0x9]
| +- [ScopeBlock, table: 0, index: 59, offset: 0xe5]
| +- [Return, table: 0, index: 60, offset: 0xe5]
| +- [Add, table: 0, index: 61, offset: 0xe6]
| +- [Arg0, table: 0, index: 62, offset: 0xe7]
| +- [BytePrefix, table: 0, index: 63, offset: 0xe8] -> [num value; dec: 1, hex: 0x1]
| +- [Zero, table: 0, index: 64, offset: 0xea]
+- [Name, name: "BUFZ", table: 0, index: 65, offset: 0xeb]
| +- [NamePath, table: 0, index: 66, offset: 0xec] -> [namepath: "BUFZ"]
| +- [Buffer, table: 0, index: 67, offset: 0xf0]
| +- [MethodCall, table: 0, index: 317, offset: 0xf2] -> [call to "BLEN", argCount: 2, table: 0, index: 68, offset: 0x101]
| | +- [MethodCall, table: 0, index: 307, offset: 0xf6] -> [call to "BLE1", argCount: 1, table: 0, index: 56, offset: 0xde]
| | | +- [BytePrefix, table: 0, index: 309, offset: 0xfa] -> [num value; dec: 255, hex: 0xff]
| | +- [BytePrefix, table: 0, index: 308, offset: 0xfc] -> [num value; dec: 15, hex: 0xf]
| +- [ByteList, table: 0, index: 30, offset: 0x64] -> [bytelist value; len: 3; data: [0x48, 0x49, 0x21]]
+- [Method, name: "BLEN", argCount: 2, table: 0, index: 68, offset: 0x101]
| +- [NamePath, table: 0, index: 69, offset: 0x103] -> [namepath: "BLEN"]
| +- [BytePrefix, table: 0, index: 70, offset: 0x107] -> [num value; dec: 10, hex: 0xa]
| +- [ScopeBlock, table: 0, index: 71, offset: 0x108]
| +- [Return, table: 0, index: 72, offset: 0x108]
| +- [Add, table: 0, index: 73, offset: 0x109]
| +- [Add, table: 0, index: 74, offset: 0x10a]
| | +- [Arg0, table: 0, index: 75, offset: 0x10b]
| | +- [Arg1, table: 0, index: 76, offset: 0x10c]
| | +- [Zero, table: 0, index: 77, offset: 0x10d]
| +- [BytePrefix, table: 0, index: 78, offset: 0x10e] -> [num value; dec: 12, hex: 0xc]
| +- [Zero, table: 0, index: 79, offset: 0x110]
+- [Store, table: 0, index: 80, offset: 0x111]
| +- [BytePrefix, table: 0, index: 81, offset: 0x112] -> [num value; dec: 1, hex: 0x1]
| +- [ResolvedNamePath, table: 0, index: 82, offset: 0x114] -> [resolved to "FET0", table: 0, index: 332, offset: 0x2b9]
+- [Name, name: "BUFL", table: 0, index: 83, offset: 0x118]
| +- [NamePath, table: 0, index: 84, offset: 0x119] -> [namepath: "BUFL"]
| +- [One, table: 0, index: 85, offset: 0x11d]
+- [Name, name: "BUFF", table: 0, index: 86, offset: 0x11e]
| +- [NamePath, table: 0, index: 87, offset: 0x11f] -> [namepath: "BUFF"]
| +- [Buffer, table: 0, index: 88, offset: 0x123]
| +- [ResolvedNamePath, table: 0, index: 32, offset: 0x125] -> [resolved to "BUFL", table: 0, index: 83, offset: 0x118]
| +- [ByteList, table: 0, index: 31, offset: 0x67] -> [bytelist value; len: 0; data: []]
+- [Event, name: "HLO0", table: 0, index: 89, offset: 0x129]
| +- [NamePath, table: 0, index: 90, offset: 0x12b] -> [namepath: "HLO0"]
+- [Mutex, name: "MUT0", table: 0, index: 91, offset: 0x12f]
| +- [NamePath, table: 0, index: 92, offset: 0x131] -> [namepath: "MUT0"]
| +- [BytePrefix, table: 0, index: 93, offset: 0x135] -> [num value; dec: 1, hex: 0x1]
+- [Signal, table: 0, index: 94, offset: 0x136]
| +- [ResolvedNamePath, table: 0, index: 95, offset: 0x138] -> [resolved to "HLO0", table: 0, index: 89, offset: 0x129]
+- [Method, name: "EXE0", argCount: 1, table: 0, index: 96, offset: 0x13c]
| +- [NamePath, table: 0, index: 97, offset: 0x13f] -> [namepath: "EXE0"]
| +- [BytePrefix, table: 0, index: 98, offset: 0x143] -> [num value; dec: 9, hex: 0x9]
| +- [ScopeBlock, table: 0, index: 99, offset: 0x144]
| +- [Store, table: 0, index: 100, offset: 0x144]
| | +- [Revision, table: 0, index: 101, offset: 0x145]
| | +- [Local0, table: 0, index: 102, offset: 0x147]
| +- [Store, table: 0, index: 103, offset: 0x148]
| | +- [SizeOf, table: 0, index: 104, offset: 0x149]
| | | +- [NamePath, table: 0, index: 105, offset: 0x14a] -> [namepath: "GLB1"]
| | +- [Local1, table: 0, index: 106, offset: 0x14e]
| +- [Store, table: 0, index: 107, offset: 0x14f]
| | +- [StringPrefix, table: 0, index: 108, offset: 0x150] -> [string value: "my-handle"]
| | +- [Local0, table: 0, index: 109, offset: 0x15b]
| +- [Load, table: 0, index: 110, offset: 0x15c]
| | +- [NamePath, table: 0, index: 111, offset: 0x15e] -> [namepath: "DBG0"]
| | +- [Local0, table: 0, index: 112, offset: 0x162]
| +- [Unload, table: 0, index: 113, offset: 0x163]
| | +- [Local0, table: 0, index: 114, offset: 0x165]
| +- [CreateBitField, table: 0, index: 115, offset: 0x166]
| | +- [Arg0, table: 0, index: 116, offset: 0x167]
| | +- [BytePrefix, table: 0, index: 117, offset: 0x168] -> [num value; dec: 0, hex: 0x0]
| | +- [NamePath, table: 0, index: 118, offset: 0x16a] -> [namepath: "WFL0"]
| +- [If, table: 0, index: 119, offset: 0x16e]
| | +- [LEqual, table: 0, index: 120, offset: 0x170]
| | | +- [Arg0, table: 0, index: 121, offset: 0x171]
| | | +- [BytePrefix, table: 0, index: 122, offset: 0x172] -> [num value; dec: 0, hex: 0x0]
| | +- [Return, table: 0, index: 123, offset: 0x174]
| | +- [NamePath, table: 0, index: 124, offset: 0x175] -> [namepath: "WFL0"]
| +- [CreateByteField, table: 0, index: 125, offset: 0x179]
| | +- [Arg0, table: 0, index: 126, offset: 0x17a]
| | +- [BytePrefix, table: 0, index: 127, offset: 0x17b] -> [num value; dec: 0, hex: 0x0]
| | +- [NamePath, table: 0, index: 128, offset: 0x17d] -> [namepath: "WFL1"]
| +- [If, table: 0, index: 129, offset: 0x181]
| | +- [LEqual, table: 0, index: 130, offset: 0x183]
| | | +- [Arg0, table: 0, index: 131, offset: 0x184]
| | | +- [BytePrefix, table: 0, index: 132, offset: 0x185] -> [num value; dec: 1, hex: 0x1]
| | +- [Return, table: 0, index: 133, offset: 0x187]
| | +- [NamePath, table: 0, index: 134, offset: 0x188] -> [namepath: "WFL1"]
| +- [CreateWordField, table: 0, index: 135, offset: 0x18c]
| | +- [Arg0, table: 0, index: 136, offset: 0x18d]
| | +- [BytePrefix, table: 0, index: 137, offset: 0x18e] -> [num value; dec: 0, hex: 0x0]
| | +- [NamePath, table: 0, index: 138, offset: 0x190] -> [namepath: "WFL2"]
| +- [If, table: 0, index: 139, offset: 0x194]
| | +- [LEqual, table: 0, index: 140, offset: 0x196]
| | | +- [Arg0, table: 0, index: 141, offset: 0x197]
| | | +- [BytePrefix, table: 0, index: 142, offset: 0x198] -> [num value; dec: 2, hex: 0x2]
| | +- [Return, table: 0, index: 143, offset: 0x19a]
| | +- [NamePath, table: 0, index: 144, offset: 0x19b] -> [namepath: "WFL2"]
| +- [CreateDWordField, table: 0, index: 145, offset: 0x19f]
| | +- [Arg0, table: 0, index: 146, offset: 0x1a0]
| | +- [BytePrefix, table: 0, index: 147, offset: 0x1a1] -> [num value; dec: 0, hex: 0x0]
| | +- [NamePath, table: 0, index: 148, offset: 0x1a3] -> [namepath: "WFL3"]
| +- [If, table: 0, index: 149, offset: 0x1a7]
| | +- [LEqual, table: 0, index: 150, offset: 0x1a9]
| | | +- [Arg0, table: 0, index: 151, offset: 0x1aa]
| | | +- [BytePrefix, table: 0, index: 152, offset: 0x1ab] -> [num value; dec: 3, hex: 0x3]
| | +- [Return, table: 0, index: 153, offset: 0x1ad]
| | +- [NamePath, table: 0, index: 154, offset: 0x1ae] -> [namepath: "WFL3"]
| +- [CreateQWordField, table: 0, index: 155, offset: 0x1b2]
| | +- [Arg0, table: 0, index: 156, offset: 0x1b3]
| | +- [BytePrefix, table: 0, index: 157, offset: 0x1b4] -> [num value; dec: 0, hex: 0x0]
| | +- [NamePath, table: 0, index: 158, offset: 0x1b6] -> [namepath: "WFL4"]
| +- [If, table: 0, index: 159, offset: 0x1ba]
| | +- [LEqual, table: 0, index: 160, offset: 0x1bc]
| | | +- [Arg0, table: 0, index: 161, offset: 0x1bd]
| | | +- [BytePrefix, table: 0, index: 162, offset: 0x1be] -> [num value; dec: 4, hex: 0x4]
| | +- [Return, table: 0, index: 163, offset: 0x1c0]
| | +- [NamePath, table: 0, index: 164, offset: 0x1c1] -> [namepath: "WFL4"]
| +- [CreateField, table: 0, index: 165, offset: 0x1c5]
| | +- [Arg0, table: 0, index: 166, offset: 0x1c7]
| | +- [BytePrefix, table: 0, index: 167, offset: 0x1c8] -> [num value; dec: 0, hex: 0x0]
| | +- [BytePrefix, table: 0, index: 168, offset: 0x1ca] -> [num value; dec: 13, hex: 0xd]
| | +- [NamePath, table: 0, index: 169, offset: 0x1cc] -> [namepath: "WFL5"]
| +- [If, table: 0, index: 170, offset: 0x1d0]
| | +- [LEqual, table: 0, index: 171, offset: 0x1d2]
| | | +- [Arg0, table: 0, index: 172, offset: 0x1d3]
| | | +- [BytePrefix, table: 0, index: 173, offset: 0x1d4] -> [num value; dec: 5, hex: 0x5]
| | +- [Return, table: 0, index: 174, offset: 0x1d6]
| | +- [NamePath, table: 0, index: 175, offset: 0x1d7] -> [namepath: "WFL5"]
| +- [Store, table: 0, index: 176, offset: 0x1db]
| | +- [LoadTable, table: 0, index: 177, offset: 0x1dc]
| | | +- [StringPrefix, table: 0, index: 178, offset: 0x1de] -> [string value: "OEM1"]
| | | +- [StringPrefix, table: 0, index: 179, offset: 0x1e4] -> [string value: "MYOEM"]
| | | +- [StringPrefix, table: 0, index: 180, offset: 0x1eb] -> [string value: "TABLE1"]
| | | +- [StringPrefix, table: 0, index: 181, offset: 0x1f3] -> [string value: "\_SB.PCI0"]
| | | +- [StringPrefix, table: 0, index: 182, offset: 0x1fe] -> [string value: "MYD"]
| | | +- [Package, table: 0, index: 183, offset: 0x203]
| | | | +- [BytePrefix, table: 0, index: 184, offset: 0x205] -> [num value; dec: 2, hex: 0x2]
| | | | +- [ScopeBlock, table: 0, index: 185, offset: 0x206]
| | | | +- [BytePrefix, table: 0, index: 186, offset: 0x206] -> [num value; dec: 0, hex: 0x0]
| | | | +- [StringPrefix, table: 0, index: 187, offset: 0x208] -> [string value: "\_SB.PCI0"]
| | | +- [Local0, table: 0, index: 188, offset: 0x213]
| | +- [Store, table: 0, index: 189, offset: 0x214]
| | +- [BytePrefix, table: 0, index: 190, offset: 0x215] -> [num value; dec: 255, hex: 0xff]
| | +- [Local0, table: 0, index: 191, offset: 0x217]
| +- [Store, table: 0, index: 192, offset: 0x218]
| | +- [WordPrefix, table: 0, index: 193, offset: 0x219] -> [num value; dec: 65535, hex: 0xffff]
| | +- [Local0, table: 0, index: 194, offset: 0x21c]
| +- [Store, table: 0, index: 195, offset: 0x21d]
| | +- [DwordPrefix, table: 0, index: 196, offset: 0x21e] -> [num value; dec: 4294967295, hex: 0xffffffff]
| | +- [Local0, table: 0, index: 197, offset: 0x223]
| +- [Store, table: 0, index: 198, offset: 0x224]
| | +- [QwordPrefix, table: 0, index: 199, offset: 0x225] -> [num value; dec: 18446744073709551615, hex: 0xffffffffffffffff]
| | +- [Local0, table: 0, index: 200, offset: 0x22e]
| +- [Store, table: 0, index: 201, offset: 0x22f]
| | +- [Zero, table: 0, index: 202, offset: 0x230]
| | +- [Local0, table: 0, index: 203, offset: 0x231]
| +- [Store, table: 0, index: 204, offset: 0x232]
| | +- [One, table: 0, index: 205, offset: 0x233]
| | +- [Local0, table: 0, index: 206, offset: 0x234]
| +- [Store, table: 0, index: 207, offset: 0x235]
| | +- [Ones, table: 0, index: 208, offset: 0x236]
| | +- [Local0, table: 0, index: 209, offset: 0x237]
| +- [Store, table: 0, index: 210, offset: 0x238]
| | +- [StringPrefix, table: 0, index: 211, offset: 0x239] -> [string value: "FOO"]
| | +- [Local0, table: 0, index: 212, offset: 0x23e]
| +- [FromBCD, table: 0, index: 213, offset: 0x23f]
| | +- [BytePrefix, table: 0, index: 214, offset: 0x241] -> [num value; dec: 9, hex: 0x9]
| | +- [Arg0, table: 0, index: 215, offset: 0x243]
| +- [ToBCD, table: 0, index: 216, offset: 0x244]
| | +- [Arg0, table: 0, index: 217, offset: 0x246]
| | +- [Local1, table: 0, index: 218, offset: 0x247]
| +- [BreakPoint, table: 0, index: 219, offset: 0x248]
| +- [Store, table: 0, index: 220, offset: 0x249]
| | +- [StringPrefix, table: 0, index: 221, offset: 0x24a] -> [string value: "test"]
| | +- [Debug, table: 0, index: 222, offset: 0x250]
| +- [Fatal, table: 0, index: 223, offset: 0x252]
| | +- [BytePrefix, table: 0, index: 224, offset: 0x254] -> [num value; dec: 240, hex: 0xf0]
| | +- [DwordPrefix, table: 0, index: 225, offset: 0x255] -> [num value; dec: 3735929054, hex: 0xdeadc0de]
| | +- [BytePrefix, table: 0, index: 226, offset: 0x259] -> [num value; dec: 1, hex: 0x1]
| +- [Acquire, table: 0, index: 227, offset: 0x25b]
| | +- [NamePath, table: 0, index: 228, offset: 0x25d] -> [namepath: "MUT0"]
| | +- [WordPrefix, table: 0, index: 229, offset: 0x261] -> [num value; dec: 65535, hex: 0xffff]
| +- [Release, table: 0, index: 230, offset: 0x263]
| | +- [NamePath, table: 0, index: 231, offset: 0x265] -> [namepath: "MUT0"]
| +- [Reset, table: 0, index: 232, offset: 0x269]
| | +- [NamePath, table: 0, index: 233, offset: 0x26b] -> [namepath: "HLO0"]
| +- [Wait, table: 0, index: 234, offset: 0x26f]
| | +- [NamePath, table: 0, index: 235, offset: 0x271] -> [namepath: "HLO0"]
| | +- [WordPrefix, table: 0, index: 236, offset: 0x275] -> [num value; dec: 65535, hex: 0xffff]
| +- [Store, table: 0, index: 237, offset: 0x278]
| | +- [Timer, table: 0, index: 238, offset: 0x279]
| | +- [Local0, table: 0, index: 239, offset: 0x27b]
| +- [CopyObject, table: 0, index: 240, offset: 0x27c]
| | +- [Local0, table: 0, index: 241, offset: 0x27d]
| | +- [Local1, table: 0, index: 242, offset: 0x27e]
| +- [Return, table: 0, index: 243, offset: 0x27f]
| +- [ObjectType, table: 0, index: 244, offset: 0x280]
| +- [Local1, table: 0, index: 245, offset: 0x281]
+- [OpRegion, name: "GIO0", table: 0, index: 246, offset: 0x282]
| +- [NamePath, table: 0, index: 247, offset: 0x284] -> [namepath: "GIO0"]
| +- [BytePrefix, table: 0, index: 248, offset: 0x288] -> [num value; dec: 1, hex: 0x1]
| +- [WordPrefix, table: 0, index: 249, offset: 0x289] -> [num value; dec: 293, hex: 0x125]
| +- [WordPrefix, table: 0, index: 250, offset: 0x28c] -> [num value; dec: 256, hex: 0x100]
+- [Field, table: 0, index: 251, offset: 0x28f]
| +- [NamePath, table: 0, index: 252, offset: 0x292] -> [namepath: "GIO0"]
| +- [BytePrefix, table: 0, index: 253, offset: 0x296] -> [num value; dec: 1, hex: 0x1]
+- [NamedField, name: "GLB1", table: 0, index: 254, offset: 0x297] -> [field index: 251, offset(bytes): 0x0, width(bits): 0x1, accType: Byte, lockType: NoLock, updateType: Preserve, connection: -]
+- [NamedField, name: "GLB2", table: 0, index: 255, offset: 0x29c] -> [field index: 251, offset(bytes): 0x1, width(bits): 0x1, accType: Byte, lockType: NoLock, updateType: Preserve, connection: -]
+- [NamedField, name: "BNK1", table: 0, index: 256, offset: 0x2a3] -> [field index: 251, offset(bytes): 0x8, width(bits): 0x4, accType: Byte, lockType: NoLock, updateType: Preserve, connection: -]
+- [BankField, table: 0, index: 257, offset: 0x2a8]
| +- [NamePath, table: 0, index: 328, offset: 0x2ab] -> [namepath: "GIO0"]
| +- [NamePath, table: 0, index: 329, offset: 0x2af] -> [namepath: "BNK1"]
| +- [BytePrefix, table: 0, index: 330, offset: 0x2b3] -> [num value; dec: 0, hex: 0x0]
| +- [BytePrefix, table: 0, index: 331, offset: 0x2b5] -> [num value; dec: 49, hex: 0x31]
+- [NamedField, name: "FET0", table: 0, index: 332, offset: 0x2b9] -> [field index: 257, offset(bytes): 0x180, width(bits): 0x1, accType: Byte, lockType: Lock, updateType: WriteAsOnes, connection: -]
+- [NamedField, name: "FET1", table: 0, index: 333, offset: 0x2be] -> [field index: 257, offset(bytes): 0x181, width(bits): 0x1, accType: Byte, lockType: Lock, updateType: WriteAsOnes, connection: -]
+- [OpRegion, name: "SMBD", table: 0, index: 258, offset: 0x2c3]
| +- [NamePath, table: 0, index: 259, offset: 0x2c5] -> [namepath: "SMBD"]
| +- [BytePrefix, table: 0, index: 260, offset: 0x2c9] -> [num value; dec: 4, hex: 0x4]
| +- [WordPrefix, table: 0, index: 261, offset: 0x2ca] -> [num value; dec: 16896, hex: 0x4200]
| +- [WordPrefix, table: 0, index: 262, offset: 0x2cd] -> [num value; dec: 256, hex: 0x100]
+- [Field, table: 0, index: 263, offset: 0x2d0]
| +- [NamePath, table: 0, index: 264, offset: 0x2d4] -> [namepath: "SMBD"]
| +- [BytePrefix, table: 0, index: 265, offset: 0x2d8] -> [num value; dec: 69, hex: 0x45]
+- [NamedField, name: "SFL0", table: 0, index: 266, offset: 0x2dc] -> [field index: 263, offset(bytes): 0x0, width(bits): 0x8, accType: Buffer, accAttr: Byte, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL1", table: 0, index: 267, offset: 0x2e4] -> [field index: 263, offset(bytes): 0x8, width(bits): 0x8, accType: Buffer, accAttr: Word, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL2", table: 0, index: 268, offset: 0x2ec] -> [field index: 263, offset(bytes): 0x10, width(bits): 0x8, accType: Buffer, accAttr: Block, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL3", table: 0, index: 269, offset: 0x2f4] -> [field index: 263, offset(bytes): 0x18, width(bits): 0x8, accType: Buffer, accAttr: Quick, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL4", table: 0, index: 270, offset: 0x2fc] -> [field index: 263, offset(bytes): 0x20, width(bits): 0x8, accType: Buffer, accAttr: SendReceive, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL5", table: 0, index: 271, offset: 0x304] -> [field index: 263, offset(bytes): 0x28, width(bits): 0x8, accType: Buffer, accAttr: ProcessCall, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL6", table: 0, index: 272, offset: 0x30c] -> [field index: 263, offset(bytes): 0x30, width(bits): 0x8, accType: Buffer, accAttr: BlockProcessCall, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL7", table: 0, index: 273, offset: 0x315] -> [field index: 263, offset(bytes): 0x38, width(bits): 0x8, accType: Buffer, accAttr: Bytes(0x12), lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL8", table: 0, index: 274, offset: 0x31e] -> [field index: 263, offset(bytes): 0x40, width(bits): 0x8, accType: Buffer, accAttr: RawBytes(0x13), lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SFL9", table: 0, index: 275, offset: 0x327] -> [field index: 263, offset(bytes): 0x48, width(bits): 0x8, accType: Buffer, accAttr: RawProcessBytes(0x14), lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SF10", table: 0, index: 276, offset: 0x32f] -> [field index: 263, offset(bytes): 0x50, width(bits): 0x8, accType: Any, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SF11", table: 0, index: 277, offset: 0x337] -> [field index: 263, offset(bytes): 0x58, width(bits): 0x8, accType: Byte, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SF12", table: 0, index: 278, offset: 0x33f] -> [field index: 263, offset(bytes): 0x60, width(bits): 0x8, accType: Word, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SF13", table: 0, index: 279, offset: 0x347] -> [field index: 263, offset(bytes): 0x68, width(bits): 0x8, accType: Dword, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [NamedField, name: "SF14", table: 0, index: 280, offset: 0x34f] -> [field index: 263, offset(bytes): 0x70, width(bits): 0x8, accType: Qword, lockType: NoLock, updateType: WriteAsZeroes, connection: -]
+- [DataRegion, name: "REG0", table: 0, index: 281, offset: 0x354]
| +- [NamePath, table: 0, index: 282, offset: 0x356] -> [namepath: "REG0"]
| +- [StringPrefix, table: 0, index: 283, offset: 0x35a] -> [string value: "FOOF"]
| +- [StringPrefix, table: 0, index: 284, offset: 0x360] -> [string value: "BAR"]
| +- [StringPrefix, table: 0, index: 285, offset: 0x365] -> [string value: "BAZ"]
+- [Processor, name: "CPU0", table: 0, index: 286, offset: 0x36a]
| +- [NamePath, table: 0, index: 287, offset: 0x36d] -> [namepath: "CPU0"]
| +- [BytePrefix, table: 0, index: 288, offset: 0x371] -> [num value; dec: 1, hex: 0x1]
| +- [DwordPrefix, table: 0, index: 289, offset: 0x372] -> [num value; dec: 288, hex: 0x120]
| +- [BytePrefix, table: 0, index: 290, offset: 0x376] -> [num value; dec: 6, hex: 0x6]
| +- [ScopeBlock, table: 0, index: 291, offset: 0x377]
+- [PowerRes, name: "PWR0", table: 0, index: 292, offset: 0x377]
| +- [NamePath, table: 0, index: 293, offset: 0x37a] -> [namepath: "PWR0"]
| +- [BytePrefix, table: 0, index: 294, offset: 0x37e] -> [num value; dec: 0, hex: 0x0]
| +- [WordPrefix, table: 0, index: 295, offset: 0x37f] -> [num value; dec: 0, hex: 0x0]
| +- [ScopeBlock, table: 0, index: 296, offset: 0x381]
+- [ThermalZone, name: "TZ0_", table: 0, index: 297, offset: 0x381]
| +- [NamePath, table: 0, index: 298, offset: 0x384] -> [namepath: "TZ0_"]
| +- [ScopeBlock, table: 0, index: 299, offset: 0x388]
+- [Method, name: "FLOW", argCount: 2, table: 0, index: 300, offset: 0x388]
| +- [NamePath, table: 0, index: 301, offset: 0x38a] -> [namepath: "FLOW"]
| +- [BytePrefix, table: 0, index: 302, offset: 0x38e] -> [num value; dec: 2, hex: 0x2]
| +- [ScopeBlock, table: 0, index: 303, offset: 0x38f]
| +- [While, table: 0, index: 304, offset: 0x38f]
| | +- [LLess, table: 0, index: 334, offset: 0x391]
| | | +- [Arg0, table: 0, index: 335, offset: 0x392]
| | | +- [Arg1, table: 0, index: 336, offset: 0x393]
| | +- [ScopeBlock, table: 0, index: 337, offset: 0x394]
| | +- [Increment, table: 0, index: 338, offset: 0x394]
| | | +- [Arg0, table: 0, index: 339, offset: 0x395]
| | +- [If, table: 0, index: 340, offset: 0x396]
| | +- [LLess, table: 0, index: 341, offset: 0x398]
| | | +- [Arg0, table: 0, index: 342, offset: 0x399]
| | | +- [BytePrefix, table: 0, index: 343, offset: 0x39a] -> [num value; dec: 5, hex: 0x5]
| | +- [ScopeBlock, table: 0, index: 344, offset: 0x39c]
| | +- [Continue, table: 0, index: 345, offset: 0x39c]
| +- [Return, table: 0, index: 305, offset: 0x3ad]
| +- [Arg0, table: 0, index: 306, offset: 0x3ae]
+- [ThermalZone, name: "THRM", table: 0, index: 310, offset: 0x3b6]
+- [NamePath, table: 0, index: 311, offset: 0x3b9] -> [namepath: "THRM"]
+- [ScopeBlock, table: 0, index: 312, offset: 0x3be]
+- [Name, name: "DEF0", table: 0, index: 313, offset: 0x3be]
| +- [NamePath, table: 0, index: 314, offset: 0x3bf] -> [namepath: "DEF0"]
| +- [Ones, table: 0, index: 315, offset: 0x3c3]
+- [Method, name: "MTH0", argCount: 0, table: 0, index: 322, offset: 0x3d1]
| +- [NamePath, table: 0, index: 323, offset: 0x3d3] -> [namepath: "MTH0"]
| +- [BytePrefix, table: 0, index: 324, offset: 0x3dd] -> [num value; dec: 0, hex: 0x0]
| +- [ScopeBlock, table: 0, index: 325, offset: 0x3de]
| +- [Return, table: 0, index: 326, offset: 0x3de]
| +- [BytePrefix, table: 0, index: 327, offset: 0x3df] -> [num value; dec: 1, hex: 0x1]
+- [Name, name: "DEF1", table: 0, index: 319, offset: 0x3cb]
+- [NamePath, table: 0, index: 320, offset: 0x3cc] -> [namepath: "DEF1"]
+- [Zero, table: 0, index: 321, offset: 0x3d0]