Matter fix fabric provisioning from CASE session for iOS 16.5 (#18709)

This commit is contained in:
s-hadinger 2023-05-22 20:46:20 +02:00 committed by GitHub
parent 2c8f9f8631
commit c1ec35a086
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 3925 additions and 3625 deletions

View File

@ -23,6 +23,7 @@ All notable changes to this project will be documented in this file.
- AIThinker webcam issues (#18652)
- Berry `tasmota.wifi()` would wrongly report wifi as up
- Inverted shutter now reflect status also in WEBGUI and several minor fixes to make "inverted" consistant (#18701)
- Matter fix fabric provisioning from CASE session for iOS 16.5
### Removed

View File

@ -461,15 +461,15 @@ class Matter_Commisioning_Context
tasmota.log(string.format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 2)
tasmota.log("MTR: fabric="+matter.inspect(session._fabric), 4)
tasmota.log("MTR: no_private_key="+session._fabric.no_private_key.tohex(), 4)
tasmota.log("MTR: noc ="+session._fabric.noc.tohex(), 4)
if session._fabric.get_icac()
tasmota.log("MTR: icac ="+session._fabric.get_icac().tohex(), 4)
tasmota.log("MTR: no_private_key="+session.get_pk().tohex(), 4)
tasmota.log("MTR: noc ="+session.get_noc().tohex(), 4)
if fabric.get_icac()
tasmota.log("MTR: icac ="+fabric.get_icac().tohex(), 4)
end
tasmota.log("MTR: root_ca_cert ="+session._fabric.root_ca_certificate.tohex(), 4)
tasmota.log("MTR: root_ca_cert ="+fabric.get_ca().tohex(), 4)
# Compute Sigma2, p.162
session.resumption_id = crypto.random(16)
session.resumption_id = crypto.random(16) # generate a new resumption id
session.__responder_priv = crypto.random(32)
session.__responder_pub = crypto.EC_P256().public_key(session.__responder_priv)
tasmota.log("MTR: ResponderEph_priv ="+session.__responder_priv.tohex(), 4)
@ -477,53 +477,58 @@ class Matter_Commisioning_Context
var responderRandom = crypto.random(32)
session.shared_secret = crypto.EC_P256().shared_key(session.__responder_priv, sigma1.initiatorEphPubKey)
tasmota.log("MTR: * shared_secret = " + session.shared_secret.tohex(), 4)
var sigma2_tbsdata = matter.TLV.Matter_TLV_struct()
sigma2_tbsdata.add_TLV(1, matter.TLV.B2, session.get_noc())
sigma2_tbsdata.add_TLV(2, matter.TLV.B2, session.get_icac())
sigma2_tbsdata.add_TLV(1, matter.TLV.B2, fabric.get_noc())
sigma2_tbsdata.add_TLV(2, matter.TLV.B2, fabric.get_icac())
sigma2_tbsdata.add_TLV(3, matter.TLV.B2, session.__responder_pub)
sigma2_tbsdata.add_TLV(4, matter.TLV.B2, sigma1.initiatorEphPubKey)
var TBSData2Signature = crypto.EC_P256().ecdsa_sign_sha256(session.get_pk(), sigma2_tbsdata.tlv2raw())
var TBSData2Signature = crypto.EC_P256().ecdsa_sign_sha256(fabric.get_pk(), sigma2_tbsdata.tlv2raw())
tasmota.log("****************************************", 4)
tasmota.log("MTR: * fabric.get_pk = " + str(fabric.get_pk()), 4)
tasmota.log("MTR: * sigma2_tbsdata = " + str(sigma2_tbsdata), 4)
tasmota.log("MTR: * TBSData2Signature = " + TBSData2Signature.tohex(), 4)
var sigma2_tbedata = matter.TLV.Matter_TLV_struct()
sigma2_tbedata.add_TLV(1, matter.TLV.B2, session.get_noc())
sigma2_tbedata.add_TLV(2, matter.TLV.B2, session.get_icac())
sigma2_tbedata.add_TLV(1, matter.TLV.B2, fabric.get_noc())
sigma2_tbedata.add_TLV(2, matter.TLV.B2, fabric.get_icac())
sigma2_tbedata.add_TLV(3, matter.TLV.B2, TBSData2Signature)
sigma2_tbedata.add_TLV(4, matter.TLV.B2, session.resumption_id)
# compute TranscriptHash = Crypto_Hash(message = Msg1)
# tasmota.log("****************************************", 4)
tasmota.log("****************************************", 4)
session.__Msg1 = sigma1.Msg1
# tasmota.log("MTR: * resumptionid = " + session.resumption_id.tohex(), 4)
# tasmota.log("MTR: * MSG1 = " + session.__Msg1.tohex(), 4)
tasmota.log("MTR: * resumptionid = " + session.resumption_id.tohex(), 4)
tasmota.log("MTR: * MSG1 = " + session.__Msg1.tohex(), 4)
var TranscriptHash = crypto.SHA256().update(session.__Msg1).out()
# tasmota.log("MTR: TranscriptHash =" + TranscriptHash.tohex(), 4)
tasmota.log("MTR: TranscriptHash =" + TranscriptHash.tohex(), 4)
# Compute S2K, p.175
var s2k_info = bytes().fromstring(self.S2K_Info)
var s2k_salt = session.get_ipk_group_key() + responderRandom + session.__responder_pub + TranscriptHash
var s2k_salt = fabric.get_ipk_group_key() + responderRandom + session.__responder_pub + TranscriptHash
var s2k = crypto.HKDF_SHA256().derive(session.shared_secret, s2k_salt, s2k_info, 16)
# tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 4)
# tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 4)
# tasmota.log("MTR: * s2k = " + s2k.tohex(), 4)
tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 4)
tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 4)
tasmota.log("MTR: * s2k = " + s2k.tohex(), 4)
var sigma2_tbedata_raw = sigma2_tbedata.tlv2raw()
# tasmota.log("MTR: * TBEData2Raw = " + sigma2_tbedata_raw.tohex(), 4)
tasmota.log("MTR: * TBEData2Raw = " + sigma2_tbedata_raw.tohex(), 4)
# // `AES_CCM.init(secret_key:bytes(16 or 32), iv:bytes(7..13), aad:bytes(), data_len:int, tag_len:int) -> instance`
var aes = crypto.AES_CCM(s2k, bytes().fromstring(self.TBEData2_Nonce), bytes(), size(sigma2_tbedata_raw), 16)
var TBEData2Encrypted = aes.encrypt(sigma2_tbedata_raw) + aes.tag()
# tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 4)
# tasmota.log("****************************************", 4)
tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 4)
tasmota.log("****************************************", 4)
var sigma2 = matter.Sigma2()
sigma2.responderRandom = responderRandom
sigma2.responderSessionId = session.__future_local_session_id
sigma2.responderEphPubKey = session.__responder_pub
sigma2.encrypted2 = TBEData2Encrypted
# tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 4)
tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 4)
var sigma2_raw = sigma2.tlv2raw()
session.__Msg2 = sigma2_raw
# tasmota.log("MTR: sigma2_raw: " + sigma2_raw.tohex(), 4)

View File

@ -381,9 +381,9 @@ class Matter_Device
# Start Operational Discovery for this session
#
# Deferred until next tick.
def start_operational_discovery_deferred(session)
def start_operational_discovery_deferred(fabric)
# defer to next click
tasmota.set_timer(0, /-> self.start_operational_discovery(session))
tasmota.set_timer(0, /-> self.start_operational_discovery(fabric))
end
#############################################################
@ -400,7 +400,7 @@ class Matter_Device
#
# Stop Basic Commissioning and clean PASE specific values (to save memory).
# Announce fabric entry in mDNS.
def start_operational_discovery(session)
def start_operational_discovery(fabric)
import crypto
import mdns
import string
@ -411,10 +411,7 @@ class Matter_Device
# self.root_w1 = nil
self.root_L = nil
# we keep the PASE session for 1 minute
session.set_expire_in_seconds(60)
self.mdns_announce_op_discovery(session.get_fabric())
self.mdns_announce_op_discovery(fabric)
end
#############################################################

View File

@ -96,6 +96,54 @@ class Matter_Fabric : Matter_Expirable
def get_fabric_index() return self.fabric_index end
def set_fabric_index(v) self.fabric_index = v end
def set_ca(ca)
self.root_ca_certificate = ca
end
def set_noc_icac(noc, icac)
self.noc = noc
self.icac = icac
end
def set_ipk_epoch_key(ipk_epoch_key)
self.ipk_epoch_key = ipk_epoch_key
end
def set_admin_subject_vendor(admin_subject, admin_vendor)
self.admin_subject = admin_subject
self.admin_vendor = admin_vendor
end
def set_fabric_device(fabric_id, device_id, fc, fabric_parent)
self.fabric_id = fabric_id
self.device_id = device_id
self.fabric_compressed = fc
self.fabric_parent = (fabric_parent != nil) ? fabric_parent.get_fabric_index() : nil
end
#############################################################
# Generate a private key (or retrieve it)
#
# PK is generated by a commissioning session
def get_pk()
return self.no_private_key
end
def set_pk(pk)
self.no_private_key = pk
end
#############################################################
# Register the frabric as complete (end of commissioning)
def fabric_candidate()
self.set_expire_in_seconds(120) # expire in 2 minutes
self.assign_fabric_index()
self._store.add_fabric(self)
end
#############################################################
# Assign a new fabric index
def assign_fabric_index()
if (self.get_fabric_index() == nil)
self.set_fabric_index(self._store.next_fabric_idx())
end
end
#############################################################
# When hydrating from persistance, update counters
@ -109,6 +157,15 @@ class Matter_Fabric : Matter_Expirable
self.counter_group_ctrl_snd = self._counter_group_ctrl_snd_impl.val()
end
#############################################################
# Register the fabric as complete (end of commissioning)
def fabric_completed()
self.set_no_expiration()
self.set_persist(true)
self.assign_fabric_index()
self._store.add_fabric(self)
end
#############################################################
# Management of security counters
#############################################################

View File

@ -402,9 +402,10 @@ class Matter_IM
ctx.status = matter.UNSUPPORTED_COMMAND #default error if returned `nil`
var cmd_name = matter.get_command_name(ctx.cluster, ctx.command)
var ctx_str = str(ctx) # keep string before invoking, it is modified by response
var res = self.device.invoke_request(msg.session, q.command_fields, ctx)
var params_log = (ctx.log != nil) ? "(" + str(ctx.log) + ") " : ""
tasmota.log(string.format("MTR: >Command (%6i) %s %s %s", msg.session.local_session_id, str(ctx), cmd_name ? cmd_name : "", params_log), 2)
tasmota.log(string.format("MTR: >Command (%6i) %s %s %s", msg.session.local_session_id, ctx_str, cmd_name ? cmd_name : "", params_log), 2)
ctx.log = nil
var a1 = matter.InvokeResponseIB()
if res == true || ctx.status == matter.SUCCESS # special case, just respond ok

View File

@ -362,22 +362,26 @@ class Matter_Plugin_Root : Matter_Plugin
elif command == 0x0004 # ---------- CommissioningComplete p.636 ----------
# no data
session._breadcrumb = 0 # clear breadcrumb
session.fabric_completed() # fabric information is complete, persist
session.set_no_expiration()
session.save()
if session._fabric
session._breadcrumb = 0 # clear breadcrumb
session._fabric.fabric_completed() # fabric information is complete, persist
session.set_no_expiration()
session.save()
# create CommissioningCompleteResponse
# ID=1
# 0=ErrorCode (OK=0)
# 1=DebugText
var ccr = TLV.Matter_TLV_struct()
ccr.add_TLV(0, TLV.U1, 0) # ErrorCode = OK
ccr.add_TLV(1, TLV.UTF1, "") # DebugText = ""
ctx.command = 0x05 # CommissioningCompleteResponse
# create CommissioningCompleteResponse
# ID=1
# 0=ErrorCode (OK=0)
# 1=DebugText
var ccr = TLV.Matter_TLV_struct()
ccr.add_TLV(0, TLV.U1, 0) # ErrorCode = OK
ccr.add_TLV(1, TLV.UTF1, "") # DebugText = ""
ctx.command = 0x05 # CommissioningCompleteResponse
self.device.start_commissioning_complete_deferred(session)
return ccr
self.device.start_commissioning_complete_deferred(session)
return ccr
else
raise "context_error", "CommissioningComplete: no fabric attached"
end
end
elif cluster == 0x003E # ========== Node Operational Credentials Cluster 11.17 p.704 ==========
@ -427,6 +431,7 @@ class Matter_Plugin_Root : Matter_Plugin
var CSRNonce = val.findsubval(0) # octstr 32
if size(CSRNonce) != 32 return nil end # check size on nonce
var IsForUpdateNOC = val.findsubval(1, false) # bool
tasmota.log(string.format("MTR: CSRRequest CSRNonce=%s IsForUpdateNOC=%s", str(CSRNonce), str(IsForUpdateNOC)), 3)
var csr = session.gen_CSR()
@ -450,12 +455,14 @@ class Matter_Plugin_Root : Matter_Plugin
elif command == 0x000B # ---------- AddTrustedRootCertificate ----------
var RootCACertificate = val.findsubval(0) # octstr 400 max
session.set_ca(RootCACertificate)
# TODO - additional tests are expected according to 11.17.7.13. AddTrustedRootCertificate Command
session.set_temp_ca(RootCACertificate)
tasmota.log("MTR: received ca_root="+RootCACertificate.tohex(), 3)
ctx.status = matter.SUCCESS # OK
return nil # trigger a standalone ack
elif command == 0x0006 # ---------- AddNOC ----------
tasmota.log("MTR: AddNoc Args=" + str(val), 3)
var NOCValue = val.findsubval(0) # octstr max 400
var ICACValue = val.findsubval(1) # octstr max 400
# Apple sends an empty ICAC instead of a missing attribute, fix this
@ -463,21 +470,32 @@ class Matter_Plugin_Root : Matter_Plugin
var IpkValue = val.findsubval(2) # octstr max 16
var CaseAdminSubject = val.findsubval(3)
var AdminVendorId = val.findsubval(4)
# tasmota.log("MTR: AddNoc NOCValue=" + (NOCValue ? NOCValue.tohex() : ""), 3)
# tasmota.log("MTR: AddNoc ICACValue=" + (ICACValue ? ICACValue.tohex() : ""), 3)
# tasmota.log("MTR: AddNoc IpkValue=" + str(IpkValue), 3)
# tasmota.log("MTR: AddNoc CaseAdminSubject=" + str(CaseAdminSubject), 3)
# tasmota.log("MTR: AddNoc AdminVendorId=" + str(AdminVendorId), 3)
if session.get_ca() == nil
if session.get_temp_ca() == nil
tasmota.log("MTR: Error: AdNOC without CA", 2)
return nil
end
session.set_noc(NOCValue, ICACValue)
session.set_ipk_epoch_key(IpkValue)
session.set_admin_subject_vendor(CaseAdminSubject, AdminVendorId)
var new_fabric = self.device.sessions.create_fabric()
new_fabric.set_ca(session.get_temp_ca()) # copy temporary CA to fabric
new_fabric.set_noc_icac(NOCValue, ICACValue)
new_fabric.set_ipk_epoch_key(IpkValue)
new_fabric.set_admin_subject_vendor(CaseAdminSubject, AdminVendorId)
new_fabric.set_pk(session.get_pk()) # copy the temporary commissioning PK to the fabric
# extract important information from NOC
var noc_cert = matter.TLV.parse(NOCValue)
var dnlist = noc_cert.findsub(6)
var fabric_id = dnlist.findsubval(21)
var deviceid = dnlist.findsubval(17)
# tasmota.log("MTR: AddNoc noc_cert=" + str(noc_cert), 3)
# tasmota.log("MTR: AddNoc dnlist=" + str(dnlist), 3)
if !fabric_id || !deviceid
tasmota.log("MTR: Error: no fabricid nor deviceid in NOC certificate", 2)
return false
@ -486,25 +504,37 @@ class Matter_Plugin_Root : Matter_Plugin
if type(fabric_id) == 'int' fabric_id = int64.fromu32(fabric_id).tobytes() else fabric_id = fabric_id.tobytes() end
if type(deviceid) == 'int' deviceid = int64.fromu32(deviceid).tobytes() else deviceid = deviceid.tobytes() end
var root_ca = matter.TLV.parse(session.get_ca()).findsubval(9) # extract public key from ca
root_ca = root_ca[1..] # remove first byte as per Matter specification
# tasmota.log("MTR: AddNoc fabric_id=" + str(fabric_id), 3)
# tasmota.log("MTR: AddNoc deviceid=" + str(deviceid), 3)
var root_ca_pub = session.get_temp_ca_pub()
# tasmota.log("MTR: AddNoc root_ca_pub=" + str(root_ca_pub), 3)
# tasmota.log("MTR: AddNoc root_ca_pub=" + root_ca_pub.tohex(), 3)
root_ca_pub = root_ca_pub[1..] # remove first byte as per Matter specification
var info = bytes().fromstring("CompressedFabric") # as per spec, 4.3.2.2 p.99
var hk = crypto.HKDF_SHA256()
var fabric_rev = fabric_id.copy().reverse()
var k_fabric = hk.derive(root_ca, fabric_rev, info, 8)
session.set_fabric_device(fabric_id, deviceid, k_fabric, self.device.commissioning_admin_fabric)
var k_fabric = hk.derive(root_ca_pub, fabric_rev, info, 8)
var parent_fabric = session._fabric ? session._fabric : self.device.commissioning_admin_fabric # get parent fabric whether CASE or PASE
new_fabric.set_fabric_device(fabric_id, deviceid, k_fabric, parent_fabric)
# tasmota.log("MTR: AddNoc k_fabric=" + str(k_fabric), 3)
# We have a candidate fabric, add it as expirable for 2 minutes
session.persist_to_fabric() # fabric object is completed, persist it
session.fabric_candidate()
new_fabric.fabric_candidate()
# move to next step
self.device.start_operational_discovery_deferred(session)
# session.fabric_completed()
tasmota.log("MTR: ------------------------------------------", 3)
tasmota.log("MTR: fabric=" + matter.inspect(session._fabric), 3)
tasmota.log("MTR: ------------------------------------------", 3)
session._fabric.log_new_fabric() # log that we registered a new fabric
self.device.start_operational_discovery_deferred(new_fabric)
# we keep the PASE session for 1 minute
if session.is_PASE()
session.set_expire_in_seconds(60)
end
# tasmota.log("MTR: ------------------------------------------", 3)
# tasmota.log("MTR: session=" + matter.inspect(session), 3)
# tasmota.log("MTR: fabric=" + matter.inspect(session._fabric), 3)
# tasmota.log("MTR: ------------------------------------------", 3)
new_fabric.log_new_fabric() # log that we registered a new fabric
# create NOCResponse
# 0=StatusCode
# 1=FabricIndex (1-254) (opt)

View File

@ -48,6 +48,9 @@ class Matter_Session : Matter_Expirable
var created # timestamp (UTC) when the session was created
var last_used # timestamp (UTC) when the session was last used
var _source_node_id # source node if bytes(8) (opt, used only when session is not established)
# temporary data for ArmFailSafe provisioning - before it is stored in a fabric
var _temp_root_ca_certificate # temporary root_ca_certificate added by `AddTrustedRootCertificate` before `AddNoc`
var _temp_pk
# session_ids when the session will be active
var __future_initiator_session_id
var __future_local_session_id
@ -108,7 +111,7 @@ class Matter_Session : Matter_Expirable
self._breadcrumb = 0
self._exchange_id = crypto.random(2).get(0,2) # generate a random 16 bits number, then increment with rollover
self._fabric = fabric ? fabric : self._store.create_fabric()
self._fabric = fabric
self.update()
end
@ -172,31 +175,6 @@ class Matter_Session : Matter_Expirable
def set_mode_CASE() self.set_mode(self._CASE) end
def is_PASE() return self.mode == self._PASE end
def is_CASE() return self.mode == self._CASE end
#############################################################
# Assign a new fabric index
def assign_fabric_index()
if (self._fabric.get_fabric_index() == nil)
self._fabric.set_fabric_index(self._store.next_fabric_idx())
end
end
#############################################################
# Register the fabric as complete (end of commissioning)
def fabric_completed()
self._fabric.set_no_expiration()
self._fabric.set_persist(true)
self.assign_fabric_index()
self._store.add_fabric(self._fabric)
end
#############################################################
# Register the frabric as complete (end of commissioning)
def fabric_candidate()
self._fabric.set_expire_in_seconds(120) # expire in 2 minutes
self.assign_fabric_index()
self._store.add_fabric(self._fabric)
end
#############################################################
# Persist to fabric
@ -241,26 +219,16 @@ class Matter_Session : Matter_Expirable
self.attestation_challenge = ac
self.created = st
end
def set_ca(ca)
self._fabric.root_ca_certificate = ca
def set_temp_ca(ca)
self._temp_root_ca_certificate = ca
end
def set_noc(noc, icac)
self._fabric.noc = noc
self._fabric.icac = icac
end
def set_ipk_epoch_key(ipk_epoch_key)
self._fabric.ipk_epoch_key = ipk_epoch_key
end
def set_admin_subject_vendor(admin_subject, admin_vendor)
self._fabric.admin_subject = admin_subject
self._fabric.admin_vendor = admin_vendor
end
def set_fabric_device(fabric_id, device_id, fc, fabric_parent)
self._fabric.fabric_id = fabric_id
self._fabric.device_id = device_id
self._fabric.fabric_compressed = fc
self._fabric.fabric_parent = (fabric_parent != nil) ? fabric_parent.get_fabric_index() : nil
def get_temp_ca() return self._temp_root_ca_certificate end
def get_temp_ca_pub()
var ca = self._temp_root_ca_certificate
if ca
var m = matter.TLV.parse(ca)
return m.findsubval(9)
end
end
def set_fabric_label(s)
if type(s) == 'string'
@ -269,12 +237,8 @@ class Matter_Session : Matter_Expirable
end
#############################################################
def get_mode()
return self.mode
end
def get_i2r()
return self.i2rkey
end
def get_mode() return self.mode end
def get_i2r() return self.i2rkey end
def get_i2r_privacy() # get and cache privacy key
if self._i2r_privacy == nil
import crypto
@ -283,18 +247,11 @@ class Matter_Session : Matter_Expirable
end
return self._i2r_privacy
end
def get_r2i()
return self.r2ikey
end
def get_ac()
return self.attestation_challenge
end
def get_ca()
return self._fabric.root_ca_certificate
end
def get_ca_pub()
return self._fabric.get_ca_pub()
end
def get_r2i() return self.r2ikey end
def get_ac() return self.attestation_challenge end
def get_ca() return self._fabric.root_ca_certificate end
def get_ca_pub() return self._fabric.get_ca_pub() end
def get_fabric() return self._fabric end
def get_noc() return self._fabric.noc end
def get_icac() return self._fabric.icac end
@ -307,24 +264,27 @@ class Matter_Session : Matter_Expirable
def get_admin_vendor() return self._fabric.admin_vendor end
#############################################################
# Generate a private key (or retrieve it)
# Get operational key pair (private key)
#
# If there is a fabric, retrieve the PK from the fabric
# If there is no fabric, create a temporary PK in `_temp_pk`
# to be stored later in the fabric
def get_pk()
if !self._fabric.no_private_key
import crypto
self._fabric.no_private_key = crypto.random(32)
if self._fabric
return self._fabric.get_pk()
else
if !self._temp_pk
import crypto
self._temp_pk = crypto.random(32)
end
return self._temp_pk
end
return self._fabric.no_private_key
end
#############################################################
# Operational Group Key Derivation, 4.15.2, p.182
def get_ipk_group_key()
if self.get_ipk_epoch_key() == nil || self.get_fabric_compressed() == nil return nil end
import crypto
var hk = crypto.HKDF_SHA256()
var info = bytes().fromstring(self._GROUP_KEY)
var hash = hk.derive(self.get_ipk_epoch_key(), self.get_fabric_compressed(), info, 16)
return hash
return self._fabric.get_ipk_group_key()
end
#############################################################

View File

@ -1425,7 +1425,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[118]) { /* constants */
( &(const bvalue[130]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(string),
/* K2 */ be_nested_str_weak(session),
@ -1507,14 +1507,14 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
/* K78 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28GeneralCode_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20NO_SHARED_TRUST_ROOTS_X29),
/* K79 */ be_nested_str_weak(MTR_X3A_X20fabric_X3D),
/* K80 */ be_nested_str_weak(MTR_X3A_X20no_private_key_X3D),
/* K81 */ be_nested_str_weak(no_private_key),
/* K81 */ be_nested_str_weak(get_pk),
/* K82 */ be_nested_str_weak(tohex),
/* K83 */ be_nested_str_weak(MTR_X3A_X20noc_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K84 */ be_nested_str_weak(noc),
/* K84 */ be_nested_str_weak(get_noc),
/* K85 */ be_nested_str_weak(get_icac),
/* K86 */ be_nested_str_weak(MTR_X3A_X20icac_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
/* K87 */ be_nested_str_weak(MTR_X3A_X20root_ca_cert_X20_X20_X3D),
/* K88 */ be_nested_str_weak(root_ca_certificate),
/* K88 */ be_nested_str_weak(get_ca),
/* K89 */ be_nested_str_weak(__responder_priv),
/* K90 */ be_nested_str_weak(__responder_pub),
/* K91 */ be_nested_str_weak(EC_P256),
@ -1522,32 +1522,44 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
/* K93 */ be_nested_str_weak(MTR_X3A_X20ResponderEph_priv_X20_X20_X3D),
/* K94 */ be_nested_str_weak(MTR_X3A_X20ResponderEph_pub_X20_X20_X3D),
/* K95 */ be_nested_str_weak(shared_key),
/* K96 */ be_nested_str_weak(TLV),
/* K97 */ be_nested_str_weak(Matter_TLV_struct),
/* K98 */ be_nested_str_weak(add_TLV),
/* K99 */ be_nested_str_weak(B2),
/* K100 */ be_nested_str_weak(get_noc),
/* K96 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20shared_secret_X20_X20_X3D_X20),
/* K97 */ be_nested_str_weak(TLV),
/* K98 */ be_nested_str_weak(Matter_TLV_struct),
/* K99 */ be_nested_str_weak(add_TLV),
/* K100 */ be_nested_str_weak(B2),
/* K101 */ be_const_int(3),
/* K102 */ be_nested_str_weak(ecdsa_sign_sha256),
/* K103 */ be_nested_str_weak(get_pk),
/* K104 */ be_nested_str_weak(Msg1),
/* K105 */ be_nested_str_weak(SHA256),
/* K106 */ be_nested_str_weak(update),
/* K107 */ be_nested_str_weak(out),
/* K108 */ be_nested_str_weak(S2K_Info),
/* K109 */ be_nested_str_weak(get_ipk_group_key),
/* K110 */ be_nested_str_weak(TBEData2_Nonce),
/* K111 */ be_nested_str_weak(encrypt),
/* K112 */ be_nested_str_weak(Sigma2),
/* K113 */ be_nested_str_weak(responderRandom),
/* K114 */ be_nested_str_weak(responderSessionId),
/* K115 */ be_nested_str_weak(responderEphPubKey),
/* K116 */ be_nested_str_weak(encrypted2),
/* K117 */ be_nested_str_weak(__Msg2),
/* K103 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
/* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20fabric_X2Eget_pk_X20_X20_X3D_X20),
/* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma2_tbsdata_X20_X20_X3D_X20),
/* K106 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBSData2Signature_X20_X20_X3D_X20),
/* K107 */ be_nested_str_weak(Msg1),
/* K108 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20resumptionid_X20_X20_X3D_X20),
/* K109 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K110 */ be_nested_str_weak(SHA256),
/* K111 */ be_nested_str_weak(update),
/* K112 */ be_nested_str_weak(out),
/* K113 */ be_nested_str_weak(MTR_X3A_X20TranscriptHash_X20_X3D),
/* K114 */ be_nested_str_weak(S2K_Info),
/* K115 */ be_nested_str_weak(get_ipk_group_key),
/* K116 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
/* K117 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K118 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
/* K119 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Raw_X20_X20_X20_X3D_X20),
/* K120 */ be_nested_str_weak(TBEData2_Nonce),
/* K121 */ be_nested_str_weak(encrypt),
/* K122 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
/* K123 */ be_nested_str_weak(Sigma2),
/* K124 */ be_nested_str_weak(responderRandom),
/* K125 */ be_nested_str_weak(responderSessionId),
/* K126 */ be_nested_str_weak(responderEphPubKey),
/* K127 */ be_nested_str_weak(encrypted2),
/* K128 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
/* K129 */ be_nested_str_weak(__Msg2),
}),
be_str_weak(parse_Sigma1),
&be_const_str_solidified,
( &(const binstruction[576]) { /* code */
( &(const binstruction[689]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xA40E0200, // 0001 IMPORT R3 K1
0x88100302, // 0002 GETMBR R4 R1 K2
@ -1833,7 +1845,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x70020000, // 011A JMP #011C
0x50180000, // 011B LDBOOL R6 0 0
0x5C200C00, // 011C MOVE R8 R6
0x7422011F, // 011D JMPT R8 #023E
0x74220190, // 011D JMPT R8 #02AF
0x8C20014C, // 011E GETMET R8 R0 K76
0x88280B4D, // 011F GETMBR R10 R5 K77
0x882C0B1F, // 0120 GETMBR R11 R5 K31
@ -1892,8 +1904,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x7C240600, // 0155 CALL R9 3
0xB8260E00, // 0156 GETNGBL R9 K7
0x8C241308, // 0157 GETMET R9 R9 K8
0x882C091E, // 0158 GETMBR R11 R4 K30
0x882C1751, // 0159 GETMBR R11 R11 K81
0x8C2C0951, // 0158 GETMET R11 R4 K81
0x7C2C0200, // 0159 CALL R11 1
0x8C2C1752, // 015A GETMET R11 R11 K82
0x7C2C0200, // 015B CALL R11 1
0x002EA00B, // 015C ADD R11 K80 R11
@ -1901,229 +1913,342 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0x7C240600, // 015E CALL R9 3
0xB8260E00, // 015F GETNGBL R9 K7
0x8C241308, // 0160 GETMET R9 R9 K8
0x882C091E, // 0161 GETMBR R11 R4 K30
0x882C1754, // 0162 GETMBR R11 R11 K84
0x8C2C0954, // 0161 GETMET R11 R4 K84
0x7C2C0200, // 0162 CALL R11 1
0x8C2C1752, // 0163 GETMET R11 R11 K82
0x7C2C0200, // 0164 CALL R11 1
0x002EA60B, // 0165 ADD R11 K83 R11
0x54320003, // 0166 LDINT R12 4
0x7C240600, // 0167 CALL R9 3
0x8824091E, // 0168 GETMBR R9 R4 K30
0x8C241355, // 0169 GETMET R9 R9 K85
0x7C240200, // 016A CALL R9 1
0x78260009, // 016B JMPF R9 #0176
0xB8260E00, // 016C GETNGBL R9 K7
0x8C241308, // 016D GETMET R9 R9 K8
0x882C091E, // 016E GETMBR R11 R4 K30
0x8C2C1755, // 016F GETMET R11 R11 K85
0x8C241155, // 0168 GETMET R9 R8 K85
0x7C240200, // 0169 CALL R9 1
0x78260008, // 016A JMPF R9 #0174
0xB8260E00, // 016B GETNGBL R9 K7
0x8C241308, // 016C GETMET R9 R9 K8
0x8C2C1155, // 016D GETMET R11 R8 K85
0x7C2C0200, // 016E CALL R11 1
0x8C2C1752, // 016F GETMET R11 R11 K82
0x7C2C0200, // 0170 CALL R11 1
0x8C2C1752, // 0171 GETMET R11 R11 K82
0x7C2C0200, // 0172 CALL R11 1
0x002EAC0B, // 0173 ADD R11 K86 R11
0x54320003, // 0174 LDINT R12 4
0x7C240600, // 0175 CALL R9 3
0xB8260E00, // 0176 GETNGBL R9 K7
0x8C241308, // 0177 GETMET R9 R9 K8
0x882C091E, // 0178 GETMBR R11 R4 K30
0x882C1758, // 0179 GETMBR R11 R11 K88
0x8C2C1752, // 017A GETMET R11 R11 K82
0x7C2C0200, // 017B CALL R11 1
0x002EAE0B, // 017C ADD R11 K87 R11
0x54320003, // 017D LDINT R12 4
0x7C240600, // 017E CALL R9 3
0x8C240535, // 017F GETMET R9 R2 K53
0x542E000F, // 0180 LDINT R11 16
0x7C240400, // 0181 CALL R9 2
0x90126809, // 0182 SETMBR R4 K52 R9
0x8C240535, // 0183 GETMET R9 R2 K53
0x542E001F, // 0184 LDINT R11 32
0x7C240400, // 0185 CALL R9 2
0x9012B209, // 0186 SETMBR R4 K89 R9
0x8C24055B, // 0187 GETMET R9 R2 K91
0x7C240200, // 0188 CALL R9 1
0x8C24135C, // 0189 GETMET R9 R9 K92
0x882C0959, // 018A GETMBR R11 R4 K89
0x7C240400, // 018B CALL R9 2
0x9012B409, // 018C SETMBR R4 K90 R9
0xB8260E00, // 018D GETNGBL R9 K7
0x8C241308, // 018E GETMET R9 R9 K8
0x882C0959, // 018F GETMBR R11 R4 K89
0x8C2C1752, // 0190 GETMET R11 R11 K82
0x7C2C0200, // 0191 CALL R11 1
0x002EBA0B, // 0192 ADD R11 K93 R11
0x54320003, // 0193 LDINT R12 4
0x7C240600, // 0194 CALL R9 3
0xB8260E00, // 0195 GETNGBL R9 K7
0x8C241308, // 0196 GETMET R9 R9 K8
0x882C095A, // 0197 GETMBR R11 R4 K90
0x8C2C1752, // 0198 GETMET R11 R11 K82
0x7C2C0200, // 0199 CALL R11 1
0x002EBC0B, // 019A ADD R11 K94 R11
0x54320003, // 019B LDINT R12 4
0x7C240600, // 019C CALL R9 3
0x8C240535, // 019D GETMET R9 R2 K53
0x542E001F, // 019E LDINT R11 32
0x7C240400, // 019F CALL R9 2
0x8C28055B, // 01A0 GETMET R10 R2 K91
0x7C280200, // 01A1 CALL R10 1
0x8C28155F, // 01A2 GETMET R10 R10 K95
0x88300959, // 01A3 GETMBR R12 R4 K89
0x88340B16, // 01A4 GETMBR R13 R5 K22
0x7C280600, // 01A5 CALL R10 3
0x9012480A, // 01A6 SETMBR R4 K36 R10
0xB82A1A00, // 01A7 GETNGBL R10 K13
0x88281560, // 01A8 GETMBR R10 R10 K96
0x8C281561, // 01A9 GETMET R10 R10 K97
0x7C280200, // 01AA CALL R10 1
0x8C2C1562, // 01AB GETMET R11 R10 K98
0x5834000C, // 01AC LDCONST R13 K12
0xB83A1A00, // 01AD GETNGBL R14 K13
0x88381D60, // 01AE GETMBR R14 R14 K96
0x88381D63, // 01AF GETMBR R14 R14 K99
0x8C3C0964, // 01B0 GETMET R15 R4 K100
0x7C3C0200, // 01B1 CALL R15 1
0x7C2C0800, // 01B2 CALL R11 4
0x8C2C1562, // 01B3 GETMET R11 R10 K98
0x5834000A, // 01B4 LDCONST R13 K10
0xB83A1A00, // 01B5 GETNGBL R14 K13
0x88381D60, // 01B6 GETMBR R14 R14 K96
0x88381D63, // 01B7 GETMBR R14 R14 K99
0x8C3C0955, // 01B8 GETMET R15 R4 K85
0x7C3C0200, // 01B9 CALL R15 1
0x7C2C0800, // 01BA CALL R11 4
0x8C2C1562, // 01BB GETMET R11 R10 K98
0x58340065, // 01BC LDCONST R13 K101
0xB83A1A00, // 01BD GETNGBL R14 K13
0x88381D60, // 01BE GETMBR R14 R14 K96
0x88381D63, // 01BF GETMBR R14 R14 K99
0x883C095A, // 01C0 GETMBR R15 R4 K90
0x7C2C0800, // 01C1 CALL R11 4
0x8C2C1562, // 01C2 GETMET R11 R10 K98
0x54360003, // 01C3 LDINT R13 4
0xB83A1A00, // 01C4 GETNGBL R14 K13
0x88381D60, // 01C5 GETMBR R14 R14 K96
0x88381D63, // 01C6 GETMBR R14 R14 K99
0x883C0B16, // 01C7 GETMBR R15 R5 K22
0x7C2C0800, // 01C8 CALL R11 4
0x8C2C055B, // 01C9 GETMET R11 R2 K91
0x7C2C0200, // 01CA CALL R11 1
0x8C2C1766, // 01CB GETMET R11 R11 K102
0x8C340967, // 01CC GETMET R13 R4 K103
0x7C340200, // 01CD CALL R13 1
0x8C38153E, // 01CE GETMET R14 R10 K62
0x7C380200, // 01CF CALL R14 1
0x7C2C0600, // 01D0 CALL R11 3
0xB8321A00, // 01D1 GETNGBL R12 K13
0x88301960, // 01D2 GETMBR R12 R12 K96
0x8C301961, // 01D3 GETMET R12 R12 K97
0x7C300200, // 01D4 CALL R12 1
0x8C341962, // 01D5 GETMET R13 R12 K98
0x583C000C, // 01D6 LDCONST R15 K12
0xB8421A00, // 01D7 GETNGBL R16 K13
0x88402160, // 01D8 GETMBR R16 R16 K96
0x88402163, // 01D9 GETMBR R16 R16 K99
0x8C440964, // 01DA GETMET R17 R4 K100
0x7C440200, // 01DB CALL R17 1
0x7C340800, // 01DC CALL R13 4
0x8C341962, // 01DD GETMET R13 R12 K98
0x583C000A, // 01DE LDCONST R15 K10
0xB8421A00, // 01DF GETNGBL R16 K13
0x88402160, // 01E0 GETMBR R16 R16 K96
0x88402163, // 01E1 GETMBR R16 R16 K99
0x8C440955, // 01E2 GETMET R17 R4 K85
0x7C440200, // 01E3 CALL R17 1
0x7C340800, // 01E4 CALL R13 4
0x8C341962, // 01E5 GETMET R13 R12 K98
0x583C0065, // 01E6 LDCONST R15 K101
0xB8421A00, // 01E7 GETNGBL R16 K13
0x88402160, // 01E8 GETMBR R16 R16 K96
0x88402163, // 01E9 GETMBR R16 R16 K99
0x5C441600, // 01EA MOVE R17 R11
0x7C340800, // 01EB CALL R13 4
0x8C341962, // 01EC GETMET R13 R12 K98
0x543E0003, // 01ED LDINT R15 4
0xB8421A00, // 01EE GETNGBL R16 K13
0x88402160, // 01EF GETMBR R16 R16 K96
0x88402163, // 01F0 GETMBR R16 R16 K99
0x88440934, // 01F1 GETMBR R17 R4 K52
0x7C340800, // 01F2 CALL R13 4
0x88340B68, // 01F3 GETMBR R13 R5 K104
0x90127E0D, // 01F4 SETMBR R4 K63 R13
0x8C340569, // 01F5 GETMET R13 R2 K105
0x7C340200, // 01F6 CALL R13 1
0x8C341B6A, // 01F7 GETMET R13 R13 K106
0x883C093F, // 01F8 GETMBR R15 R4 K63
0x7C340400, // 01F9 CALL R13 2
0x8C341B6B, // 01FA GETMET R13 R13 K107
0x7C340200, // 01FB CALL R13 1
0x60380015, // 01FC GETGBL R14 G21
0x7C380000, // 01FD CALL R14 0
0x8C381D20, // 01FE GETMET R14 R14 K32
0x8840016C, // 01FF GETMBR R16 R0 K108
0x7C380400, // 0200 CALL R14 2
0x8C3C096D, // 0201 GETMET R15 R4 K109
0x7C3C0200, // 0202 CALL R15 1
0x003C1E09, // 0203 ADD R15 R15 R9
0x8840095A, // 0204 GETMBR R16 R4 K90
0x003C1E10, // 0205 ADD R15 R15 R16
0x003C1E0D, // 0206 ADD R15 R15 R13
0x8C400522, // 0207 GETMET R16 R2 K34
0x7C400200, // 0208 CALL R16 1
0x8C402123, // 0209 GETMET R16 R16 K35
0x88480924, // 020A GETMBR R18 R4 K36
0x5C4C1E00, // 020B MOVE R19 R15
0x5C501C00, // 020C MOVE R20 R14
0x5456000F, // 020D LDINT R21 16
0x7C400A00, // 020E CALL R16 5
0x8C44193E, // 020F GETMET R17 R12 K62
0x7C440200, // 0210 CALL R17 1
0x8C480527, // 0211 GETMET R18 R2 K39
0x5C502000, // 0212 MOVE R20 R16
0x60540015, // 0213 GETGBL R21 G21
0x7C540000, // 0214 CALL R21 0
0x8C542B20, // 0215 GETMET R21 R21 K32
0x885C016E, // 0216 GETMBR R23 R0 K110
0x7C540400, // 0217 CALL R21 2
0x60580015, // 0218 GETGBL R22 G21
0x7C580000, // 0219 CALL R22 0
0x605C000C, // 021A GETGBL R23 G12
0x5C602200, // 021B MOVE R24 R17
0x7C5C0200, // 021C CALL R23 1
0x5462000F, // 021D LDINT R24 16
0x7C480C00, // 021E CALL R18 6
0x8C4C256F, // 021F GETMET R19 R18 K111
0x5C542200, // 0220 MOVE R21 R17
0x7C4C0400, // 0221 CALL R19 2
0x8C502529, // 0222 GETMET R20 R18 K41
0x7C500200, // 0223 CALL R20 1
0x004C2614, // 0224 ADD R19 R19 R20
0xB8521A00, // 0225 GETNGBL R20 K13
0x8C502970, // 0226 GETMET R20 R20 K112
0x7C500200, // 0227 CALL R20 1
0x9052E209, // 0228 SETMBR R20 K113 R9
0x8854092F, // 0229 GETMBR R21 R4 K47
0x9052E415, // 022A SETMBR R20 K114 R21
0x8854095A, // 022B GETMBR R21 R4 K90
0x9052E615, // 022C SETMBR R20 K115 R21
0x9052E813, // 022D SETMBR R20 K116 R19
0x8C54293E, // 022E GETMET R21 R20 K62
0x7C540200, // 022F CALL R21 1
0x9012EA15, // 0230 SETMBR R4 K117 R21
0x8C580340, // 0231 GETMET R22 R1 K64
0x54620030, // 0232 LDINT R24 49
0x50640200, // 0233 LDBOOL R25 1 0
0x7C580600, // 0234 CALL R22 3
0x8C5C2D41, // 0235 GETMET R23 R22 K65
0x5C642A00, // 0236 MOVE R25 R21
0x7C5C0400, // 0237 CALL R23 2
0x88600142, // 0238 GETMBR R24 R0 K66
0x8C603143, // 0239 GETMET R24 R24 K67
0x5C682C00, // 023A MOVE R26 R22
0x7C600400, // 023B CALL R24 2
0x50600200, // 023C LDBOOL R24 1 0
0x80043000, // 023D RET 1 R24
0x50200200, // 023E LDBOOL R8 1 0
0x80041000, // 023F RET 1 R8
0x002EAC0B, // 0171 ADD R11 K86 R11
0x54320003, // 0172 LDINT R12 4
0x7C240600, // 0173 CALL R9 3
0xB8260E00, // 0174 GETNGBL R9 K7
0x8C241308, // 0175 GETMET R9 R9 K8
0x8C2C1158, // 0176 GETMET R11 R8 K88
0x7C2C0200, // 0177 CALL R11 1
0x8C2C1752, // 0178 GETMET R11 R11 K82
0x7C2C0200, // 0179 CALL R11 1
0x002EAE0B, // 017A ADD R11 K87 R11
0x54320003, // 017B LDINT R12 4
0x7C240600, // 017C CALL R9 3
0x8C240535, // 017D GETMET R9 R2 K53
0x542E000F, // 017E LDINT R11 16
0x7C240400, // 017F CALL R9 2
0x90126809, // 0180 SETMBR R4 K52 R9
0x8C240535, // 0181 GETMET R9 R2 K53
0x542E001F, // 0182 LDINT R11 32
0x7C240400, // 0183 CALL R9 2
0x9012B209, // 0184 SETMBR R4 K89 R9
0x8C24055B, // 0185 GETMET R9 R2 K91
0x7C240200, // 0186 CALL R9 1
0x8C24135C, // 0187 GETMET R9 R9 K92
0x882C0959, // 0188 GETMBR R11 R4 K89
0x7C240400, // 0189 CALL R9 2
0x9012B409, // 018A SETMBR R4 K90 R9
0xB8260E00, // 018B GETNGBL R9 K7
0x8C241308, // 018C GETMET R9 R9 K8
0x882C0959, // 018D GETMBR R11 R4 K89
0x8C2C1752, // 018E GETMET R11 R11 K82
0x7C2C0200, // 018F CALL R11 1
0x002EBA0B, // 0190 ADD R11 K93 R11
0x54320003, // 0191 LDINT R12 4
0x7C240600, // 0192 CALL R9 3
0xB8260E00, // 0193 GETNGBL R9 K7
0x8C241308, // 0194 GETMET R9 R9 K8
0x882C095A, // 0195 GETMBR R11 R4 K90
0x8C2C1752, // 0196 GETMET R11 R11 K82
0x7C2C0200, // 0197 CALL R11 1
0x002EBC0B, // 0198 ADD R11 K94 R11
0x54320003, // 0199 LDINT R12 4
0x7C240600, // 019A CALL R9 3
0x8C240535, // 019B GETMET R9 R2 K53
0x542E001F, // 019C LDINT R11 32
0x7C240400, // 019D CALL R9 2
0x8C28055B, // 019E GETMET R10 R2 K91
0x7C280200, // 019F CALL R10 1
0x8C28155F, // 01A0 GETMET R10 R10 K95
0x88300959, // 01A1 GETMBR R12 R4 K89
0x88340B16, // 01A2 GETMBR R13 R5 K22
0x7C280600, // 01A3 CALL R10 3
0x9012480A, // 01A4 SETMBR R4 K36 R10
0xB82A0E00, // 01A5 GETNGBL R10 K7
0x8C281508, // 01A6 GETMET R10 R10 K8
0x88300924, // 01A7 GETMBR R12 R4 K36
0x8C301952, // 01A8 GETMET R12 R12 K82
0x7C300200, // 01A9 CALL R12 1
0x0032C00C, // 01AA ADD R12 K96 R12
0x54360003, // 01AB LDINT R13 4
0x7C280600, // 01AC CALL R10 3
0xB82A1A00, // 01AD GETNGBL R10 K13
0x88281561, // 01AE GETMBR R10 R10 K97
0x8C281562, // 01AF GETMET R10 R10 K98
0x7C280200, // 01B0 CALL R10 1
0x8C2C1563, // 01B1 GETMET R11 R10 K99
0x5834000C, // 01B2 LDCONST R13 K12
0xB83A1A00, // 01B3 GETNGBL R14 K13
0x88381D61, // 01B4 GETMBR R14 R14 K97
0x88381D64, // 01B5 GETMBR R14 R14 K100
0x8C3C1154, // 01B6 GETMET R15 R8 K84
0x7C3C0200, // 01B7 CALL R15 1
0x7C2C0800, // 01B8 CALL R11 4
0x8C2C1563, // 01B9 GETMET R11 R10 K99
0x5834000A, // 01BA LDCONST R13 K10
0xB83A1A00, // 01BB GETNGBL R14 K13
0x88381D61, // 01BC GETMBR R14 R14 K97
0x88381D64, // 01BD GETMBR R14 R14 K100
0x8C3C1155, // 01BE GETMET R15 R8 K85
0x7C3C0200, // 01BF CALL R15 1
0x7C2C0800, // 01C0 CALL R11 4
0x8C2C1563, // 01C1 GETMET R11 R10 K99
0x58340065, // 01C2 LDCONST R13 K101
0xB83A1A00, // 01C3 GETNGBL R14 K13
0x88381D61, // 01C4 GETMBR R14 R14 K97
0x88381D64, // 01C5 GETMBR R14 R14 K100
0x883C095A, // 01C6 GETMBR R15 R4 K90
0x7C2C0800, // 01C7 CALL R11 4
0x8C2C1563, // 01C8 GETMET R11 R10 K99
0x54360003, // 01C9 LDINT R13 4
0xB83A1A00, // 01CA GETNGBL R14 K13
0x88381D61, // 01CB GETMBR R14 R14 K97
0x88381D64, // 01CC GETMBR R14 R14 K100
0x883C0B16, // 01CD GETMBR R15 R5 K22
0x7C2C0800, // 01CE CALL R11 4
0x8C2C055B, // 01CF GETMET R11 R2 K91
0x7C2C0200, // 01D0 CALL R11 1
0x8C2C1766, // 01D1 GETMET R11 R11 K102
0x8C341151, // 01D2 GETMET R13 R8 K81
0x7C340200, // 01D3 CALL R13 1
0x8C38153E, // 01D4 GETMET R14 R10 K62
0x7C380200, // 01D5 CALL R14 1
0x7C2C0600, // 01D6 CALL R11 3
0xB8320E00, // 01D7 GETNGBL R12 K7
0x8C301908, // 01D8 GETMET R12 R12 K8
0x58380067, // 01D9 LDCONST R14 K103
0x543E0003, // 01DA LDINT R15 4
0x7C300600, // 01DB CALL R12 3
0xB8320E00, // 01DC GETNGBL R12 K7
0x8C301908, // 01DD GETMET R12 R12 K8
0x60380008, // 01DE GETGBL R14 G8
0x8C3C1151, // 01DF GETMET R15 R8 K81
0x7C3C0200, // 01E0 CALL R15 1
0x7C380200, // 01E1 CALL R14 1
0x003AD00E, // 01E2 ADD R14 K104 R14
0x543E0003, // 01E3 LDINT R15 4
0x7C300600, // 01E4 CALL R12 3
0xB8320E00, // 01E5 GETNGBL R12 K7
0x8C301908, // 01E6 GETMET R12 R12 K8
0x60380008, // 01E7 GETGBL R14 G8
0x5C3C1400, // 01E8 MOVE R15 R10
0x7C380200, // 01E9 CALL R14 1
0x003AD20E, // 01EA ADD R14 K105 R14
0x543E0003, // 01EB LDINT R15 4
0x7C300600, // 01EC CALL R12 3
0xB8320E00, // 01ED GETNGBL R12 K7
0x8C301908, // 01EE GETMET R12 R12 K8
0x8C381752, // 01EF GETMET R14 R11 K82
0x7C380200, // 01F0 CALL R14 1
0x003AD40E, // 01F1 ADD R14 K106 R14
0x543E0003, // 01F2 LDINT R15 4
0x7C300600, // 01F3 CALL R12 3
0xB8321A00, // 01F4 GETNGBL R12 K13
0x88301961, // 01F5 GETMBR R12 R12 K97
0x8C301962, // 01F6 GETMET R12 R12 K98
0x7C300200, // 01F7 CALL R12 1
0x8C341963, // 01F8 GETMET R13 R12 K99
0x583C000C, // 01F9 LDCONST R15 K12
0xB8421A00, // 01FA GETNGBL R16 K13
0x88402161, // 01FB GETMBR R16 R16 K97
0x88402164, // 01FC GETMBR R16 R16 K100
0x8C441154, // 01FD GETMET R17 R8 K84
0x7C440200, // 01FE CALL R17 1
0x7C340800, // 01FF CALL R13 4
0x8C341963, // 0200 GETMET R13 R12 K99
0x583C000A, // 0201 LDCONST R15 K10
0xB8421A00, // 0202 GETNGBL R16 K13
0x88402161, // 0203 GETMBR R16 R16 K97
0x88402164, // 0204 GETMBR R16 R16 K100
0x8C441155, // 0205 GETMET R17 R8 K85
0x7C440200, // 0206 CALL R17 1
0x7C340800, // 0207 CALL R13 4
0x8C341963, // 0208 GETMET R13 R12 K99
0x583C0065, // 0209 LDCONST R15 K101
0xB8421A00, // 020A GETNGBL R16 K13
0x88402161, // 020B GETMBR R16 R16 K97
0x88402164, // 020C GETMBR R16 R16 K100
0x5C441600, // 020D MOVE R17 R11
0x7C340800, // 020E CALL R13 4
0x8C341963, // 020F GETMET R13 R12 K99
0x543E0003, // 0210 LDINT R15 4
0xB8421A00, // 0211 GETNGBL R16 K13
0x88402161, // 0212 GETMBR R16 R16 K97
0x88402164, // 0213 GETMBR R16 R16 K100
0x88440934, // 0214 GETMBR R17 R4 K52
0x7C340800, // 0215 CALL R13 4
0xB8360E00, // 0216 GETNGBL R13 K7
0x8C341B08, // 0217 GETMET R13 R13 K8
0x583C0067, // 0218 LDCONST R15 K103
0x54420003, // 0219 LDINT R16 4
0x7C340600, // 021A CALL R13 3
0x88340B6B, // 021B GETMBR R13 R5 K107
0x90127E0D, // 021C SETMBR R4 K63 R13
0xB8360E00, // 021D GETNGBL R13 K7
0x8C341B08, // 021E GETMET R13 R13 K8
0x883C0934, // 021F GETMBR R15 R4 K52
0x8C3C1F52, // 0220 GETMET R15 R15 K82
0x7C3C0200, // 0221 CALL R15 1
0x003ED80F, // 0222 ADD R15 K108 R15
0x54420003, // 0223 LDINT R16 4
0x7C340600, // 0224 CALL R13 3
0xB8360E00, // 0225 GETNGBL R13 K7
0x8C341B08, // 0226 GETMET R13 R13 K8
0x883C093F, // 0227 GETMBR R15 R4 K63
0x8C3C1F52, // 0228 GETMET R15 R15 K82
0x7C3C0200, // 0229 CALL R15 1
0x003EDA0F, // 022A ADD R15 K109 R15
0x54420003, // 022B LDINT R16 4
0x7C340600, // 022C CALL R13 3
0x8C34056E, // 022D GETMET R13 R2 K110
0x7C340200, // 022E CALL R13 1
0x8C341B6F, // 022F GETMET R13 R13 K111
0x883C093F, // 0230 GETMBR R15 R4 K63
0x7C340400, // 0231 CALL R13 2
0x8C341B70, // 0232 GETMET R13 R13 K112
0x7C340200, // 0233 CALL R13 1
0xB83A0E00, // 0234 GETNGBL R14 K7
0x8C381D08, // 0235 GETMET R14 R14 K8
0x8C401B52, // 0236 GETMET R16 R13 K82
0x7C400200, // 0237 CALL R16 1
0x0042E210, // 0238 ADD R16 K113 R16
0x54460003, // 0239 LDINT R17 4
0x7C380600, // 023A CALL R14 3
0x60380015, // 023B GETGBL R14 G21
0x7C380000, // 023C CALL R14 0
0x8C381D20, // 023D GETMET R14 R14 K32
0x88400172, // 023E GETMBR R16 R0 K114
0x7C380400, // 023F CALL R14 2
0x8C3C1173, // 0240 GETMET R15 R8 K115
0x7C3C0200, // 0241 CALL R15 1
0x003C1E09, // 0242 ADD R15 R15 R9
0x8840095A, // 0243 GETMBR R16 R4 K90
0x003C1E10, // 0244 ADD R15 R15 R16
0x003C1E0D, // 0245 ADD R15 R15 R13
0x8C400522, // 0246 GETMET R16 R2 K34
0x7C400200, // 0247 CALL R16 1
0x8C402123, // 0248 GETMET R16 R16 K35
0x88480924, // 0249 GETMBR R18 R4 K36
0x5C4C1E00, // 024A MOVE R19 R15
0x5C501C00, // 024B MOVE R20 R14
0x5456000F, // 024C LDINT R21 16
0x7C400A00, // 024D CALL R16 5
0xB8460E00, // 024E GETNGBL R17 K7
0x8C442308, // 024F GETMET R17 R17 K8
0x884C0924, // 0250 GETMBR R19 R4 K36
0x8C4C2752, // 0251 GETMET R19 R19 K82
0x7C4C0200, // 0252 CALL R19 1
0x004EE813, // 0253 ADD R19 K116 R19
0x54520003, // 0254 LDINT R20 4
0x7C440600, // 0255 CALL R17 3
0xB8460E00, // 0256 GETNGBL R17 K7
0x8C442308, // 0257 GETMET R17 R17 K8
0x8C4C1F52, // 0258 GETMET R19 R15 K82
0x7C4C0200, // 0259 CALL R19 1
0x004EEA13, // 025A ADD R19 K117 R19
0x54520003, // 025B LDINT R20 4
0x7C440600, // 025C CALL R17 3
0xB8460E00, // 025D GETNGBL R17 K7
0x8C442308, // 025E GETMET R17 R17 K8
0x8C4C2152, // 025F GETMET R19 R16 K82
0x7C4C0200, // 0260 CALL R19 1
0x004EEC13, // 0261 ADD R19 K118 R19
0x54520003, // 0262 LDINT R20 4
0x7C440600, // 0263 CALL R17 3
0x8C44193E, // 0264 GETMET R17 R12 K62
0x7C440200, // 0265 CALL R17 1
0xB84A0E00, // 0266 GETNGBL R18 K7
0x8C482508, // 0267 GETMET R18 R18 K8
0x8C502352, // 0268 GETMET R20 R17 K82
0x7C500200, // 0269 CALL R20 1
0x0052EE14, // 026A ADD R20 K119 R20
0x54560003, // 026B LDINT R21 4
0x7C480600, // 026C CALL R18 3
0x8C480527, // 026D GETMET R18 R2 K39
0x5C502000, // 026E MOVE R20 R16
0x60540015, // 026F GETGBL R21 G21
0x7C540000, // 0270 CALL R21 0
0x8C542B20, // 0271 GETMET R21 R21 K32
0x885C0178, // 0272 GETMBR R23 R0 K120
0x7C540400, // 0273 CALL R21 2
0x60580015, // 0274 GETGBL R22 G21
0x7C580000, // 0275 CALL R22 0
0x605C000C, // 0276 GETGBL R23 G12
0x5C602200, // 0277 MOVE R24 R17
0x7C5C0200, // 0278 CALL R23 1
0x5462000F, // 0279 LDINT R24 16
0x7C480C00, // 027A CALL R18 6
0x8C4C2579, // 027B GETMET R19 R18 K121
0x5C542200, // 027C MOVE R21 R17
0x7C4C0400, // 027D CALL R19 2
0x8C502529, // 027E GETMET R20 R18 K41
0x7C500200, // 027F CALL R20 1
0x004C2614, // 0280 ADD R19 R19 R20
0xB8520E00, // 0281 GETNGBL R20 K7
0x8C502908, // 0282 GETMET R20 R20 K8
0x8C582752, // 0283 GETMET R22 R19 K82
0x7C580200, // 0284 CALL R22 1
0x005AF416, // 0285 ADD R22 K122 R22
0x545E0003, // 0286 LDINT R23 4
0x7C500600, // 0287 CALL R20 3
0xB8520E00, // 0288 GETNGBL R20 K7
0x8C502908, // 0289 GETMET R20 R20 K8
0x58580067, // 028A LDCONST R22 K103
0x545E0003, // 028B LDINT R23 4
0x7C500600, // 028C CALL R20 3
0xB8521A00, // 028D GETNGBL R20 K13
0x8C50297B, // 028E GETMET R20 R20 K123
0x7C500200, // 028F CALL R20 1
0x9052F809, // 0290 SETMBR R20 K124 R9
0x8854092F, // 0291 GETMBR R21 R4 K47
0x9052FA15, // 0292 SETMBR R20 K125 R21
0x8854095A, // 0293 GETMBR R21 R4 K90
0x9052FC15, // 0294 SETMBR R20 K126 R21
0x9052FE13, // 0295 SETMBR R20 K127 R19
0xB8560E00, // 0296 GETNGBL R21 K7
0x8C542B08, // 0297 GETMET R21 R21 K8
0xB85E1A00, // 0298 GETNGBL R23 K13
0x8C5C2F14, // 0299 GETMET R23 R23 K20
0x5C642800, // 029A MOVE R25 R20
0x7C5C0400, // 029B CALL R23 2
0x005F0017, // 029C ADD R23 K128 R23
0x54620003, // 029D LDINT R24 4
0x7C540600, // 029E CALL R21 3
0x8C54293E, // 029F GETMET R21 R20 K62
0x7C540200, // 02A0 CALL R21 1
0x90130215, // 02A1 SETMBR R4 K129 R21
0x8C580340, // 02A2 GETMET R22 R1 K64
0x54620030, // 02A3 LDINT R24 49
0x50640200, // 02A4 LDBOOL R25 1 0
0x7C580600, // 02A5 CALL R22 3
0x8C5C2D41, // 02A6 GETMET R23 R22 K65
0x5C642A00, // 02A7 MOVE R25 R21
0x7C5C0400, // 02A8 CALL R23 2
0x88600142, // 02A9 GETMBR R24 R0 K66
0x8C603143, // 02AA GETMET R24 R24 K67
0x5C682C00, // 02AB MOVE R26 R22
0x7C600400, // 02AC CALL R24 2
0x50600200, // 02AD LDBOOL R24 1 0
0x80043000, // 02AE RET 1 R24
0x50200200, // 02AF LDBOOL R8 1 0
0x80041000, // 02B0 RET 1 R8
})
)
);

View File

@ -4652,7 +4652,7 @@ be_local_closure(Matter_Device_msg_received, /* name */
********************************************************************/
be_local_closure(Matter_Device_start_operational_discovery, /* name */
be_nested_proto(
9, /* nstack */
8, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@ -4660,20 +4660,18 @@ be_local_closure(Matter_Device_start_operational_discovery, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 9]) { /* constants */
( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(mdns),
/* K2 */ be_nested_str_weak(string),
/* K3 */ be_nested_str_weak(stop_basic_commissioning),
/* K4 */ be_nested_str_weak(root_w0),
/* K5 */ be_nested_str_weak(root_L),
/* K6 */ be_nested_str_weak(set_expire_in_seconds),
/* K7 */ be_nested_str_weak(mdns_announce_op_discovery),
/* K8 */ be_nested_str_weak(get_fabric),
/* K6 */ be_nested_str_weak(mdns_announce_op_discovery),
}),
be_str_weak(start_operational_discovery),
&be_const_str_solidified,
( &(const binstruction[17]) { /* code */
( &(const binstruction[13]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0xA40E0200, // 0001 IMPORT R3 K1
0xA4120400, // 0002 IMPORT R4 K2
@ -4683,14 +4681,10 @@ be_local_closure(Matter_Device_start_operational_discovery, /* name */
0x90020805, // 0006 SETMBR R0 K4 R5
0x4C140000, // 0007 LDNIL R5
0x90020A05, // 0008 SETMBR R0 K5 R5
0x8C140306, // 0009 GETMET R5 R1 K6
0x541E003B, // 000A LDINT R7 60
0x8C140106, // 0009 GETMET R5 R0 K6
0x5C1C0200, // 000A MOVE R7 R1
0x7C140400, // 000B CALL R5 2
0x8C140107, // 000C GETMET R5 R0 K7
0x8C1C0308, // 000D GETMET R7 R1 K8
0x7C1C0200, // 000E CALL R7 1
0x7C140400, // 000F CALL R5 2
0x80000000, // 0010 RET 0
0x80000000, // 000C RET 0
})
)
);

View File

@ -67,7 +67,7 @@ be_local_closure(Matter_IM_expire_sendqueue, /* name */
********************************************************************/
be_local_closure(Matter_IM_process_invoke_request, /* name */
be_nested_proto(
21, /* nstack */
22, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@ -123,7 +123,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
}),
be_str_weak(process_invoke_request),
&be_const_str_solidified,
( &(const binstruction[270]) { /* code */
( &(const binstruction[271]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x8C100902, // 0002 GETMET R4 R4 K2
@ -137,7 +137,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x88180B05, // 000A GETMBR R6 R5 K5
0x4C1C0000, // 000B LDNIL R7
0x20180C07, // 000C NE R6 R6 R7
0x781A00FE, // 000D JMPF R6 #010D
0x781A00FF, // 000D JMPF R6 #010E
0xB81A0200, // 000E GETNGBL R6 K1
0x8C180D06, // 000F GETMET R6 R6 K6
0x7C180200, // 0010 CALL R6 1
@ -149,7 +149,7 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x601C0010, // 0016 GETGBL R7 G16
0x88200B05, // 0017 GETMBR R8 R5 K5
0x7C1C0200, // 0018 CALL R7 1
0xA80200E1, // 0019 EXBLK 0 #00FC
0xA80200E2, // 0019 EXBLK 0 #00FD
0x5C200E00, // 001A MOVE R8 R7
0x7C200000, // 001B CALL R8 0
0x8824110A, // 001C GETMBR R9 R8 K10
@ -169,231 +169,232 @@ be_local_closure(Matter_IM_process_invoke_request, /* name */
0x882C090B, // 002A GETMBR R11 R4 K11
0x8830090C, // 002B GETMBR R12 R4 K12
0x7C240600, // 002C CALL R9 3
0x88280110, // 002D GETMBR R10 R0 K16
0x8C281511, // 002E GETMET R10 R10 K17
0x88300312, // 002F GETMBR R12 R1 K18
0x88341113, // 0030 GETMBR R13 R8 K19
0x5C380800, // 0031 MOVE R14 R4
0x7C280800, // 0032 CALL R10 4
0x882C0914, // 0033 GETMBR R11 R4 K20
0x4C300000, // 0034 LDNIL R12
0x202C160C, // 0035 NE R11 R11 R12
0x782E0005, // 0036 JMPF R11 #003D
0x602C0008, // 0037 GETGBL R11 G8
0x88300914, // 0038 GETMBR R12 R4 K20
0x7C2C0200, // 0039 CALL R11 1
0x002E2A0B, // 003A ADD R11 K21 R11
0x002C1716, // 003B ADD R11 R11 K22
0x70020000, // 003C JMP #003E
0x582C0017, // 003D LDCONST R11 K23
0xB8323000, // 003E GETNGBL R12 K24
0x8C301914, // 003F GETMET R12 R12 K20
0x8C380719, // 0040 GETMET R14 R3 K25
0x5840001A, // 0041 LDCONST R16 K26
0x88440312, // 0042 GETMBR R17 R1 K18
0x8844231B, // 0043 GETMBR R17 R17 K27
0x60480008, // 0044 GETGBL R18 G8
0x5C4C0800, // 0045 MOVE R19 R4
0x7C480200, // 0046 CALL R18 1
0x78260001, // 0047 JMPF R9 #004A
0x5C4C1200, // 0048 MOVE R19 R9
0x70020000, // 0049 JMP #004B
0x584C0017, // 004A LDCONST R19 K23
0x5C501600, // 004B MOVE R20 R11
0x7C380C00, // 004C CALL R14 6
0x583C001C, // 004D LDCONST R15 K28
0x7C300600, // 004E CALL R12 3
0x4C300000, // 004F LDNIL R12
0x9012280C, // 0050 SETMBR R4 K20 R12
0xB8320200, // 0051 GETNGBL R12 K1
0x8C30191D, // 0052 GETMET R12 R12 K29
0x7C300200, // 0053 CALL R12 1
0x50340200, // 0054 LDBOOL R13 1 0
0x1C34140D, // 0055 EQ R13 R10 R13
0x74360004, // 0056 JMPT R13 #005C
0x8834090D, // 0057 GETMBR R13 R4 K13
0xB83A0200, // 0058 GETNGBL R14 K1
0x88381D1E, // 0059 GETMBR R14 R14 K30
0x1C341A0E, // 005A EQ R13 R13 R14
0x7836002D, // 005B JMPF R13 #008A
0xB8360200, // 005C GETNGBL R13 K1
0x8C341B1F, // 005D GETMET R13 R13 K31
0x7C340200, // 005E CALL R13 1
0x90321A0D, // 005F SETMBR R12 K13 R13
0x8834190D, // 0060 GETMBR R13 R12 K13
0xB83A0200, // 0061 GETNGBL R14 K1
0x8C381D20, // 0062 GETMET R14 R14 K32
0x7C380200, // 0063 CALL R14 1
0x9036140E, // 0064 SETMBR R13 K10 R14
0x8834190D, // 0065 GETMBR R13 R12 K13
0x88341B0A, // 0066 GETMBR R13 R13 K10
0x88380909, // 0067 GETMBR R14 R4 K9
0x9036120E, // 0068 SETMBR R13 K9 R14
0x8834190D, // 0069 GETMBR R13 R12 K13
0x88341B0A, // 006A GETMBR R13 R13 K10
0x8838090B, // 006B GETMBR R14 R4 K11
0x9036160E, // 006C SETMBR R13 K11 R14
0x8834190D, // 006D GETMBR R13 R12 K13
0x88341B0A, // 006E GETMBR R13 R13 K10
0x8838090C, // 006F GETMBR R14 R4 K12
0x9036180E, // 0070 SETMBR R13 K12 R14
0x8834190D, // 0071 GETMBR R13 R12 K13
0xB83A0200, // 0072 GETNGBL R14 K1
0x8C381D21, // 0073 GETMET R14 R14 K33
0x7C380200, // 0074 CALL R14 1
0x90361A0E, // 0075 SETMBR R13 K13 R14
0x8834190D, // 0076 GETMBR R13 R12 K13
0x88341B0D, // 0077 GETMBR R13 R13 K13
0xB83A0200, // 0078 GETNGBL R14 K1
0x88381D1E, // 0079 GETMBR R14 R14 K30
0x90361A0E, // 007A SETMBR R13 K13 R14
0x88340D08, // 007B GETMBR R13 R6 K8
0x8C341B22, // 007C GETMET R13 R13 K34
0x5C3C1800, // 007D MOVE R15 R12
0x7C340400, // 007E CALL R13 2
0xB8363000, // 007F GETNGBL R13 K24
0x8C341B14, // 0080 GETMET R13 R13 K20
0x8C3C0719, // 0081 GETMET R15 R3 K25
0x58440023, // 0082 LDCONST R17 K35
0x88480312, // 0083 GETMBR R18 R1 K18
0x8848251B, // 0084 GETMBR R18 R18 K27
0x884C0324, // 0085 GETMBR R19 R1 K36
0x7C3C0800, // 0086 CALL R15 4
0x5840001C, // 0087 LDCONST R16 K28
0x7C340600, // 0088 CALL R13 3
0x70020070, // 0089 JMP #00FB
0x4C340000, // 008A LDNIL R13
0x2034140D, // 008B NE R13 R10 R13
0x78360031, // 008C JMPF R13 #00BF
0xB8360200, // 008D GETNGBL R13 K1
0x8C341B25, // 008E GETMET R13 R13 K37
0x7C340200, // 008F CALL R13 1
0x9032180D, // 0090 SETMBR R12 K12 R13
0x8834190C, // 0091 GETMBR R13 R12 K12
0xB83A0200, // 0092 GETNGBL R14 K1
0x8C381D20, // 0093 GETMET R14 R14 K32
0x7C380200, // 0094 CALL R14 1
0x9036140E, // 0095 SETMBR R13 K10 R14
0x8834190C, // 0096 GETMBR R13 R12 K12
0x88341B0A, // 0097 GETMBR R13 R13 K10
0x88380909, // 0098 GETMBR R14 R4 K9
0x9036120E, // 0099 SETMBR R13 K9 R14
0x8834190C, // 009A GETMBR R13 R12 K12
0x88341B0A, // 009B GETMBR R13 R13 K10
0x8838090B, // 009C GETMBR R14 R4 K11
0x9036160E, // 009D SETMBR R13 K11 R14
0x8834190C, // 009E GETMBR R13 R12 K12
0x88341B0A, // 009F GETMBR R13 R13 K10
0x8838090C, // 00A0 GETMBR R14 R4 K12
0x9036180E, // 00A1 SETMBR R13 K12 R14
0x8834190C, // 00A2 GETMBR R13 R12 K12
0x9036260A, // 00A3 SETMBR R13 K19 R10
0x88340D08, // 00A4 GETMBR R13 R6 K8
0x8C341B22, // 00A5 GETMET R13 R13 K34
0x5C3C1800, // 00A6 MOVE R15 R12
0x7C340400, // 00A7 CALL R13 2
0xB8360200, // 00A8 GETNGBL R13 K1
0x8C341B0F, // 00A9 GETMET R13 R13 K15
0x883C090B, // 00AA GETMBR R15 R4 K11
0x8840090C, // 00AB GETMBR R16 R4 K12
0x7C340600, // 00AC CALL R13 3
0x5C241A00, // 00AD MOVE R9 R13
0xB8363000, // 00AE GETNGBL R13 K24
0x8C341B14, // 00AF GETMET R13 R13 K20
0x8C3C0719, // 00B0 GETMET R15 R3 K25
0x58440026, // 00B1 LDCONST R17 K38
0x88480312, // 00B2 GETMBR R18 R1 K18
0x8848251B, // 00B3 GETMBR R18 R18 K27
0x604C0008, // 00B4 GETGBL R19 G8
0x5C500800, // 00B5 MOVE R20 R4
0x7C4C0200, // 00B6 CALL R19 1
0x78260001, // 00B7 JMPF R9 #00BA
0x5C501200, // 00B8 MOVE R20 R9
0x70020000, // 00B9 JMP #00BB
0x58500017, // 00BA LDCONST R20 K23
0x7C3C0A00, // 00BB CALL R15 5
0x5840001C, // 00BC LDCONST R16 K28
0x7C340600, // 00BD CALL R13 3
0x7002003B, // 00BE JMP #00FB
0x8834090D, // 00BF GETMBR R13 R4 K13
0x4C380000, // 00C0 LDNIL R14
0x20341A0E, // 00C1 NE R13 R13 R14
0x7836002D, // 00C2 JMPF R13 #00F1
0xB8360200, // 00C3 GETNGBL R13 K1
0x8C341B1F, // 00C4 GETMET R13 R13 K31
0x7C340200, // 00C5 CALL R13 1
0x90321A0D, // 00C6 SETMBR R12 K13 R13
0x8834190D, // 00C7 GETMBR R13 R12 K13
0xB83A0200, // 00C8 GETNGBL R14 K1
0x8C381D20, // 00C9 GETMET R14 R14 K32
0x7C380200, // 00CA CALL R14 1
0x9036140E, // 00CB SETMBR R13 K10 R14
0x8834190D, // 00CC GETMBR R13 R12 K13
0x88341B0A, // 00CD GETMBR R13 R13 K10
0x88380909, // 00CE GETMBR R14 R4 K9
0x9036120E, // 00CF SETMBR R13 K9 R14
0x8834190D, // 00D0 GETMBR R13 R12 K13
0x88341B0A, // 00D1 GETMBR R13 R13 K10
0x8838090B, // 00D2 GETMBR R14 R4 K11
0x9036160E, // 00D3 SETMBR R13 K11 R14
0x8834190D, // 00D4 GETMBR R13 R12 K13
0x88341B0A, // 00D5 GETMBR R13 R13 K10
0x8838090C, // 00D6 GETMBR R14 R4 K12
0x9036180E, // 00D7 SETMBR R13 K12 R14
0x8834190D, // 00D8 GETMBR R13 R12 K13
0xB83A0200, // 00D9 GETNGBL R14 K1
0x8C381D21, // 00DA GETMET R14 R14 K33
0x7C380200, // 00DB CALL R14 1
0x90361A0E, // 00DC SETMBR R13 K13 R14
0x8834190D, // 00DD GETMBR R13 R12 K13
0x88341B0D, // 00DE GETMBR R13 R13 K13
0x8838090D, // 00DF GETMBR R14 R4 K13
0x90361A0E, // 00E0 SETMBR R13 K13 R14
0x88340D08, // 00E1 GETMBR R13 R6 K8
0x8C341B22, // 00E2 GETMET R13 R13 K34
0x5C3C1800, // 00E3 MOVE R15 R12
0x7C340400, // 00E4 CALL R13 2
0xB8363000, // 00E5 GETNGBL R13 K24
0x8C341B14, // 00E6 GETMET R13 R13 K20
0x8C3C0719, // 00E7 GETMET R15 R3 K25
0x58440027, // 00E8 LDCONST R17 K39
0x88480312, // 00E9 GETMBR R18 R1 K18
0x8848251B, // 00EA GETMBR R18 R18 K27
0x884C090D, // 00EB GETMBR R19 R4 K13
0x88500324, // 00EC GETMBR R20 R1 K36
0x7C3C0A00, // 00ED CALL R15 5
0x5840001C, // 00EE LDCONST R16 K28
0x7C340600, // 00EF CALL R13 3
0x70020009, // 00F0 JMP #00FB
0xB8363000, // 00F1 GETNGBL R13 K24
0x8C341B14, // 00F2 GETMET R13 R13 K20
0x8C3C0719, // 00F3 GETMET R15 R3 K25
0x58440028, // 00F4 LDCONST R17 K40
0x88480312, // 00F5 GETMBR R18 R1 K18
0x8848251B, // 00F6 GETMBR R18 R18 K27
0x884C0324, // 00F7 GETMBR R19 R1 K36
0x7C3C0800, // 00F8 CALL R15 4
0x5840001C, // 00F9 LDCONST R16 K28
0x7C340600, // 00FA CALL R13 3
0x7001FF1D, // 00FB JMP #001A
0x581C0029, // 00FC LDCONST R7 K41
0xAC1C0200, // 00FD CATCH R7 1 0
0xB0080000, // 00FE RAISE 2 R0 R0
0x601C000C, // 00FF GETGBL R7 G12
0x88200D08, // 0100 GETMBR R8 R6 K8
0x7C1C0200, // 0101 CALL R7 1
0x241C0F2A, // 0102 GT R7 R7 K42
0x781E0004, // 0103 JMPF R7 #0109
0x8C1C012B, // 0104 GETMET R7 R0 K43
0x5C240200, // 0105 MOVE R9 R1
0x5C280C00, // 0106 MOVE R10 R6
0x7C1C0600, // 0107 CALL R7 3
0x70020001, // 0108 JMP #010B
0x501C0000, // 0109 LDBOOL R7 0 0
0x80040E00, // 010A RET 1 R7
0x501C0200, // 010B LDBOOL R7 1 0
0x80040E00, // 010C RET 1 R7
0x80000000, // 010D RET 0
0x60280008, // 002D GETGBL R10 G8
0x5C2C0800, // 002E MOVE R11 R4
0x7C280200, // 002F CALL R10 1
0x882C0110, // 0030 GETMBR R11 R0 K16
0x8C2C1711, // 0031 GETMET R11 R11 K17
0x88340312, // 0032 GETMBR R13 R1 K18
0x88381113, // 0033 GETMBR R14 R8 K19
0x5C3C0800, // 0034 MOVE R15 R4
0x7C2C0800, // 0035 CALL R11 4
0x88300914, // 0036 GETMBR R12 R4 K20
0x4C340000, // 0037 LDNIL R13
0x2030180D, // 0038 NE R12 R12 R13
0x78320005, // 0039 JMPF R12 #0040
0x60300008, // 003A GETGBL R12 G8
0x88340914, // 003B GETMBR R13 R4 K20
0x7C300200, // 003C CALL R12 1
0x00322A0C, // 003D ADD R12 K21 R12
0x00301916, // 003E ADD R12 R12 K22
0x70020000, // 003F JMP #0041
0x58300017, // 0040 LDCONST R12 K23
0xB8363000, // 0041 GETNGBL R13 K24
0x8C341B14, // 0042 GETMET R13 R13 K20
0x8C3C0719, // 0043 GETMET R15 R3 K25
0x5844001A, // 0044 LDCONST R17 K26
0x88480312, // 0045 GETMBR R18 R1 K18
0x8848251B, // 0046 GETMBR R18 R18 K27
0x5C4C1400, // 0047 MOVE R19 R10
0x78260001, // 0048 JMPF R9 #004B
0x5C501200, // 0049 MOVE R20 R9
0x70020000, // 004A JMP #004C
0x58500017, // 004B LDCONST R20 K23
0x5C541800, // 004C MOVE R21 R12
0x7C3C0C00, // 004D CALL R15 6
0x5840001C, // 004E LDCONST R16 K28
0x7C340600, // 004F CALL R13 3
0x4C340000, // 0050 LDNIL R13
0x9012280D, // 0051 SETMBR R4 K20 R13
0xB8360200, // 0052 GETNGBL R13 K1
0x8C341B1D, // 0053 GETMET R13 R13 K29
0x7C340200, // 0054 CALL R13 1
0x50380200, // 0055 LDBOOL R14 1 0
0x1C38160E, // 0056 EQ R14 R11 R14
0x743A0004, // 0057 JMPT R14 #005D
0x8838090D, // 0058 GETMBR R14 R4 K13
0xB83E0200, // 0059 GETNGBL R15 K1
0x883C1F1E, // 005A GETMBR R15 R15 K30
0x1C381C0F, // 005B EQ R14 R14 R15
0x783A002D, // 005C JMPF R14 #008B
0xB83A0200, // 005D GETNGBL R14 K1
0x8C381D1F, // 005E GETMET R14 R14 K31
0x7C380200, // 005F CALL R14 1
0x90361A0E, // 0060 SETMBR R13 K13 R14
0x88381B0D, // 0061 GETMBR R14 R13 K13
0xB83E0200, // 0062 GETNGBL R15 K1
0x8C3C1F20, // 0063 GETMET R15 R15 K32
0x7C3C0200, // 0064 CALL R15 1
0x903A140F, // 0065 SETMBR R14 K10 R15
0x88381B0D, // 0066 GETMBR R14 R13 K13
0x88381D0A, // 0067 GETMBR R14 R14 K10
0x883C0909, // 0068 GETMBR R15 R4 K9
0x903A120F, // 0069 SETMBR R14 K9 R15
0x88381B0D, // 006A GETMBR R14 R13 K13
0x88381D0A, // 006B GETMBR R14 R14 K10
0x883C090B, // 006C GETMBR R15 R4 K11
0x903A160F, // 006D SETMBR R14 K11 R15
0x88381B0D, // 006E GETMBR R14 R13 K13
0x88381D0A, // 006F GETMBR R14 R14 K10
0x883C090C, // 0070 GETMBR R15 R4 K12
0x903A180F, // 0071 SETMBR R14 K12 R15
0x88381B0D, // 0072 GETMBR R14 R13 K13
0xB83E0200, // 0073 GETNGBL R15 K1
0x8C3C1F21, // 0074 GETMET R15 R15 K33
0x7C3C0200, // 0075 CALL R15 1
0x903A1A0F, // 0076 SETMBR R14 K13 R15
0x88381B0D, // 0077 GETMBR R14 R13 K13
0x88381D0D, // 0078 GETMBR R14 R14 K13
0xB83E0200, // 0079 GETNGBL R15 K1
0x883C1F1E, // 007A GETMBR R15 R15 K30
0x903A1A0F, // 007B SETMBR R14 K13 R15
0x88380D08, // 007C GETMBR R14 R6 K8
0x8C381D22, // 007D GETMET R14 R14 K34
0x5C401A00, // 007E MOVE R16 R13
0x7C380400, // 007F CALL R14 2
0xB83A3000, // 0080 GETNGBL R14 K24
0x8C381D14, // 0081 GETMET R14 R14 K20
0x8C400719, // 0082 GETMET R16 R3 K25
0x58480023, // 0083 LDCONST R18 K35
0x884C0312, // 0084 GETMBR R19 R1 K18
0x884C271B, // 0085 GETMBR R19 R19 K27
0x88500324, // 0086 GETMBR R20 R1 K36
0x7C400800, // 0087 CALL R16 4
0x5844001C, // 0088 LDCONST R17 K28
0x7C380600, // 0089 CALL R14 3
0x70020070, // 008A JMP #00FC
0x4C380000, // 008B LDNIL R14
0x2038160E, // 008C NE R14 R11 R14
0x783A0031, // 008D JMPF R14 #00C0
0xB83A0200, // 008E GETNGBL R14 K1
0x8C381D25, // 008F GETMET R14 R14 K37
0x7C380200, // 0090 CALL R14 1
0x9036180E, // 0091 SETMBR R13 K12 R14
0x88381B0C, // 0092 GETMBR R14 R13 K12
0xB83E0200, // 0093 GETNGBL R15 K1
0x8C3C1F20, // 0094 GETMET R15 R15 K32
0x7C3C0200, // 0095 CALL R15 1
0x903A140F, // 0096 SETMBR R14 K10 R15
0x88381B0C, // 0097 GETMBR R14 R13 K12
0x88381D0A, // 0098 GETMBR R14 R14 K10
0x883C0909, // 0099 GETMBR R15 R4 K9
0x903A120F, // 009A SETMBR R14 K9 R15
0x88381B0C, // 009B GETMBR R14 R13 K12
0x88381D0A, // 009C GETMBR R14 R14 K10
0x883C090B, // 009D GETMBR R15 R4 K11
0x903A160F, // 009E SETMBR R14 K11 R15
0x88381B0C, // 009F GETMBR R14 R13 K12
0x88381D0A, // 00A0 GETMBR R14 R14 K10
0x883C090C, // 00A1 GETMBR R15 R4 K12
0x903A180F, // 00A2 SETMBR R14 K12 R15
0x88381B0C, // 00A3 GETMBR R14 R13 K12
0x903A260B, // 00A4 SETMBR R14 K19 R11
0x88380D08, // 00A5 GETMBR R14 R6 K8
0x8C381D22, // 00A6 GETMET R14 R14 K34
0x5C401A00, // 00A7 MOVE R16 R13
0x7C380400, // 00A8 CALL R14 2
0xB83A0200, // 00A9 GETNGBL R14 K1
0x8C381D0F, // 00AA GETMET R14 R14 K15
0x8840090B, // 00AB GETMBR R16 R4 K11
0x8844090C, // 00AC GETMBR R17 R4 K12
0x7C380600, // 00AD CALL R14 3
0x5C241C00, // 00AE MOVE R9 R14
0xB83A3000, // 00AF GETNGBL R14 K24
0x8C381D14, // 00B0 GETMET R14 R14 K20
0x8C400719, // 00B1 GETMET R16 R3 K25
0x58480026, // 00B2 LDCONST R18 K38
0x884C0312, // 00B3 GETMBR R19 R1 K18
0x884C271B, // 00B4 GETMBR R19 R19 K27
0x60500008, // 00B5 GETGBL R20 G8
0x5C540800, // 00B6 MOVE R21 R4
0x7C500200, // 00B7 CALL R20 1
0x78260001, // 00B8 JMPF R9 #00BB
0x5C541200, // 00B9 MOVE R21 R9
0x70020000, // 00BA JMP #00BC
0x58540017, // 00BB LDCONST R21 K23
0x7C400A00, // 00BC CALL R16 5
0x5844001C, // 00BD LDCONST R17 K28
0x7C380600, // 00BE CALL R14 3
0x7002003B, // 00BF JMP #00FC
0x8838090D, // 00C0 GETMBR R14 R4 K13
0x4C3C0000, // 00C1 LDNIL R15
0x20381C0F, // 00C2 NE R14 R14 R15
0x783A002D, // 00C3 JMPF R14 #00F2
0xB83A0200, // 00C4 GETNGBL R14 K1
0x8C381D1F, // 00C5 GETMET R14 R14 K31
0x7C380200, // 00C6 CALL R14 1
0x90361A0E, // 00C7 SETMBR R13 K13 R14
0x88381B0D, // 00C8 GETMBR R14 R13 K13
0xB83E0200, // 00C9 GETNGBL R15 K1
0x8C3C1F20, // 00CA GETMET R15 R15 K32
0x7C3C0200, // 00CB CALL R15 1
0x903A140F, // 00CC SETMBR R14 K10 R15
0x88381B0D, // 00CD GETMBR R14 R13 K13
0x88381D0A, // 00CE GETMBR R14 R14 K10
0x883C0909, // 00CF GETMBR R15 R4 K9
0x903A120F, // 00D0 SETMBR R14 K9 R15
0x88381B0D, // 00D1 GETMBR R14 R13 K13
0x88381D0A, // 00D2 GETMBR R14 R14 K10
0x883C090B, // 00D3 GETMBR R15 R4 K11
0x903A160F, // 00D4 SETMBR R14 K11 R15
0x88381B0D, // 00D5 GETMBR R14 R13 K13
0x88381D0A, // 00D6 GETMBR R14 R14 K10
0x883C090C, // 00D7 GETMBR R15 R4 K12
0x903A180F, // 00D8 SETMBR R14 K12 R15
0x88381B0D, // 00D9 GETMBR R14 R13 K13
0xB83E0200, // 00DA GETNGBL R15 K1
0x8C3C1F21, // 00DB GETMET R15 R15 K33
0x7C3C0200, // 00DC CALL R15 1
0x903A1A0F, // 00DD SETMBR R14 K13 R15
0x88381B0D, // 00DE GETMBR R14 R13 K13
0x88381D0D, // 00DF GETMBR R14 R14 K13
0x883C090D, // 00E0 GETMBR R15 R4 K13
0x903A1A0F, // 00E1 SETMBR R14 K13 R15
0x88380D08, // 00E2 GETMBR R14 R6 K8
0x8C381D22, // 00E3 GETMET R14 R14 K34
0x5C401A00, // 00E4 MOVE R16 R13
0x7C380400, // 00E5 CALL R14 2
0xB83A3000, // 00E6 GETNGBL R14 K24
0x8C381D14, // 00E7 GETMET R14 R14 K20
0x8C400719, // 00E8 GETMET R16 R3 K25
0x58480027, // 00E9 LDCONST R18 K39
0x884C0312, // 00EA GETMBR R19 R1 K18
0x884C271B, // 00EB GETMBR R19 R19 K27
0x8850090D, // 00EC GETMBR R20 R4 K13
0x88540324, // 00ED GETMBR R21 R1 K36
0x7C400A00, // 00EE CALL R16 5
0x5844001C, // 00EF LDCONST R17 K28
0x7C380600, // 00F0 CALL R14 3
0x70020009, // 00F1 JMP #00FC
0xB83A3000, // 00F2 GETNGBL R14 K24
0x8C381D14, // 00F3 GETMET R14 R14 K20
0x8C400719, // 00F4 GETMET R16 R3 K25
0x58480028, // 00F5 LDCONST R18 K40
0x884C0312, // 00F6 GETMBR R19 R1 K18
0x884C271B, // 00F7 GETMBR R19 R19 K27
0x88500324, // 00F8 GETMBR R20 R1 K36
0x7C400800, // 00F9 CALL R16 4
0x5844001C, // 00FA LDCONST R17 K28
0x7C380600, // 00FB CALL R14 3
0x7001FF1C, // 00FC JMP #001A
0x581C0029, // 00FD LDCONST R7 K41
0xAC1C0200, // 00FE CATCH R7 1 0
0xB0080000, // 00FF RAISE 2 R0 R0
0x601C000C, // 0100 GETGBL R7 G12
0x88200D08, // 0101 GETMBR R8 R6 K8
0x7C1C0200, // 0102 CALL R7 1
0x241C0F2A, // 0103 GT R7 R7 K42
0x781E0004, // 0104 JMPF R7 #010A
0x8C1C012B, // 0105 GETMET R7 R0 K43
0x5C240200, // 0106 MOVE R9 R1
0x5C280C00, // 0107 MOVE R10 R6
0x7C1C0600, // 0108 CALL R7 3
0x70020001, // 0109 JMP #010C
0x501C0000, // 010A LDBOOL R7 0 0
0x80040E00, // 010B RET 1 R7
0x501C0200, // 010C LDBOOL R7 1 0
0x80040E00, // 010D RET 1 R7
0x80000000, // 010E RET 0
})
)
);