From 604cb4f2eadcfc173595f8ae1de26905ae096a7d Mon Sep 17 00:00:00 2001 From: gerben-stavenga <54682677+gerben-stavenga@users.noreply.github.com> Date: Tue, 4 Jul 2023 12:00:16 -0700 Subject: [PATCH] add gas fee payer by adding a new payload type (#8904) * first update * Use RawTransactionWithData * fix all locations * introduce the gas fee authenticator * Push the gas fee payer transaction authenticator throughout the code * Start poking at the use of the bit to indicate gas fee payer * [fee-payer] plumb through the VM and framework * move tests pass * fix prover * fix order * regen * Add * restore sdk/src/types.rs * remove old comment --------- Co-authored-by: David Wolinsky --- api/doc/spec.json | 75 +- api/doc/spec.yaml | 46 + api/src/tests/transactions_test.rs | 67 + api/types/src/lib.rs | 16 +- api/types/src/transaction.rs | 102 + aptos-move/aptos-vm/src/aptos_vm.rs | 20 +- aptos-move/aptos-vm/src/aptos_vm_impl.rs | 61 +- .../aptos-vm/src/transaction_metadata.rs | 21 +- .../aptos-vm/src/transaction_validation.rs | 2 + .../e2e-move-tests/src/tests/fee_payer.rs | 321 +++ aptos-move/e2e-move-tests/src/tests/mod.rs | 1 + .../e2e-move-tests/src/tests/scripts.rs | 346 +-- aptos-move/e2e-tests/src/account.rs | 41 +- .../doc/transaction_validation.md | 214 +- .../sources/transaction_validation.move | 65 +- .../sources/transaction_validation.spec.move | 89 +- .../framework/move-stdlib/doc/features.md | 22 +- .../move-stdlib/sources/configs/features.move | 6 +- .../sources/configs/features.spec.move | 4 +- crates/aptos-protos/Cargo.lock | 2 +- .../aptos/transaction/v1/transaction.proto | 10 + .../aptos-protos/src/pb/aptos.indexer.v1.rs | 2 + .../src/pb/aptos.indexer.v1.tonic.rs | 4 +- .../src/pb/aptos.internal.fullnode.v1.rs | 16 +- .../pb/aptos.internal.fullnode.v1.tonic.rs | 4 +- .../src/pb/aptos.transaction.v1.rs | 2555 +++++++++-------- .../src/pb/aptos.transaction.v1.serde.rs | 180 ++ .../src/pb/aptos.util.timestamp.rs | 1 + crates/indexer/src/models/signatures.rs | 53 +- .../indexer-grpc-fullnode/src/convert.rs | 18 + .../src/models/default_models/signatures.rs | 53 +- .../typescript/sdk/src/generated/index.ts | 4 + .../src/generated/models/FeePayerSignature.ts | 26 + .../generated/models/TransactionSignature.ts | 3 +- .../TransactionSignature_FeePayerSignature.ts | 10 + .../generated/schemas/$FeePayerSignature.ts | 42 + .../schemas/$TransactionSignature.ts | 2 + ...$TransactionSignature_FeePayerSignature.ts | 16 + execution/executor/src/mock_vm/mod.rs | 1 - sdk/src/types.rs | 31 + .../generate-format/tests/staged/api.yaml | 15 + .../generate-format/tests/staged/aptos.yaml | 15 + .../tests/staged/consensus.yaml | 15 + types/src/transaction/authenticator.rs | 111 + types/src/transaction/mod.rs | 95 + 45 files changed, 3136 insertions(+), 1667 deletions(-) create mode 100644 aptos-move/e2e-move-tests/src/tests/fee_payer.rs create mode 100644 ecosystem/typescript/sdk/src/generated/models/FeePayerSignature.ts create mode 100644 ecosystem/typescript/sdk/src/generated/models/TransactionSignature_FeePayerSignature.ts create mode 100644 ecosystem/typescript/sdk/src/generated/schemas/$FeePayerSignature.ts create mode 100644 ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature_FeePayerSignature.ts diff --git a/api/doc/spec.json b/api/doc/spec.json index 427dc1e77a24f..fa1e1c99edecc 100644 --- a/api/doc/spec.json +++ b/api/doc/spec.json @@ -12420,6 +12420,56 @@ } } }, + "FeePayerSignature": { + "type": "object", + "description": "Fee payer signature for fee payer transactions\n\nThis allows you to have transactions across multiple accounts and with a fee payer", + "required": [ + "sender", + "secondary_signer_addresses", + "secondary_signers", + "fee_payer_address", + "fee_payer_signer" + ], + "properties": { + "sender": { + "$ref": "#/components/schemas/AccountSignature" + }, + "secondary_signer_addresses": { + "type": "array", + "description": "The other involved parties' addresses", + "items": { + "$ref": "#/components/schemas/Address" + } + }, + "secondary_signers": { + "type": "array", + "description": "The associated signatures, in the same order as the secondary addresses", + "items": { + "$ref": "#/components/schemas/AccountSignature" + } + }, + "fee_payer_address": { + "allOf": [ + { + "$ref": "#/components/schemas/Address" + }, + { + "description": "The address of the paying party" + } + ] + }, + "fee_payer_signer": { + "allOf": [ + { + "$ref": "#/components/schemas/AccountSignature" + }, + { + "description": "The signature of the fee payer" + } + ] + } + } + }, "GasEstimation": { "type": "object", "description": "Struct holding the outputs of the estimate gas API", @@ -13394,6 +13444,9 @@ }, { "$ref": "#/components/schemas/TransactionSignature_MultiAgentSignature" + }, + { + "$ref": "#/components/schemas/TransactionSignature_FeePayerSignature" } ], "discriminator": { @@ -13401,7 +13454,8 @@ "mapping": { "ed25519_signature": "#/components/schemas/TransactionSignature_Ed25519Signature", "multi_ed25519_signature": "#/components/schemas/TransactionSignature_MultiEd25519Signature", - "multi_agent_signature": "#/components/schemas/TransactionSignature_MultiAgentSignature" + "multi_agent_signature": "#/components/schemas/TransactionSignature_MultiAgentSignature", + "fee_payer_signature": "#/components/schemas/TransactionSignature_FeePayerSignature" } } }, @@ -13424,6 +13478,25 @@ } ] }, + "TransactionSignature_FeePayerSignature": { + "allOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "example": "fee_payer_signature" + } + } + }, + { + "$ref": "#/components/schemas/FeePayerSignature" + } + ] + }, "TransactionSignature_MultiAgentSignature": { "allOf": [ { diff --git a/api/doc/spec.yaml b/api/doc/spec.yaml index 9eb300eeeb45a..7857847406bd0 100644 --- a/api/doc/spec.yaml +++ b/api/doc/spec.yaml @@ -9316,6 +9316,40 @@ components: $ref: '#/components/schemas/U64' account_address: $ref: '#/components/schemas/Address' + FeePayerSignature: + type: object + description: |- + Fee payer signature for fee payer transactions + + This allows you to have transactions across multiple accounts and with a fee payer + required: + - sender + - secondary_signer_addresses + - secondary_signers + - fee_payer_address + - fee_payer_signer + properties: + sender: + $ref: '#/components/schemas/AccountSignature' + secondary_signer_addresses: + type: array + description: The other involved parties' addresses + items: + $ref: '#/components/schemas/Address' + secondary_signers: + type: array + description: The associated signatures, in the same order as the secondary + addresses + items: + $ref: '#/components/schemas/AccountSignature' + fee_payer_address: + allOf: + - $ref: '#/components/schemas/Address' + - description: The address of the paying party + fee_payer_signer: + allOf: + - $ref: '#/components/schemas/AccountSignature' + - description: The signature of the fee payer GasEstimation: type: object description: Struct holding the outputs of the estimate gas API @@ -10088,12 +10122,14 @@ components: - $ref: '#/components/schemas/TransactionSignature_Ed25519Signature' - $ref: '#/components/schemas/TransactionSignature_MultiEd25519Signature' - $ref: '#/components/schemas/TransactionSignature_MultiAgentSignature' + - $ref: '#/components/schemas/TransactionSignature_FeePayerSignature' discriminator: propertyName: type mapping: ed25519_signature: '#/components/schemas/TransactionSignature_Ed25519Signature' multi_ed25519_signature: '#/components/schemas/TransactionSignature_MultiEd25519Signature' multi_agent_signature: '#/components/schemas/TransactionSignature_MultiAgentSignature' + fee_payer_signature: '#/components/schemas/TransactionSignature_FeePayerSignature' TransactionSignature_Ed25519Signature: allOf: - type: object @@ -10104,6 +10140,16 @@ components: type: string example: ed25519_signature - $ref: '#/components/schemas/Ed25519Signature' + TransactionSignature_FeePayerSignature: + allOf: + - type: object + required: + - type + properties: + type: + type: string + example: fee_payer_signature + - $ref: '#/components/schemas/FeePayerSignature' TransactionSignature_MultiAgentSignature: allOf: - type: object diff --git a/api/src/tests/transactions_test.rs b/api/src/tests/transactions_test.rs index 02dd52eb8bfff..6df6f3ab3000c 100644 --- a/api/src/tests/transactions_test.rs +++ b/api/src/tests/transactions_test.rs @@ -250,7 +250,74 @@ async fn test_multi_agent_signed_transaction() { .post("/transactions", resp) .await; } +/* works when feature is enabled +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn test_fee_payer_signed_transaction() { + let mut context = new_test_context(current_function_name!()); + let account = context.gen_account(); + let secondary = context.gen_account(); + let factory = context.transaction_factory(); + let mut root_account = context.root_account().await; + + // Create secondary signer account + context + .commit_block(&[context.create_user_account_by(&mut root_account, &secondary)]) + .await; + + // Create a new account with a multi-agent signer + let txn = root_account.sign_fee_payer_with_transaction_builder( + vec![], &secondary, + factory.create_user_account(account.public_key()), + ); + let body = bcs::to_bytes(&txn).unwrap(); + let resp = context + .expect_status_code(202) + .post_bcs_txn("/transactions", body) + .await; + + let (sender, secondary_signers,fee_payer_signer) = match txn.authenticator() { + TransactionAuthenticator::FeePayer { + sender, + secondary_signer_addresses: _, + secondary_signers, + fee_payer_address: _, + fee_payer_signer + } => (sender, secondary_signers, fee_payer_signer), + _ => panic!( + "expecting TransactionAuthenticator::MultiAgent, but got: {:?}", + txn.authenticator() + ), + }; + assert_json( + resp["signature"].clone(), + json!({ + "type": "fee_payer_signature", + "sender": { + "type": "ed25519_signature", + "public_key": format!("0x{}", hex::encode(sender.public_key_bytes())), + "signature": format!("0x{}", hex::encode(sender.signature_bytes())), + }, + "secondary_signer_addresses": [ + ], + "secondary_signers": [ + ], + "fee_payer_address": secondary.address().to_hex_literal(), + "fee_payer_signer": { + "type": "ed25519_signature", + "public_key": format!("0x{}",hex::encode(fee_payer_signer.public_key_bytes())), + "signature": format!("0x{}", hex::encode(fee_payer_signer.signature_bytes())), + }, + }), + ); + + // ensure fee payer txns can be submitted into mempool by JSON format + context + .expect_status_code(202) + .post("/transactions", resp) + .await; +} +*/ #[ignore] #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_multi_ed25519_signed_transaction() { diff --git a/api/types/src/lib.rs b/api/types/src/lib.rs index b5785d92c7fb9..0ff0f7fb0f8bc 100644 --- a/api/types/src/lib.rs +++ b/api/types/src/lib.rs @@ -47,14 +47,14 @@ pub use table::{RawTableItemRequest, TableItemRequest}; pub use transaction::{ AccountSignature, BlockMetadataTransaction, DeleteModule, DeleteResource, DeleteTableItem, DirectWriteSet, Ed25519Signature, EncodeSubmissionRequest, EntryFunctionPayload, Event, - GasEstimation, GasEstimationBcs, GenesisPayload, GenesisTransaction, ModuleBundlePayload, - MultiAgentSignature, MultiEd25519Signature, MultisigPayload, MultisigTransactionPayload, - PendingTransaction, ScriptPayload, ScriptWriteSet, SubmitTransactionRequest, Transaction, - TransactionData, TransactionId, TransactionInfo, TransactionOnChainData, TransactionPayload, - TransactionSignature, TransactionSigningMessage, TransactionsBatchSingleSubmissionFailure, - TransactionsBatchSubmissionResult, UserCreateSigningMessageRequest, UserTransaction, - UserTransactionRequest, VersionedEvent, WriteModule, WriteResource, WriteSet, WriteSetChange, - WriteSetPayload, WriteTableItem, + FeePayerSignature, GasEstimation, GasEstimationBcs, GenesisPayload, GenesisTransaction, + ModuleBundlePayload, MultiAgentSignature, MultiEd25519Signature, MultisigPayload, + MultisigTransactionPayload, PendingTransaction, ScriptPayload, ScriptWriteSet, + SubmitTransactionRequest, Transaction, TransactionData, TransactionId, TransactionInfo, + TransactionOnChainData, TransactionPayload, TransactionSignature, TransactionSigningMessage, + TransactionsBatchSingleSubmissionFailure, TransactionsBatchSubmissionResult, + UserCreateSigningMessageRequest, UserTransaction, UserTransactionRequest, VersionedEvent, + WriteModule, WriteResource, WriteSet, WriteSetChange, WriteSetPayload, WriteTableItem, }; pub use view::ViewRequest; pub use wrappers::{EventGuid, IdentifierWrapper, StateKeyWrapper}; diff --git a/api/types/src/transaction.rs b/api/types/src/transaction.rs index 836cd218745bb..0fb461406e14b 100755 --- a/api/types/src/transaction.rs +++ b/api/types/src/transaction.rs @@ -848,6 +848,7 @@ pub enum TransactionSignature { Ed25519Signature(Ed25519Signature), MultiEd25519Signature(MultiEd25519Signature), MultiAgentSignature(MultiAgentSignature), + FeePayerSignature(FeePayerSignature), } impl VerifyInput for TransactionSignature { @@ -856,6 +857,7 @@ impl VerifyInput for TransactionSignature { TransactionSignature::Ed25519Signature(inner) => inner.verify(), TransactionSignature::MultiEd25519Signature(inner) => inner.verify(), TransactionSignature::MultiAgentSignature(inner) => inner.verify(), + TransactionSignature::FeePayerSignature(inner) => inner.verify(), } } } @@ -868,6 +870,7 @@ impl TryFrom for TransactionAuthenticator { TransactionSignature::Ed25519Signature(sig) => sig.try_into()?, TransactionSignature::MultiEd25519Signature(sig) => sig.try_into()?, TransactionSignature::MultiAgentSignature(sig) => sig.try_into()?, + TransactionSignature::FeePayerSignature(sig) => sig.try_into()?, }) } } @@ -1228,6 +1231,89 @@ impl } } +/// Fee payer signature for fee payer transactions +/// +/// This allows you to have transactions across multiple accounts and with a fee payer +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Object)] +pub struct FeePayerSignature { + pub sender: AccountSignature, + /// The other involved parties' addresses + pub secondary_signer_addresses: Vec
, + /// The associated signatures, in the same order as the secondary addresses + pub secondary_signers: Vec, + /// The address of the paying party + pub fee_payer_address: Address, + /// The signature of the fee payer + pub fee_payer_signer: AccountSignature, +} + +impl VerifyInput for FeePayerSignature { + fn verify(&self) -> anyhow::Result<()> { + self.sender.verify()?; + + for signer in self.secondary_signers.iter() { + signer.verify()?; + } + self.fee_payer_signer.verify()?; + Ok(()) + } +} + +impl TryFrom for TransactionAuthenticator { + type Error = anyhow::Error; + + fn try_from(value: FeePayerSignature) -> Result { + let FeePayerSignature { + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + } = value; + Ok(TransactionAuthenticator::fee_payer( + sender.try_into()?, + secondary_signer_addresses + .into_iter() + .map(|a| a.into()) + .collect(), + secondary_signers + .into_iter() + .map(|s| s.try_into()) + .collect::>()?, + fee_payer_address.into(), + fee_payer_signer.try_into()?, + )) + } +} + +impl + From<( + &AccountAuthenticator, + &Vec, + &Vec, + &AccountAddress, + &AccountAuthenticator, + )> for FeePayerSignature +{ + fn from( + (sender, addresses, signers, fee_payer_address, fee_payer_signer): ( + &AccountAuthenticator, + &Vec, + &Vec, + &AccountAddress, + &AccountAuthenticator, + ), + ) -> Self { + Self { + sender: sender.into(), + secondary_signer_addresses: addresses.iter().map(|address| (*address).into()).collect(), + secondary_signers: signers.iter().map(|s| s.into()).collect(), + fee_payer_address: (*fee_payer_address).into(), + fee_payer_signer: fee_payer_signer.into(), + } + } +} + impl From for TransactionSignature { fn from(auth: TransactionAuthenticator) -> Self { use TransactionAuthenticator::*; @@ -1247,6 +1333,22 @@ impl From for TransactionSignature { } => Self::MultiAgentSignature( (sender, secondary_signer_addresses, secondary_signers).into(), ), + FeePayer { + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + } => Self::FeePayerSignature( + ( + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + ) + .into(), + ), } } } diff --git a/aptos-move/aptos-vm/src/aptos_vm.rs b/aptos-move/aptos-vm/src/aptos_vm.rs index 2e59c9c376dda..b45c3e5708e4c 100644 --- a/aptos-move/aptos-vm/src/aptos_vm.rs +++ b/aptos-move/aptos-vm/src/aptos_vm.rs @@ -6,7 +6,7 @@ use crate::{ adapter_common::{ discard_error_output, discard_error_vm_status, PreprocessedTransaction, VMAdapter, }, - aptos_vm_impl::{get_transaction_output, AptosVMImpl, AptosVMInternals, GAS_PAYER_FLAG_BIT}, + aptos_vm_impl::{get_transaction_output, AptosVMImpl, AptosVMInternals}, block_executor::BlockAptosVM, counters::*, data_cache::StorageAdapter, @@ -394,18 +394,6 @@ impl AptosVM { )?) } - fn get_senders(txn_data: &TransactionMetadata) -> Vec { - let mut res = vec![txn_data.sender]; - res.extend(txn_data.secondary_signers()); - if txn_data.sequence_number & GAS_PAYER_FLAG_BIT != 0 { - // In a gas payer tx, the last multi-agent signer of the secondary signers is in - // fact the gas payer and not to be part of the tx parameters. So we remove the last - // signer. - res.pop(); - } - res - } - fn execute_script_or_entry_function( &self, resolver: &impl MoveResolverExt, @@ -431,13 +419,12 @@ impl AptosVM { match payload { TransactionPayload::Script(script) => { - let senders = Self::get_senders(txn_data); let loaded_func = session.load_script(script.code(), script.ty_args().to_vec())?; let args = verifier::transaction_arg_validation::validate_combine_signer_and_txn_args( &mut session, - senders, + txn_data.senders(), convert_txn_args(script.args()), &loaded_func, self.0 @@ -452,11 +439,10 @@ impl AptosVM { )?; }, TransactionPayload::EntryFunction(script_fn) => { - let senders = Self::get_senders(txn_data); self.validate_and_execute_entry_function( &mut session, gas_meter, - senders, + txn_data.senders(), script_fn, )?; }, diff --git a/aptos-move/aptos-vm/src/aptos_vm_impl.rs b/aptos-move/aptos-vm/src/aptos_vm_impl.rs index 30be30233544b..c701190a8ac3f 100644 --- a/aptos-move/aptos-vm/src/aptos_vm_impl.rs +++ b/aptos-move/aptos-vm/src/aptos_vm_impl.rs @@ -32,10 +32,7 @@ use aptos_types::{ use aptos_vm_logging::{log_schema::AdapterLogSchema, prelude::*}; use aptos_vm_types::output::VMOutput; use fail::fail_point; -use move_binary_format::{ - errors::{Location, PartialVMError, VMResult}, - CompiledModule, -}; +use move_binary_format::{errors::VMResult, CompiledModule}; use move_core_types::{ gas_algebra::NumArgs, language_storage::ModuleId, @@ -46,7 +43,6 @@ use move_vm_types::gas::UnmeteredGasMeter; use std::sync::Arc; pub const MAXIMUM_APPROVED_TRANSACTION_SIZE: u64 = 1024 * 1024; -pub const GAS_PAYER_FLAG_BIT: u64 = 1u64 << 63; // MSB of sequence number is used to flag a gas payer tx /// A wrapper to make VMRuntime standalone pub struct AptosVMImpl { @@ -359,20 +355,42 @@ impl AptosVMImpl { .iter() .map(|auth_key| MoveValue::vector_u8(auth_key.to_vec())) .collect(); - let args = if txn_data.is_multi_agent() { - vec![ + let (prologue_function_name, args) = if let (Some(fee_payer), Some(fee_payer_auth_key)) = ( + txn_data.fee_payer(), + txn_data.fee_payer_authentication_key.as_ref(), + ) { + let args = vec![ MoveValue::Signer(txn_data.sender), MoveValue::U64(txn_sequence_number), MoveValue::vector_u8(txn_authentication_key), MoveValue::vector_address(txn_data.secondary_signers()), MoveValue::Vector(secondary_auth_keys), + MoveValue::Address(fee_payer), + MoveValue::vector_u8(fee_payer_auth_key.to_vec()), MoveValue::U64(txn_gas_price.into()), MoveValue::U64(txn_max_gas_units.into()), MoveValue::U64(txn_expiration_timestamp_secs), MoveValue::U8(chain_id.id()), - ] + ]; + (&APTOS_TRANSACTION_VALIDATION.fee_payer_prologue_name, args) + } else if txn_data.is_multi_agent() { + let args = vec![ + MoveValue::Signer(txn_data.sender), + MoveValue::U64(txn_sequence_number), + MoveValue::vector_u8(txn_authentication_key), + MoveValue::vector_address(txn_data.secondary_signers()), + MoveValue::Vector(secondary_auth_keys), + MoveValue::U64(txn_gas_price.into()), + MoveValue::U64(txn_max_gas_units.into()), + MoveValue::U64(txn_expiration_timestamp_secs), + MoveValue::U8(chain_id.id()), + ]; + ( + &APTOS_TRANSACTION_VALIDATION.multi_agent_prologue_name, + args, + ) } else { - vec![ + let args = vec![ MoveValue::Signer(txn_data.sender), MoveValue::U64(txn_sequence_number), MoveValue::vector_u8(txn_authentication_key), @@ -381,12 +399,8 @@ impl AptosVMImpl { MoveValue::U64(txn_expiration_timestamp_secs), MoveValue::U8(chain_id.id()), MoveValue::vector_u8(txn_data.script_hash.clone()), - ] - }; - let prologue_function_name = if txn_data.is_multi_agent() { - &APTOS_TRANSACTION_VALIDATION.multi_agent_prologue_name - } else { - &APTOS_TRANSACTION_VALIDATION.script_prologue_name + ]; + (&APTOS_TRANSACTION_VALIDATION.script_prologue_name, args) }; session .execute_function_bypass_visibility( @@ -487,15 +501,14 @@ impl AptosVMImpl { let txn_max_gas_units = txn_data.max_gas_amount(); // We can unconditionally do this as this condition can only be true if the prologue // accepted it, in which case the gas payer feature is enabled. - if txn_sequence_number & GAS_PAYER_FLAG_BIT == 0 { - // Regular tx, run the normal epilogue + if let Some(fee_payer) = txn_data.fee_payer() { session.execute_function_bypass_visibility( &APTOS_TRANSACTION_VALIDATION.module_id(), - &APTOS_TRANSACTION_VALIDATION.user_epilogue_name, - // TODO: Deprecate this once we remove gas currency on the Move side. + &APTOS_TRANSACTION_VALIDATION.user_epilogue_gas_payer_name, vec![], serialize_values(&vec![ MoveValue::Signer(txn_data.sender), + MoveValue::Address(fee_payer), MoveValue::U64(txn_sequence_number), MoveValue::U64(txn_gas_price.into()), MoveValue::U64(txn_max_gas_units.into()), @@ -504,19 +517,13 @@ impl AptosVMImpl { &mut UnmeteredGasMeter, ) } else { - // Gas payer tx - let gas_payer = *txn_data.secondary_signers.last().ok_or_else(|| { - PartialVMError::new(StatusCode::UNKNOWN_INVARIANT_VIOLATION_ERROR) - .finish(Location::Undefined) - })?; + // Regular tx, run the normal epilogue session.execute_function_bypass_visibility( &APTOS_TRANSACTION_VALIDATION.module_id(), - &APTOS_TRANSACTION_VALIDATION.user_epilogue_gas_payer_name, - // TODO: Deprecate this once we remove gas currency on the Move side. + &APTOS_TRANSACTION_VALIDATION.user_epilogue_name, vec![], serialize_values(&vec![ MoveValue::Signer(txn_data.sender), - MoveValue::Address(gas_payer), MoveValue::U64(txn_sequence_number), MoveValue::U64(txn_gas_price.into()), MoveValue::U64(txn_max_gas_units.into()), diff --git a/aptos-move/aptos-vm/src/transaction_metadata.rs b/aptos-move/aptos-vm/src/transaction_metadata.rs index 6e6b0cdd8b684..3c4be633af6ff 100644 --- a/aptos-move/aptos-vm/src/transaction_metadata.rs +++ b/aptos-move/aptos-vm/src/transaction_metadata.rs @@ -17,6 +17,8 @@ pub struct TransactionMetadata { pub secondary_signers: Vec, pub secondary_authentication_keys: Vec>, pub sequence_number: u64, + pub fee_payer: Option, + pub fee_payer_authentication_key: Option>, pub max_gas_amount: Gas, pub gas_unit_price: FeePerGasUnit, pub transaction_size: NumBytes, @@ -39,6 +41,11 @@ impl TransactionMetadata { .map(|account_auth| account_auth.authentication_key().to_vec()) .collect(), sequence_number: txn.sequence_number(), + fee_payer: txn.authenticator_ref().fee_payer_address(), + fee_payer_authentication_key: txn + .authenticator() + .fee_payer_signer() + .map(|signer| signer.authentication_key().to_vec()), max_gas_amount: txn.max_gas_amount().into(), gas_unit_price: txn.gas_unit_price().into(), transaction_size: (txn.raw_txn_bytes_len() as u64).into(), @@ -67,6 +74,10 @@ impl TransactionMetadata { self.gas_unit_price } + pub fn fee_payer(&self) -> Option { + self.fee_payer.to_owned() + } + pub fn script_size(&self) -> NumBytes { self.script_size } @@ -79,6 +90,12 @@ impl TransactionMetadata { self.secondary_signers.to_owned() } + pub fn senders(&self) -> Vec { + let mut senders = vec![self.sender()]; + senders.extend(self.secondary_signers()); + senders + } + pub fn authentication_key(&self) -> &[u8] { &self.authentication_key } @@ -100,7 +117,7 @@ impl TransactionMetadata { } pub fn is_multi_agent(&self) -> bool { - !self.secondary_signers.is_empty() + !(self.secondary_signers.is_empty() && self.fee_payer.is_none()) } } @@ -115,6 +132,8 @@ impl Default for TransactionMetadata { secondary_signers: vec![], secondary_authentication_keys: vec![], sequence_number: 0, + fee_payer: None, + fee_payer_authentication_key: None, max_gas_amount: 100_000_000.into(), gas_unit_price: 0.into(), transaction_size: 0.into(), diff --git a/aptos-move/aptos-vm/src/transaction_validation.rs b/aptos-move/aptos-vm/src/transaction_validation.rs index 29b810e648c04..86caf18bac15d 100644 --- a/aptos-move/aptos-vm/src/transaction_validation.rs +++ b/aptos-move/aptos-vm/src/transaction_validation.rs @@ -13,6 +13,7 @@ pub static APTOS_TRANSACTION_VALIDATION: Lazy = Lazy::new(|| TransactionValidation { module_addr: CORE_CODE_ADDRESS, module_name: Identifier::new("transaction_validation").unwrap(), + fee_payer_prologue_name: Identifier::new("fee_payer_script_prologue").unwrap(), script_prologue_name: Identifier::new("script_prologue").unwrap(), module_prologue_name: Identifier::new("module_prologue").unwrap(), multi_agent_prologue_name: Identifier::new("multi_agent_script_prologue").unwrap(), @@ -25,6 +26,7 @@ pub static APTOS_TRANSACTION_VALIDATION: Lazy = pub struct TransactionValidation { pub module_addr: AccountAddress, pub module_name: Identifier, + pub fee_payer_prologue_name: Identifier, pub script_prologue_name: Identifier, pub module_prologue_name: Identifier, pub multi_agent_prologue_name: Identifier, diff --git a/aptos-move/e2e-move-tests/src/tests/fee_payer.rs b/aptos-move/e2e-move-tests/src/tests/fee_payer.rs new file mode 100644 index 0000000000000..ce0d31187e44e --- /dev/null +++ b/aptos-move/e2e-move-tests/src/tests/fee_payer.rs @@ -0,0 +1,321 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +use crate::{assert_success, tests::common, MoveHarness}; +use aptos::move_tool::MemberId; +use aptos_language_e2e_tests::{account::TransactionBuilder, transaction_status_eq}; +use aptos_types::{ + account_address::AccountAddress, + account_config::CoinStoreResource, + on_chain_config::FeatureFlag, + transaction::{EntryFunction, Script, TransactionArgument, TransactionStatus}, +}; +use move_core_types::{move_resource::MoveStructType, vm_status::StatusCode}; + +fn read_coin(h: &MoveHarness, account: &AccountAddress) -> u64 { + h.read_resource::(account, CoinStoreResource::struct_tag()) + .unwrap() + .coin() +} + +#[test] +fn test_two_to_two_transfer_fee_payer() { + let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); + + let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); + let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); + let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); + let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); + let payer = h.new_account_at(AccountAddress::from_hex_literal("0xea51d").unwrap()); + + let amount_alice = 100; + let amount_bob = 200; + let amount_carol = 50; + let amount_david = amount_alice + amount_bob - amount_carol; + + let build_options = aptos_framework::BuildOptions { + with_srcs: false, + with_abis: false, + with_source_maps: false, + with_error_map: false, + ..aptos_framework::BuildOptions::default() + }; + + let package = aptos_framework::BuiltPackage::build( + common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), + build_options, + ) + .expect("building package must succeed"); + + let alice_start = read_coin(&h, alice.address()); + let bob_start = read_coin(&h, bob.address()); + let carol_start = read_coin(&h, carol.address()); + let david_start = read_coin(&h, david.address()); + let payer_start = read_coin(&h, payer.address()); + + let code = package.extract_script_code()[0].clone(); + let script = Script::new(code, vec![], vec![ + TransactionArgument::U64(amount_alice), + TransactionArgument::U64(amount_bob), + TransactionArgument::Address(*carol.address()), + TransactionArgument::Address(*david.address()), + TransactionArgument::U64(amount_carol), + ]); + + let transaction = TransactionBuilder::new(alice.clone()) + .secondary_signers(vec![bob.clone()]) + .fee_payer(payer.clone()) + .script(script) + .sequence_number(h.sequence_number(alice.address())) + .max_gas_amount(1_000_000) + .gas_unit_price(1) + .sign_fee_payer(); + + let output = h.executor.execute_transaction(transaction); + assert_success!(output.status().to_owned()); + h.executor.apply_write_set(output.write_set()); + + let alice_end = read_coin(&h, alice.address()); + let bob_end = read_coin(&h, bob.address()); + let carol_end = read_coin(&h, carol.address()); + let david_end = read_coin(&h, david.address()); + let payer_end = read_coin(&h, payer.address()); + + // Make sure sender alice doesn't pay gas + assert_eq!(alice_start - amount_alice, alice_end); + assert_eq!(bob_start - amount_bob, bob_end); + assert_eq!(carol_start + amount_carol, carol_end); + assert_eq!(david_start + amount_david, david_end); + // Make sure payer pays + assert_eq!(payer_start - output.gas_used(), payer_end); +} + +#[test] +fn test_two_to_two_transfer_fee_payer_is_sender() { + let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); + + let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); + let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); + let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); + let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); + let payer = h.new_account_at(AccountAddress::from_hex_literal("0xea51d").unwrap()); + + let amount_alice = 100; + let amount_bob = 200; + let amount_carol = 50; + let amount_david = amount_alice + amount_bob - amount_carol; + + let build_options = aptos_framework::BuildOptions { + with_srcs: false, + with_abis: false, + with_source_maps: false, + with_error_map: false, + ..aptos_framework::BuildOptions::default() + }; + + let package = aptos_framework::BuiltPackage::build( + common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), + build_options, + ) + .expect("building package must succeed"); + + let alice_start = read_coin(&h, alice.address()); + let bob_start = read_coin(&h, bob.address()); + let carol_start = read_coin(&h, carol.address()); + let david_start = read_coin(&h, david.address()); + let payer_start = read_coin(&h, payer.address()); + + let code = package.extract_script_code()[0].clone(); + let script = Script::new(code, vec![], vec![ + TransactionArgument::U64(amount_alice), + TransactionArgument::U64(amount_bob), + TransactionArgument::Address(*carol.address()), + TransactionArgument::Address(*david.address()), + TransactionArgument::U64(amount_carol), + ]); + + let transaction = TransactionBuilder::new(alice.clone()) + .secondary_signers(vec![bob.clone()]) + .fee_payer(alice.clone()) + .script(script) + .sequence_number(h.sequence_number(alice.address())) + .max_gas_amount(1_000_000) + .gas_unit_price(1) + .sign_fee_payer(); + + let output = h.executor.execute_transaction(transaction); + assert_success!(output.status().to_owned()); + h.executor.apply_write_set(output.write_set()); + + let alice_end = read_coin(&h, alice.address()); + let bob_end = read_coin(&h, bob.address()); + let carol_end = read_coin(&h, carol.address()); + let david_end = read_coin(&h, david.address()); + let payer_end = read_coin(&h, payer.address()); + + // Make sure alice pays gas + assert_eq!(alice_start - amount_alice - output.gas_used(), alice_end); + assert_eq!(bob_start - amount_bob, bob_end); + assert_eq!(carol_start + amount_carol, carol_end); + assert_eq!(david_start + amount_david, david_end); + // Make sure payer doesn't pays + assert_eq!(payer_start, payer_end); +} + +#[test] +fn test_two_to_two_transfer_fee_payer_without_feature() { + let mut h = MoveHarness::new(); + + let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); + let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); + let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); + let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); + let payer = h.new_account_at(AccountAddress::from_hex_literal("0xea51d").unwrap()); + + let amount_alice = 100; + let amount_bob = 200; + let amount_carol = 50; + + let build_options = aptos_framework::BuildOptions { + with_srcs: false, + with_abis: false, + with_source_maps: false, + with_error_map: false, + ..aptos_framework::BuildOptions::default() + }; + + let package = aptos_framework::BuiltPackage::build( + common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), + build_options, + ) + .expect("building package must succeed"); + + let code = package.extract_script_code()[0].clone(); + let script = Script::new(code, vec![], vec![ + TransactionArgument::U64(amount_alice), + TransactionArgument::U64(amount_bob), + TransactionArgument::Address(*carol.address()), + TransactionArgument::Address(*david.address()), + TransactionArgument::U64(amount_carol), + ]); + + let transaction = TransactionBuilder::new(alice.clone()) + .secondary_signers(vec![bob]) + .fee_payer(payer) + .script(script) + .sequence_number(h.sequence_number(alice.address())) + .max_gas_amount(1_000_000) + .gas_unit_price(1) + .sign_fee_payer(); + + let output = h.executor.execute_transaction(transaction); + assert!(transaction_status_eq( + output.status(), + &TransactionStatus::Discard(StatusCode::UNEXPECTED_ERROR_FROM_KNOWN_MOVE_FUNCTION) + )); +} + +#[test] +fn test_normal_tx_with_signer_with_fee_payer() { + let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); + + let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); + let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); + + let alice_start = read_coin(&h, alice.address()); + let bob_start = read_coin(&h, bob.address()); + + // Load the code + let acc = h.new_account_at(AccountAddress::from_hex_literal("0xcafe").unwrap()); + assert_success!(h.publish_package(&acc, &common::test_dir_path("string_args.data/pack"))); + + let fun: MemberId = str::parse("0xcafe::test::hi").unwrap(); + let entry = EntryFunction::new(fun.module_id, fun.member_id, vec![], vec![bcs::to_bytes( + &"Hi", + ) + .unwrap()]); + let transaction = TransactionBuilder::new(alice.clone()) + .fee_payer(bob.clone()) + .entry_function(entry) + .sequence_number(h.sequence_number(alice.address())) + .max_gas_amount(1_000_000) + .gas_unit_price(1) + .sign_fee_payer(); + + let output = h.executor.execute_transaction(transaction); + // The last signer became the gas payer and thus, the execution errors with a mismatch + // between required signers as parameters and signers passed in. + assert_success!(output.status().to_owned()); + h.executor.apply_write_set(output.write_set()); + + let alice_after = read_coin(&h, alice.address()); + let bob_after = read_coin(&h, bob.address()); + + assert_eq!(alice_start, alice_after); + assert!(bob_start > bob_after); +} + +#[test] +fn test_normal_tx_without_signer_with_fee_payer() { + let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); + + let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); + let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); + + let alice_start = read_coin(&h, alice.address()); + let bob_start = read_coin(&h, bob.address()); + + // Load the code + let acc = h.new_account_at(AccountAddress::from_hex_literal("0xcafe").unwrap()); + assert_success!(h.publish_package(&acc, &common::test_dir_path("string_args.data/pack"))); + + let fun: MemberId = str::parse("0xcafe::test::nothing").unwrap(); + let entry = EntryFunction::new(fun.module_id, fun.member_id, vec![], vec![]); + let transaction = TransactionBuilder::new(alice.clone()) + .fee_payer(bob.clone()) + .entry_function(entry) + .sequence_number(h.sequence_number(alice.address())) + .max_gas_amount(1_000_000) + .gas_unit_price(1) + .sign_fee_payer(); + + let output = h.executor.execute_transaction(transaction); + // The last signer became the gas payer and thus, the execution errors with a mismatch + // between required signers as parameters and signers passed in. + assert_success!(output.status().to_owned()); + h.executor.apply_write_set(output.write_set()); + + let alice_after = read_coin(&h, alice.address()); + let bob_after = read_coin(&h, bob.address()); + + assert_eq!(alice_start, alice_after); + assert!(bob_start > bob_after); +} + +#[test] +fn test_normal_tx_with_fee_payer_insufficient_funds() { + let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); + + let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); + let bob = h.new_account_with_balance_and_sequence_number(1, 0); + + // Load the code + let acc = h.new_account_at(AccountAddress::from_hex_literal("0xcafe").unwrap()); + assert_success!(h.publish_package(&acc, &common::test_dir_path("string_args.data/pack"))); + + let fun: MemberId = str::parse("0xcafe::test::nothing").unwrap(); + let entry = EntryFunction::new(fun.module_id, fun.member_id, vec![], vec![]); + let transaction = TransactionBuilder::new(alice.clone()) + .fee_payer(bob) + .entry_function(entry) + .sequence_number(h.sequence_number(alice.address())) + .max_gas_amount(1_000_000) + .gas_unit_price(1) + .sign_fee_payer(); + + let output = h.executor.execute_transaction(transaction); + assert!(transaction_status_eq( + output.status(), + &TransactionStatus::Discard(StatusCode::INSUFFICIENT_BALANCE_FOR_TRANSACTION_FEE) + )); +} diff --git a/aptos-move/e2e-move-tests/src/tests/mod.rs b/aptos-move/e2e-move-tests/src/tests/mod.rs index b20357a44969c..4b3635f089fb4 100644 --- a/aptos-move/e2e-move-tests/src/tests/mod.rs +++ b/aptos-move/e2e-move-tests/src/tests/mod.rs @@ -9,6 +9,7 @@ mod code_publishing; mod common; mod constructor_args; mod error_map; +mod fee_payer; mod fungible_asset; mod gas; mod generate_upgrade_script; diff --git a/aptos-move/e2e-move-tests/src/tests/scripts.rs b/aptos-move/e2e-move-tests/src/tests/scripts.rs index 2e8317250588d..46826e5c415eb 100644 --- a/aptos-move/e2e-move-tests/src/tests/scripts.rs +++ b/aptos-move/e2e-move-tests/src/tests/scripts.rs @@ -2,15 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 use crate::{assert_success, tests::common, MoveHarness}; -use aptos::move_tool::MemberId; -use aptos_language_e2e_tests::{account::TransactionBuilder, transaction_status_eq}; +use aptos_language_e2e_tests::account::TransactionBuilder; use aptos_types::{ account_address::AccountAddress, account_config::CoinStoreResource, - on_chain_config::FeatureFlag, - transaction::{EntryFunction, ExecutionStatus, Script, TransactionArgument, TransactionStatus}, + transaction::{Script, TransactionArgument}, }; -use move_core_types::{move_resource::MoveStructType, vm_status::StatusCode}; +use move_core_types::move_resource::MoveStructType; #[test] fn test_two_to_two_transfer() { @@ -82,341 +80,3 @@ fn read_coin(h: &MoveHarness, account: &AccountAddress) -> u64 { .unwrap() .coin() } - -#[test] -fn test_two_to_two_transfer_gas_payer() { - let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); - let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); - let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); - let payer = h.new_account_at(AccountAddress::from_hex_literal("0xea51d").unwrap()); - - let amount_alice = 100; - let amount_bob = 200; - let amount_carol = 50; - let amount_david = amount_alice + amount_bob - amount_carol; - - let build_options = aptos_framework::BuildOptions { - with_srcs: false, - with_abis: false, - with_source_maps: false, - with_error_map: false, - ..aptos_framework::BuildOptions::default() - }; - - let package = aptos_framework::BuiltPackage::build( - common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), - build_options, - ) - .expect("building package must succeed"); - - let alice_start = read_coin(&h, alice.address()); - let bob_start = read_coin(&h, bob.address()); - let carol_start = read_coin(&h, carol.address()); - let david_start = read_coin(&h, david.address()); - let payer_start = read_coin(&h, payer.address()); - - let code = package.extract_script_code()[0].clone(); - let script = Script::new(code, vec![], vec![ - TransactionArgument::U64(amount_alice), - TransactionArgument::U64(amount_bob), - TransactionArgument::Address(*carol.address()), - TransactionArgument::Address(*david.address()), - TransactionArgument::U64(amount_carol), - ]); - - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob.clone(), payer.clone()]) - .script(script) - .sequence_number(h.sequence_number(alice.address()) | (1u64 << 63)) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - assert_success!(output.status().to_owned()); - h.executor.apply_write_set(output.write_set()); - - let alice_end = read_coin(&h, alice.address()); - let bob_end = read_coin(&h, bob.address()); - let carol_end = read_coin(&h, carol.address()); - let david_end = read_coin(&h, david.address()); - let payer_end = read_coin(&h, payer.address()); - - // Make sure sender alice doesn't pay gas - assert_eq!(alice_start - amount_alice, alice_end); - assert_eq!(bob_start - amount_bob, bob_end); - assert_eq!(carol_start + amount_carol, carol_end); - assert_eq!(david_start + amount_david, david_end); - // Make sure payer pays - assert_eq!(payer_start - output.gas_used(), payer_end); -} - -#[test] -fn test_two_to_two_transfer_gas_payer_without_gas_bit_set_fails() { - let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); - let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); - let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); - let payer = h.new_account_at(AccountAddress::from_hex_literal("0xea51d").unwrap()); - - let amount_alice = 100; - let amount_bob = 200; - let amount_carol = 50; - - let build_options = aptos_framework::BuildOptions { - with_srcs: false, - with_abis: false, - with_source_maps: false, - with_error_map: false, - ..aptos_framework::BuildOptions::default() - }; - - let package = aptos_framework::BuiltPackage::build( - common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), - build_options, - ) - .expect("building package must succeed"); - - let code = package.extract_script_code()[0].clone(); - let script = Script::new(code, vec![], vec![ - TransactionArgument::U64(amount_alice), - TransactionArgument::U64(amount_bob), - TransactionArgument::Address(*carol.address()), - TransactionArgument::Address(*david.address()), - TransactionArgument::U64(amount_carol), - ]); - - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob, payer]) - .script(script) - .sequence_number(h.sequence_number(alice.address())) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - println!("{:?}", output.status()); - assert!(transaction_status_eq( - output.status(), - &TransactionStatus::Keep(ExecutionStatus::MiscellaneousError(Some( - StatusCode::NUMBER_OF_SIGNER_ARGUMENTS_MISMATCH - ))) - )); -} - -#[test] -fn test_two_to_two_transfer_gas_payer_without_feature() { - let mut h = MoveHarness::new(); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); - let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); - let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); - let payer = h.new_account_at(AccountAddress::from_hex_literal("0xea51d").unwrap()); - - let amount_alice = 100; - let amount_bob = 200; - let amount_carol = 50; - - let build_options = aptos_framework::BuildOptions { - with_srcs: false, - with_abis: false, - with_source_maps: false, - with_error_map: false, - ..aptos_framework::BuildOptions::default() - }; - - let package = aptos_framework::BuiltPackage::build( - common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), - build_options, - ) - .expect("building package must succeed"); - - let code = package.extract_script_code()[0].clone(); - let script = Script::new(code, vec![], vec![ - TransactionArgument::U64(amount_alice), - TransactionArgument::U64(amount_bob), - TransactionArgument::Address(*carol.address()), - TransactionArgument::Address(*david.address()), - TransactionArgument::U64(amount_carol), - ]); - - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob, payer]) - .script(script) - .sequence_number(h.sequence_number(alice.address()) | (1u64 << 63)) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - assert!(transaction_status_eq( - output.status(), - &TransactionStatus::Discard(StatusCode::SEQUENCE_NUMBER_TOO_BIG) - )); -} - -#[test] -fn test_two_to_two_transfer_gas_payer_without_gas_payer() { - let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); - let carol = h.new_account_at(AccountAddress::from_hex_literal("0xca501").unwrap()); - let david = h.new_account_at(AccountAddress::from_hex_literal("0xda51d").unwrap()); - - let amount_alice = 100; - let amount_bob = 200; - let amount_carol = 50; - - let build_options = aptos_framework::BuildOptions { - with_srcs: false, - with_abis: false, - with_source_maps: false, - with_error_map: false, - ..aptos_framework::BuildOptions::default() - }; - - let package = aptos_framework::BuiltPackage::build( - common::test_dir_path("../../../move-examples/scripts/two_by_two_transfer"), - build_options, - ) - .expect("building package must succeed"); - - let code = package.extract_script_code()[0].clone(); - let script = Script::new(code, vec![], vec![ - TransactionArgument::U64(amount_alice), - TransactionArgument::U64(amount_bob), - TransactionArgument::Address(*carol.address()), - TransactionArgument::Address(*david.address()), - TransactionArgument::U64(amount_carol), - ]); - - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob]) - .script(script) - .sequence_number(h.sequence_number(alice.address()) | (1u64 << 63)) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - // The last signer became the gas payer and thus, the execution errors with a mismatch - // between required signers as parameters and signers passed in. - assert!(transaction_status_eq( - output.status(), - &TransactionStatus::Keep(ExecutionStatus::MiscellaneousError(Some( - StatusCode::NUMBER_OF_SIGNER_ARGUMENTS_MISMATCH - ))) - )); -} - -#[test] -fn test_normal_tx_with_signer_with_gas_payer() { - let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); - - let alice_start = read_coin(&h, alice.address()); - let bob_start = read_coin(&h, bob.address()); - - // Load the code - let acc = h.new_account_at(AccountAddress::from_hex_literal("0xcafe").unwrap()); - assert_success!(h.publish_package(&acc, &common::test_dir_path("string_args.data/pack"))); - - let fun: MemberId = str::parse("0xcafe::test::hi").unwrap(); - let entry = EntryFunction::new(fun.module_id, fun.member_id, vec![], vec![bcs::to_bytes( - &"Hi", - ) - .unwrap()]); - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob.clone()]) - .entry_function(entry) - .sequence_number(h.sequence_number(alice.address()) | (1u64 << 63)) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - // The last signer became the gas payer and thus, the execution errors with a mismatch - // between required signers as parameters and signers passed in. - assert_success!(output.status().to_owned()); - h.executor.apply_write_set(output.write_set()); - - let alice_after = read_coin(&h, alice.address()); - let bob_after = read_coin(&h, bob.address()); - - assert_eq!(alice_start, alice_after); - assert!(bob_start > bob_after); -} - -#[test] -fn test_normal_tx_without_signer_with_gas_payer() { - let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_at(AccountAddress::from_hex_literal("0xb0b").unwrap()); - - let alice_start = read_coin(&h, alice.address()); - let bob_start = read_coin(&h, bob.address()); - - // Load the code - let acc = h.new_account_at(AccountAddress::from_hex_literal("0xcafe").unwrap()); - assert_success!(h.publish_package(&acc, &common::test_dir_path("string_args.data/pack"))); - - let fun: MemberId = str::parse("0xcafe::test::nothing").unwrap(); - let entry = EntryFunction::new(fun.module_id, fun.member_id, vec![], vec![]); - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob.clone()]) - .entry_function(entry) - .sequence_number(h.sequence_number(alice.address()) | (1u64 << 63)) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - // The last signer became the gas payer and thus, the execution errors with a mismatch - // between required signers as parameters and signers passed in. - assert_success!(output.status().to_owned()); - h.executor.apply_write_set(output.write_set()); - - let alice_after = read_coin(&h, alice.address()); - let bob_after = read_coin(&h, bob.address()); - - assert_eq!(alice_start, alice_after); - assert!(bob_start > bob_after); -} - -#[test] -fn test_normal_tx_with_gas_payer_insufficient_funds() { - let mut h = MoveHarness::new_with_features(vec![FeatureFlag::GAS_PAYER_ENABLED], vec![]); - - let alice = h.new_account_at(AccountAddress::from_hex_literal("0xa11ce").unwrap()); - let bob = h.new_account_with_balance_and_sequence_number(1, 0); - - // Load the code - let acc = h.new_account_at(AccountAddress::from_hex_literal("0xcafe").unwrap()); - assert_success!(h.publish_package(&acc, &common::test_dir_path("string_args.data/pack"))); - - let fun: MemberId = str::parse("0xcafe::test::nothing").unwrap(); - let entry = EntryFunction::new(fun.module_id, fun.member_id, vec![], vec![]); - let transaction = TransactionBuilder::new(alice.clone()) - .secondary_signers(vec![bob]) - .entry_function(entry) - .sequence_number(h.sequence_number(alice.address()) | (1u64 << 63)) - .max_gas_amount(1_000_000) - .gas_unit_price(1) - .sign_multi_agent(); - - let output = h.executor.execute_transaction(transaction); - assert!(transaction_status_eq( - output.status(), - &TransactionStatus::Discard(StatusCode::INSUFFICIENT_BALANCE_FOR_TRANSACTION_FEE) - )); -} diff --git a/aptos-move/e2e-tests/src/account.rs b/aptos-move/e2e-tests/src/account.rs index e350b757b7646..8ac66d00bf8cd 100644 --- a/aptos-move/e2e-tests/src/account.rs +++ b/aptos-move/e2e-tests/src/account.rs @@ -158,6 +158,7 @@ impl Default for Account { pub struct TransactionBuilder { pub sender: Account, pub secondary_signers: Vec, + pub fee_payer: Option, pub sequence_number: Option, pub program: Option, pub max_gas_amount: Option, @@ -171,6 +172,7 @@ impl TransactionBuilder { Self { sender, secondary_signers: Vec::new(), + fee_payer: None, sequence_number: None, program: None, max_gas_amount: None, @@ -185,6 +187,11 @@ impl TransactionBuilder { self } + pub fn fee_payer(mut self, fee_payer: Account) -> Self { + self.fee_payer = Some(fee_payer); + self + } + pub fn sequence_number(mut self, sequence_number: u64) -> Self { self.sequence_number = Some(sequence_number); self @@ -263,7 +270,7 @@ impl TransactionBuilder { .iter() .map(|signer| *signer.address()) .collect(); - let secondary_private_keys = self + let secondary_private_keys: Vec<&Ed25519PrivateKey> = self .secondary_signers .iter() .map(|signer| &signer.privkey) @@ -285,6 +292,38 @@ impl TransactionBuilder { .unwrap() .into_inner() } + + pub fn sign_fee_payer(self) -> SignedTransaction { + let secondary_signer_addresses: Vec = self + .secondary_signers + .iter() + .map(|signer| *signer.address()) + .collect(); + let secondary_private_keys: Vec<&Ed25519PrivateKey> = self + .secondary_signers + .iter() + .map(|signer| &signer.privkey) + .collect(); + let fee_payer = self.fee_payer.unwrap(); + RawTransaction::new( + *self.sender.address(), + self.sequence_number.expect("sequence number not set"), + self.program.expect("transaction payload not set"), + self.max_gas_amount.unwrap_or(gas_costs::TXN_RESERVED), + self.gas_unit_price.unwrap_or(0), + self.ttl.unwrap_or(DEFAULT_EXPIRATION_TIME), + ChainId::test(), + ) + .sign_fee_payer( + &self.sender.privkey, + secondary_signer_addresses, + secondary_private_keys, + *fee_payer.address(), + &fee_payer.privkey, + ) + .unwrap() + .into_inner() + } } //--------------------------------------------------------------------------- diff --git a/aptos-move/framework/aptos-framework/doc/transaction_validation.md b/aptos-move/framework/aptos-framework/doc/transaction_validation.md index c9eb48546eebc..8524cf31b5600 100644 --- a/aptos-move/framework/aptos-framework/doc/transaction_validation.md +++ b/aptos-move/framework/aptos-framework/doc/transaction_validation.md @@ -12,6 +12,8 @@ - [Function `module_prologue`](#0x1_transaction_validation_module_prologue) - [Function `script_prologue`](#0x1_transaction_validation_script_prologue) - [Function `multi_agent_script_prologue`](#0x1_transaction_validation_multi_agent_script_prologue) +- [Function `multi_agent_common_prologue`](#0x1_transaction_validation_multi_agent_common_prologue) +- [Function `fee_payer_script_prologue`](#0x1_transaction_validation_fee_payer_script_prologue) - [Function `epilogue`](#0x1_transaction_validation_epilogue) - [Function `epilogue_gas_payer`](#0x1_transaction_validation_epilogue_gas_payer) - [Specification](#@Specification_1) @@ -20,6 +22,8 @@ - [Function `module_prologue`](#@Specification_1_module_prologue) - [Function `script_prologue`](#@Specification_1_script_prologue) - [Function `multi_agent_script_prologue`](#@Specification_1_multi_agent_script_prologue) + - [Function `multi_agent_common_prologue`](#@Specification_1_multi_agent_common_prologue) + - [Function `fee_payer_script_prologue`](#@Specification_1_fee_payer_script_prologue) - [Function `epilogue`](#@Specification_1_epilogue) - [Function `epilogue_gas_payer`](#@Specification_1_epilogue_gas_payer) @@ -104,6 +108,7 @@ correct chain-specific prologue and epilogue functions +MSB is used to indicate a gas payer tx
const MAX_U64: u128 = 18446744073709551615;
@@ -121,16 +126,6 @@ Transaction exceeded its allocated max gas
 
 
 
-
-
-MSB is used to indicate a gas payer tx
-
-
-
const GAS_PAYER_FLAG_BIT: u64 = 9223372036854775808;
-
- - - @@ -158,11 +153,11 @@ MSB is used to indicate a gas payer tx - + -
const PROLOGUE_EGAS_PAYER_ACCOUNT_MISSING: u64 = 1010;
+
const PROLOGUE_EFEE_PAYER_NOT_ENABLED: u64 = 1010;
 
@@ -303,7 +298,7 @@ Only called during genesis to initialize system resources for this module. ); assert!( - txn_sequence_number < GAS_PAYER_FLAG_BIT, + txn_sequence_number < (1u64 << 63), error::out_of_range(PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG) ); @@ -427,17 +422,45 @@ Only called during genesis to initialize system resources for this module. txn_expiration_time: u64, chain_id: u8, ) { - let gas_payer = signer::address_of(&sender); - let num_secondary_signers = vector::length(&secondary_signer_addresses); - if (txn_sequence_number >= GAS_PAYER_FLAG_BIT) { - assert!(features::gas_payer_enabled(), error::out_of_range(PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG)); - assert!(num_secondary_signers > 0, error::invalid_argument(PROLOGUE_EGAS_PAYER_ACCOUNT_MISSING)); - gas_payer = *std::vector::borrow(&secondary_signer_addresses, std::vector::length(&secondary_signer_addresses) - 1); - // Clear the high bit as it's not part of the sequence number - txn_sequence_number = txn_sequence_number - GAS_PAYER_FLAG_BIT; - }; - prologue_common(sender, gas_payer, txn_sequence_number, txn_sender_public_key, txn_gas_price, txn_max_gas_units, txn_expiration_time, chain_id); + let sender_addr = signer::address_of(&sender); + prologue_common( + sender, + sender_addr, + txn_sequence_number, + txn_sender_public_key, + txn_gas_price, + txn_max_gas_units, + txn_expiration_time, + chain_id, + ); + multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes); +} +
+ + + + + + + +## Function `multi_agent_common_prologue` + + +
fun multi_agent_common_prologue(secondary_signer_addresses: vector<address>, secondary_signer_public_key_hashes: vector<vector<u8>>)
+
+ + + +
+Implementation + + +
fun multi_agent_common_prologue(
+    secondary_signer_addresses: vector<address>,
+    secondary_signer_public_key_hashes: vector<vector<u8>>,
+) {
+    let num_secondary_signers = vector::length(&secondary_signer_addresses);
     assert!(
         vector::length(&secondary_signer_public_key_hashes) == num_secondary_signers,
         error::invalid_argument(PROLOGUE_ESECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH),
@@ -469,6 +492,57 @@ Only called during genesis to initialize system resources for this module.
 
 
 
+
+ + + +## Function `fee_payer_script_prologue` + + + +
fun fee_payer_script_prologue(sender: signer, txn_sequence_number: u64, txn_sender_public_key: vector<u8>, secondary_signer_addresses: vector<address>, secondary_signer_public_key_hashes: vector<vector<u8>>, fee_payer_address: address, fee_payer_public_key_hash: vector<u8>, txn_gas_price: u64, txn_max_gas_units: u64, txn_expiration_time: u64, chain_id: u8)
+
+ + + +
+Implementation + + +
fun fee_payer_script_prologue(
+    sender: signer,
+    txn_sequence_number: u64,
+    txn_sender_public_key: vector<u8>,
+    secondary_signer_addresses: vector<address>,
+    secondary_signer_public_key_hashes: vector<vector<u8>>,
+    fee_payer_address: address,
+    fee_payer_public_key_hash: vector<u8>,
+    txn_gas_price: u64,
+    txn_max_gas_units: u64,
+    txn_expiration_time: u64,
+    chain_id: u8,
+) {
+    assert!(features::fee_payer_enabled(), error::invalid_state(PROLOGUE_EFEE_PAYER_NOT_ENABLED));
+    prologue_common(
+        sender,
+        fee_payer_address,
+        txn_sequence_number,
+        txn_sender_public_key,
+        txn_gas_price,
+        txn_max_gas_units,
+        txn_expiration_time,
+        chain_id,
+    );
+    multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes);
+    assert!(
+        fee_payer_public_key_hash == account::get_authentication_key(fee_payer_address),
+        error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY),
+    );
+}
+
+ + +
@@ -620,7 +694,7 @@ Give some constraints that may abort according to the conditions. aborts_if !account::exists_at(transaction_sender); aborts_if !(txn_sequence_number >= global<Account>(transaction_sender).sequence_number); aborts_if !(txn_authentication_key == global<Account>(transaction_sender).authentication_key); - aborts_if !(txn_sequence_number < GAS_PAYER_FLAG_BIT); + aborts_if !(txn_sequence_number < (1u64 << 63)); let max_transaction_fee = txn_gas_price * txn_max_gas_units; aborts_if max_transaction_fee > MAX_U64; aborts_if !(txn_sequence_number == global<Account>(transaction_sender).sequence_number); @@ -685,6 +759,24 @@ Give some constraints that may abort according to the conditions. + + + + +
schema MultiAgentPrologueCommonAbortsIf {
+    secondary_signer_addresses: vector<address>;
+    secondary_signer_public_key_hashes: vector<vector<u8>>;
+    let num_secondary_signers = len(secondary_signer_addresses);
+    aborts_if len(secondary_signer_public_key_hashes) != num_secondary_signers;
+    aborts_if exists i in 0..num_secondary_signers:
+        !account::exists_at(secondary_signer_addresses[i])
+            || secondary_signer_public_key_hashes[i] !=
+            account::get_authentication_key(secondary_signer_addresses[i]);
+}
+
+ + + ### Function `multi_agent_script_prologue` @@ -699,33 +791,63 @@ not equal the number of singers.
pragma verify_duration_estimate = 120;
-let gas_payer = if (txn_sequence_number < GAS_PAYER_FLAG_BIT) {
-    signer::address_of(sender)
-} else {
-    secondary_signer_addresses[len(secondary_signer_addresses) - 1]
+let gas_payer = signer::address_of(sender);
+include PrologueCommonAbortsIf {
+    gas_payer,
+    txn_sequence_number,
+    txn_authentication_key: txn_sender_public_key,
 };
-aborts_if txn_sequence_number >= GAS_PAYER_FLAG_BIT && !features::spec_gas_payer_enabled();
-aborts_if txn_sequence_number >= GAS_PAYER_FLAG_BIT && len(secondary_signer_addresses) == 0;
-let adjusted_txn_sequence_number = if (txn_sequence_number >= GAS_PAYER_FLAG_BIT) {
-    txn_sequence_number - GAS_PAYER_FLAG_BIT
-} else {
-    txn_sequence_number
+include MultiAgentPrologueCommonAbortsIf {
+    secondary_signer_addresses,
+    secondary_signer_public_key_hashes,
 };
+
+ + + + + +### Function `multi_agent_common_prologue` + + +
fun multi_agent_common_prologue(secondary_signer_addresses: vector<address>, secondary_signer_public_key_hashes: vector<vector<u8>>)
+
+ + + + +
include MultiAgentPrologueCommonAbortsIf {
+    secondary_signer_addresses,
+    secondary_signer_public_key_hashes,
+};
+
+ + + + + +### Function `fee_payer_script_prologue` + + +
fun fee_payer_script_prologue(sender: signer, txn_sequence_number: u64, txn_sender_public_key: vector<u8>, secondary_signer_addresses: vector<address>, secondary_signer_public_key_hashes: vector<vector<u8>>, fee_payer_address: address, fee_payer_public_key_hash: vector<u8>, txn_gas_price: u64, txn_max_gas_units: u64, txn_expiration_time: u64, chain_id: u8)
+
+ + + + +
pragma verify_duration_estimate = 120;
+let gas_payer = fee_payer_address;
 include PrologueCommonAbortsIf {
     gas_payer,
-    txn_sequence_number: adjusted_txn_sequence_number,
-    txn_authentication_key: txn_sender_public_key
+    txn_sequence_number,
+    txn_authentication_key: txn_sender_public_key,
 };
-let num_secondary_signers = len(secondary_signer_addresses);
-aborts_if len(secondary_signer_public_key_hashes) != num_secondary_signers;
-aborts_if exists i in 0..num_secondary_signers:
-    !account::exists_at(secondary_signer_addresses[i])
-        || secondary_signer_public_key_hashes[i] !=
-            account::get_authentication_key(secondary_signer_addresses[i]);
-ensures forall i in 0..num_secondary_signers:
-    account::exists_at(secondary_signer_addresses[i])
-        && secondary_signer_public_key_hashes[i] ==
-            account::get_authentication_key(secondary_signer_addresses[i]);
+include MultiAgentPrologueCommonAbortsIf {
+    secondary_signer_addresses,
+    secondary_signer_public_key_hashes,
+};
+aborts_if !account::exists_at(gas_payer);
+aborts_if !(fee_payer_public_key_hash == account::get_authentication_key(gas_payer));
 
diff --git a/aptos-move/framework/aptos-framework/sources/transaction_validation.move b/aptos-move/framework/aptos-framework/sources/transaction_validation.move index d2f96bf7877cc..89fc9e3fa26d5 100644 --- a/aptos-move/framework/aptos-framework/sources/transaction_validation.move +++ b/aptos-move/framework/aptos-framework/sources/transaction_validation.move @@ -26,7 +26,6 @@ module aptos_framework::transaction_validation { } /// MSB is used to indicate a gas payer tx - const GAS_PAYER_FLAG_BIT: u64 = 1u64 << 63; const MAX_U64: u128 = 18446744073709551615; /// Transaction exceeded its allocated max gas @@ -44,7 +43,8 @@ module aptos_framework::transaction_validation { const PROLOGUE_EBAD_CHAIN_ID: u64 = 1007; const PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG: u64 = 1008; const PROLOGUE_ESECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH: u64 = 1009; - const PROLOGUE_EGAS_PAYER_ACCOUNT_MISSING: u64 = 1010; + const PROLOGUE_EFEE_PAYER_NOT_ENABLED: u64 = 1010; + /// Only called during genesis to initialize system resources for this module. public(friend) fun initialize( @@ -90,7 +90,7 @@ module aptos_framework::transaction_validation { ); assert!( - txn_sequence_number < GAS_PAYER_FLAG_BIT, + txn_sequence_number < (1u64 << 63), error::out_of_range(PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG) ); @@ -154,17 +154,25 @@ module aptos_framework::transaction_validation { txn_expiration_time: u64, chain_id: u8, ) { - let gas_payer = signer::address_of(&sender); - let num_secondary_signers = vector::length(&secondary_signer_addresses); - if (txn_sequence_number >= GAS_PAYER_FLAG_BIT) { - assert!(features::gas_payer_enabled(), error::out_of_range(PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG)); - assert!(num_secondary_signers > 0, error::invalid_argument(PROLOGUE_EGAS_PAYER_ACCOUNT_MISSING)); - gas_payer = *std::vector::borrow(&secondary_signer_addresses, std::vector::length(&secondary_signer_addresses) - 1); - // Clear the high bit as it's not part of the sequence number - txn_sequence_number = txn_sequence_number - GAS_PAYER_FLAG_BIT; - }; - prologue_common(sender, gas_payer, txn_sequence_number, txn_sender_public_key, txn_gas_price, txn_max_gas_units, txn_expiration_time, chain_id); + let sender_addr = signer::address_of(&sender); + prologue_common( + sender, + sender_addr, + txn_sequence_number, + txn_sender_public_key, + txn_gas_price, + txn_max_gas_units, + txn_expiration_time, + chain_id, + ); + multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes); + } + fun multi_agent_common_prologue( + secondary_signer_addresses: vector
, + secondary_signer_public_key_hashes: vector>, + ) { + let num_secondary_signers = vector::length(&secondary_signer_addresses); assert!( vector::length(&secondary_signer_public_key_hashes) == num_secondary_signers, error::invalid_argument(PROLOGUE_ESECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH), @@ -193,6 +201,37 @@ module aptos_framework::transaction_validation { } } + fun fee_payer_script_prologue( + sender: signer, + txn_sequence_number: u64, + txn_sender_public_key: vector, + secondary_signer_addresses: vector
, + secondary_signer_public_key_hashes: vector>, + fee_payer_address: address, + fee_payer_public_key_hash: vector, + txn_gas_price: u64, + txn_max_gas_units: u64, + txn_expiration_time: u64, + chain_id: u8, + ) { + assert!(features::fee_payer_enabled(), error::invalid_state(PROLOGUE_EFEE_PAYER_NOT_ENABLED)); + prologue_common( + sender, + fee_payer_address, + txn_sequence_number, + txn_sender_public_key, + txn_gas_price, + txn_max_gas_units, + txn_expiration_time, + chain_id, + ); + multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes); + assert!( + fee_payer_public_key_hash == account::get_authentication_key(fee_payer_address), + error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY), + ); + } + /// Epilogue function is run after a transaction is successfully executed. /// Called by the Adapter fun epilogue( diff --git a/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move b/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move index a125f1d344b12..80812520bf9b2 100644 --- a/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move +++ b/aptos-move/framework/aptos-framework/sources/transaction_validation.spec.move @@ -44,7 +44,7 @@ spec aptos_framework::transaction_validation { aborts_if !account::exists_at(transaction_sender); aborts_if !(txn_sequence_number >= global(transaction_sender).sequence_number); aborts_if !(txn_authentication_key == global(transaction_sender).authentication_key); - aborts_if !(txn_sequence_number < GAS_PAYER_FLAG_BIT); + aborts_if !(txn_sequence_number < (1u64 << 63)); let max_transaction_fee = txn_gas_price * txn_max_gas_units; aborts_if max_transaction_fee > MAX_U64; @@ -97,6 +97,31 @@ spec aptos_framework::transaction_validation { }; } + spec schema MultiAgentPrologueCommonAbortsIf { + secondary_signer_addresses: vector
; + secondary_signer_public_key_hashes: vector>; + + // Vectors to be `zipped with` should be of equal length. + let num_secondary_signers = len(secondary_signer_addresses); + aborts_if len(secondary_signer_public_key_hashes) != num_secondary_signers; + + // If any account does not exist, or public key hash does not match, abort. + aborts_if exists i in 0..num_secondary_signers: + !account::exists_at(secondary_signer_addresses[i]) + || secondary_signer_public_key_hashes[i] != + account::get_authentication_key(secondary_signer_addresses[i]); + } + + spec multi_agent_common_prologue( + secondary_signer_addresses: vector
, + secondary_signer_public_key_hashes: vector>, + ) { + include MultiAgentPrologueCommonAbortsIf { + secondary_signer_addresses, + secondary_signer_public_key_hashes, + }; + } + /// Aborts if length of public key hashed vector /// not equal the number of singers. spec multi_agent_script_prologue ( @@ -111,42 +136,48 @@ spec aptos_framework::transaction_validation { chain_id: u8, ) { pragma verify_duration_estimate = 120; - let gas_payer = if (txn_sequence_number < GAS_PAYER_FLAG_BIT) { - signer::address_of(sender) - } else { - secondary_signer_addresses[len(secondary_signer_addresses) - 1] + let gas_payer = signer::address_of(sender); + include PrologueCommonAbortsIf { + gas_payer, + txn_sequence_number, + txn_authentication_key: txn_sender_public_key, }; - aborts_if txn_sequence_number >= GAS_PAYER_FLAG_BIT && !features::spec_gas_payer_enabled(); - aborts_if txn_sequence_number >= GAS_PAYER_FLAG_BIT && len(secondary_signer_addresses) == 0; - let adjusted_txn_sequence_number = if (txn_sequence_number >= GAS_PAYER_FLAG_BIT) { - txn_sequence_number - GAS_PAYER_FLAG_BIT - } else { - txn_sequence_number + include MultiAgentPrologueCommonAbortsIf { + secondary_signer_addresses, + secondary_signer_public_key_hashes, }; + } + + spec fee_payer_script_prologue( + sender: signer, + txn_sequence_number: u64, + txn_sender_public_key: vector, + secondary_signer_addresses: vector
, + secondary_signer_public_key_hashes: vector>, + fee_payer_address: address, + fee_payer_public_key_hash: vector, + txn_gas_price: u64, + txn_max_gas_units: u64, + txn_expiration_time: u64, + chain_id: u8, + ) { + pragma verify_duration_estimate = 120; + let gas_payer = fee_payer_address; include PrologueCommonAbortsIf { gas_payer, - txn_sequence_number: adjusted_txn_sequence_number, - txn_authentication_key: txn_sender_public_key + txn_sequence_number, + txn_authentication_key: txn_sender_public_key, + }; + include MultiAgentPrologueCommonAbortsIf { + secondary_signer_addresses, + secondary_signer_public_key_hashes, }; - // Vectors to be `zipped with` should be of equal length. - let num_secondary_signers = len(secondary_signer_addresses); - aborts_if len(secondary_signer_public_key_hashes) != num_secondary_signers; - - // If any account does not exist, or public key hash does not match, abort. - aborts_if exists i in 0..num_secondary_signers: - !account::exists_at(secondary_signer_addresses[i]) - || secondary_signer_public_key_hashes[i] != - account::get_authentication_key(secondary_signer_addresses[i]); - - // By the end, all secondary signers account should exist and public key hash should match. - ensures forall i in 0..num_secondary_signers: - account::exists_at(secondary_signer_addresses[i]) - && secondary_signer_public_key_hashes[i] == - account::get_authentication_key(secondary_signer_addresses[i]); + aborts_if !account::exists_at(gas_payer); + aborts_if !(fee_payer_public_key_hash == account::get_authentication_key(gas_payer)); } - /// Abort according to the conditions. + /// Abort according to the conditions. /// `AptosCoinCapabilities` and `CoinInfo` should exists. /// Skip transaction_fee::burn_fee verification. spec epilogue( diff --git a/aptos-move/framework/move-stdlib/doc/features.md b/aptos-move/framework/move-stdlib/doc/features.md index a237205951252..b71f01120bec0 100644 --- a/aptos-move/framework/move-stdlib/doc/features.md +++ b/aptos-move/framework/move-stdlib/doc/features.md @@ -61,7 +61,7 @@ return true. - [Function `partial_governance_voting_enabled`](#0x1_features_partial_governance_voting_enabled) - [Function `get_delegation_pool_partial_governance_voting`](#0x1_features_get_delegation_pool_partial_governance_voting) - [Function `delegation_pool_partial_governance_voting_enabled`](#0x1_features_delegation_pool_partial_governance_voting_enabled) -- [Function `gas_payer_enabled`](#0x1_features_gas_payer_enabled) +- [Function `fee_payer_enabled`](#0x1_features_fee_payer_enabled) - [Function `get_auids`](#0x1_features_get_auids) - [Function `auids_enabled`](#0x1_features_auids_enabled) - [Function `change_feature_flags`](#0x1_features_change_feature_flags) @@ -253,13 +253,13 @@ The provided signer has not a framework address. - + Whether alternate gas payer is supported Lifetime: transient -
const GAS_PAYER_ENABLED: u64 = 22;
+
const FEE_PAYER_ENABLED: u64 = 22;
 
@@ -1058,13 +1058,13 @@ Lifetime: transient - + -## Function `gas_payer_enabled` +## Function `fee_payer_enabled` -
public fun gas_payer_enabled(): bool
+
public fun fee_payer_enabled(): bool
 
@@ -1073,8 +1073,8 @@ Lifetime: transient Implementation -
public fun gas_payer_enabled(): bool acquires Features {
-    is_enabled(GAS_PAYER_ENABLED)
+
public fun fee_payer_enabled(): bool acquires Features {
+    is_enabled(FEE_PAYER_ENABLED)
 }
 
@@ -1386,11 +1386,11 @@ Helper to check whether a feature flag is enabled. - + -
fun spec_gas_payer_enabled(): bool {
-   spec_is_enabled(GAS_PAYER_ENABLED)
+
fun spec_fee_payer_enabled(): bool {
+   spec_is_enabled(FEE_PAYER_ENABLED)
 }
 
diff --git a/aptos-move/framework/move-stdlib/sources/configs/features.move b/aptos-move/framework/move-stdlib/sources/configs/features.move index 9f64c9ee8be45..4b9c642541fff 100644 --- a/aptos-move/framework/move-stdlib/sources/configs/features.move +++ b/aptos-move/framework/move-stdlib/sources/configs/features.move @@ -196,9 +196,9 @@ module std::features { /// Whether alternate gas payer is supported /// Lifetime: transient - const GAS_PAYER_ENABLED: u64 = 22; - public fun gas_payer_enabled(): bool acquires Features { - is_enabled(GAS_PAYER_ENABLED) + const FEE_PAYER_ENABLED: u64 = 22; + public fun fee_payer_enabled(): bool acquires Features { + is_enabled(FEE_PAYER_ENABLED) } /// Whether enable MOVE functions to call create_auid method to create AUIDs. diff --git a/aptos-move/framework/move-stdlib/sources/configs/features.spec.move b/aptos-move/framework/move-stdlib/sources/configs/features.spec.move index 108a6fb9dfb13..61b04d4596f22 100644 --- a/aptos-move/framework/move-stdlib/sources/configs/features.spec.move +++ b/aptos-move/framework/move-stdlib/sources/configs/features.spec.move @@ -41,8 +41,8 @@ spec std::features { spec_is_enabled(PERIODICAL_REWARD_RATE_DECREASE) } - spec fun spec_gas_payer_enabled(): bool { - spec_is_enabled(GAS_PAYER_ENABLED) + spec fun spec_fee_payer_enabled(): bool { + spec_is_enabled(FEE_PAYER_ENABLED) } spec periodical_reward_rate_decrease_enabled { diff --git a/crates/aptos-protos/Cargo.lock b/crates/aptos-protos/Cargo.lock index b0f4e348607af..f6d04b5ebb9fd 100644 --- a/crates/aptos-protos/Cargo.lock +++ b/crates/aptos-protos/Cargo.lock @@ -16,7 +16,7 @@ checksum = "a26fa4d7e3f2eebadf743988fc8aec9fa9a9e82611acafd77c1462ed6262440a" [[package]] name = "aptos-protos" -version = "0.1.2" +version = "1.0.0" dependencies = [ "pbjson", "prost", diff --git a/crates/aptos-protos/proto/aptos/transaction/v1/transaction.proto b/crates/aptos-protos/proto/aptos/transaction/v1/transaction.proto index 9ca471bc6a1ca..0069e6e124b2c 100644 --- a/crates/aptos-protos/proto/aptos/transaction/v1/transaction.proto +++ b/crates/aptos-protos/proto/aptos/transaction/v1/transaction.proto @@ -402,6 +402,7 @@ message Signature { TYPE_ED25519 = 1; TYPE_MULTI_ED25519 = 2; TYPE_MULTI_AGENT = 3; + TYPE_FEE_PAYER = 4; } Type type = 1; @@ -409,6 +410,7 @@ message Signature { Ed25519Signature ed25519 = 2; MultiEd25519Signature multi_ed25519 = 3; MultiAgentSignature multi_agent = 4; + FeePayerSignature fee_payer = 5; } } @@ -430,6 +432,14 @@ message MultiAgentSignature { repeated AccountSignature secondary_signers = 3; } +message FeePayerSignature { + AccountSignature sender = 1; + repeated string secondary_signer_addresses = 2; + repeated AccountSignature secondary_signers = 3; + string fee_payer_address = 4; + AccountSignature fee_payer_signer = 5; +} + message AccountSignature { enum Type { TYPE_UNSPECIFIED = 0; diff --git a/crates/aptos-protos/src/pb/aptos.indexer.v1.rs b/crates/aptos-protos/src/pb/aptos.indexer.v1.rs index d68954c44b1a1..1fc1b3a16332b 100644 --- a/crates/aptos-protos/src/pb/aptos.indexer.v1.rs +++ b/crates/aptos-protos/src/pb/aptos.indexer.v1.rs @@ -1,6 +1,7 @@ // Copyright © Aptos Foundation // @generated +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetTransactionsRequest { /// Required; start version of current stream. @@ -16,6 +17,7 @@ pub struct GetTransactionsRequest { pub batch_size: ::core::option::Option, } /// TransactionsResponse is a batch of transactions. +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionsResponse { /// Required; transactions data. diff --git a/crates/aptos-protos/src/pb/aptos.indexer.v1.tonic.rs b/crates/aptos-protos/src/pb/aptos.indexer.v1.tonic.rs index 5aa048548ccea..47aa76ee5d227 100644 --- a/crates/aptos-protos/src/pb/aptos.indexer.v1.tonic.rs +++ b/crates/aptos-protos/src/pb/aptos.indexer.v1.tonic.rs @@ -101,10 +101,10 @@ pub mod raw_data_client { pub mod raw_data_server { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::*; - ///Generated trait containing gRPC methods that should be implemented for use with RawDataServer. + /// Generated trait containing gRPC methods that should be implemented for use with RawDataServer. #[async_trait] pub trait RawData: Send + Sync + 'static { - ///Server streaming response type for the GetTransactions method. + /// Server streaming response type for the GetTransactions method. type GetTransactionsStream: futures_core::Stream< Item = Result, > diff --git a/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.rs b/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.rs index b82be3edd861e..d94ef3bceef9c 100644 --- a/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.rs +++ b/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.rs @@ -8,11 +8,13 @@ // TransactionOutput data(size n) // StreamStatus: BATCH_END with version x + (k + 1) * n - 1 +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionsOutput { #[prost(message, repeated, tag="1")] pub transactions: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct StreamStatus { #[prost(enumeration="stream_status::StatusType", tag="1")] @@ -47,8 +49,18 @@ pub mod stream_status { StatusType::BatchEnd => "STATUS_TYPE_BATCH_END", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "STATUS_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "STATUS_TYPE_INIT" => Some(Self::Init), + "STATUS_TYPE_BATCH_END" => Some(Self::BatchEnd), + _ => None, + } + } } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetTransactionsFromNodeRequest { /// Required; start version of current stream. @@ -60,6 +72,7 @@ pub struct GetTransactionsFromNodeRequest { #[prost(uint64, optional, tag="2")] pub transactions_count: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionsFromNodeResponse { /// Making sure that all the responses include a chain id @@ -70,7 +83,8 @@ pub struct TransactionsFromNodeResponse { } /// Nested message and enum types in `TransactionsFromNodeResponse`. pub mod transactions_from_node_response { - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Response { #[prost(message, tag="1")] Status(super::StreamStatus), diff --git a/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.tonic.rs b/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.tonic.rs index 221fdff9728f6..5a17208684ae7 100644 --- a/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.tonic.rs +++ b/crates/aptos-protos/src/pb/aptos.internal.fullnode.v1.tonic.rs @@ -102,10 +102,10 @@ pub mod fullnode_data_client { pub mod fullnode_data_server { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::*; - ///Generated trait containing gRPC methods that should be implemented for use with FullnodeDataServer. + /// Generated trait containing gRPC methods that should be implemented for use with FullnodeDataServer. #[async_trait] pub trait FullnodeData: Send + Sync + 'static { - ///Server streaming response type for the GetTransactionsFromNode method. + /// Server streaming response type for the GetTransactionsFromNode method. type GetTransactionsFromNodeStream: futures_core::Stream< Item = Result, > diff --git a/crates/aptos-protos/src/pb/aptos.transaction.v1.rs b/crates/aptos-protos/src/pb/aptos.transaction.v1.rs index 3c60ca4f9c5ba..a9e6693eaebec 100644 --- a/crates/aptos-protos/src/pb/aptos.transaction.v1.rs +++ b/crates/aptos-protos/src/pb/aptos.transaction.v1.rs @@ -10,6 +10,7 @@ /// the same `height`. /// /// The Genesis Transaction (version 0) is contained within the first block, which has a height of `0` +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Block { /// Timestamp represents the timestamp of the `BlockMetadataTransaction` (or `GenesisTransaction` for the genesis block) @@ -32,6 +33,7 @@ pub struct Block { /// - Block Metadata Transaction: transactions generated by the chain to group together transactions forming a "block" /// - State Checkpoint Transaction: transactions generated by the chain so when validator agreed on a particular global state /// - Genesis Transaction: the first transaction of the chain, with all core contract and validator information baked in +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Transaction { #[prost(message, optional, tag="1")] @@ -74,8 +76,20 @@ pub mod transaction { TransactionType::User => "TRANSACTION_TYPE_USER", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TRANSACTION_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TRANSACTION_TYPE_GENESIS" => Some(Self::Genesis), + "TRANSACTION_TYPE_BLOCK_METADATA" => Some(Self::BlockMetadata), + "TRANSACTION_TYPE_STATE_CHECKPOINT" => Some(Self::StateCheckpoint), + "TRANSACTION_TYPE_USER" => Some(Self::User), + _ => None, + } + } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum TxnData { #[prost(message, tag="7")] BlockMetadata(super::BlockMetadataTransaction), @@ -87,6 +101,7 @@ pub mod transaction { User(super::UserTransaction), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct BlockMetadataTransaction { #[prost(string, tag="1")] @@ -102,6 +117,7 @@ pub struct BlockMetadataTransaction { #[prost(uint32, repeated, tag="6")] pub failed_proposer_indices: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GenesisTransaction { #[prost(message, optional, tag="1")] @@ -109,9 +125,11 @@ pub struct GenesisTransaction { #[prost(message, repeated, tag="2")] pub events: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct StateCheckpointTransaction { } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct UserTransaction { #[prost(message, optional, tag="1")] @@ -119,6 +137,7 @@ pub struct UserTransaction { #[prost(message, repeated, tag="2")] pub events: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Event { #[prost(message, optional, tag="1")] @@ -132,6 +151,7 @@ pub struct Event { #[prost(string, tag="4")] pub data: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionInfo { #[prost(bytes="vec", tag="1")] @@ -153,6 +173,7 @@ pub struct TransactionInfo { #[prost(message, repeated, tag="9")] pub changes: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct EventKey { #[prost(uint64, tag="1")] @@ -160,6 +181,7 @@ pub struct EventKey { #[prost(string, tag="2")] pub account_address: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct UserTransactionRequest { #[prost(string, tag="1")] @@ -177,6 +199,7 @@ pub struct UserTransactionRequest { #[prost(message, optional, tag="7")] pub signature: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteSet { #[prost(enumeration="write_set::WriteSetType", tag="1")] @@ -205,8 +228,18 @@ pub mod write_set { WriteSetType::DirectWriteSet => "WRITE_SET_TYPE_DIRECT_WRITE_SET", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "WRITE_SET_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "WRITE_SET_TYPE_SCRIPT_WRITE_SET" => Some(Self::ScriptWriteSet), + "WRITE_SET_TYPE_DIRECT_WRITE_SET" => Some(Self::DirectWriteSet), + _ => None, + } + } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum WriteSet { #[prost(message, tag="2")] ScriptWriteSet(super::ScriptWriteSet), @@ -214,6 +247,7 @@ pub mod write_set { DirectWriteSet(super::DirectWriteSet), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ScriptWriteSet { #[prost(string, tag="1")] @@ -221,6 +255,7 @@ pub struct ScriptWriteSet { #[prost(message, optional, tag="2")] pub script: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DirectWriteSet { #[prost(message, repeated, tag="1")] @@ -228,6 +263,7 @@ pub struct DirectWriteSet { #[prost(message, repeated, tag="2")] pub events: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteSetChange { #[prost(enumeration="write_set_change::Type", tag="1")] @@ -264,8 +300,22 @@ pub mod write_set_change { Type::WriteTableItem => "TYPE_WRITE_TABLE_ITEM", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TYPE_DELETE_MODULE" => Some(Self::DeleteModule), + "TYPE_DELETE_RESOURCE" => Some(Self::DeleteResource), + "TYPE_DELETE_TABLE_ITEM" => Some(Self::DeleteTableItem), + "TYPE_WRITE_MODULE" => Some(Self::WriteModule), + "TYPE_WRITE_RESOURCE" => Some(Self::WriteResource), + "TYPE_WRITE_TABLE_ITEM" => Some(Self::WriteTableItem), + _ => None, + } + } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Change { #[prost(message, tag="2")] DeleteModule(super::DeleteModule), @@ -281,6 +331,7 @@ pub mod write_set_change { WriteTableItem(super::WriteTableItem), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteModule { #[prost(string, tag="1")] @@ -290,6 +341,7 @@ pub struct DeleteModule { #[prost(message, optional, tag="3")] pub module: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteResource { #[prost(string, tag="1")] @@ -301,6 +353,7 @@ pub struct DeleteResource { #[prost(string, tag="4")] pub type_str: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteTableItem { #[prost(bytes="vec", tag="1")] @@ -312,6 +365,7 @@ pub struct DeleteTableItem { #[prost(message, optional, tag="4")] pub data: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct DeleteTableData { #[prost(string, tag="1")] @@ -319,6 +373,7 @@ pub struct DeleteTableData { #[prost(string, tag="2")] pub key_type: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteModule { #[prost(string, tag="1")] @@ -328,6 +383,7 @@ pub struct WriteModule { #[prost(message, optional, tag="3")] pub data: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteResource { #[prost(string, tag="1")] @@ -341,6 +397,7 @@ pub struct WriteResource { #[prost(string, tag="5")] pub data: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteTableData { #[prost(string, tag="1")] @@ -352,6 +409,7 @@ pub struct WriteTableData { #[prost(string, tag="4")] pub value_type: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteTableItem { #[prost(bytes="vec", tag="1")] @@ -363,6 +421,7 @@ pub struct WriteTableItem { #[prost(message, optional, tag="4")] pub data: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionPayload { #[prost(enumeration="transaction_payload::Type", tag="1")] @@ -397,8 +456,21 @@ pub mod transaction_payload { Type::MultisigPayload => "TYPE_MULTISIG_PAYLOAD", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TYPE_ENTRY_FUNCTION_PAYLOAD" => Some(Self::EntryFunctionPayload), + "TYPE_SCRIPT_PAYLOAD" => Some(Self::ScriptPayload), + "TYPE_MODULE_BUNDLE_PAYLOAD" => Some(Self::ModuleBundlePayload), + "TYPE_WRITE_SET_PAYLOAD" => Some(Self::WriteSetPayload), + "TYPE_MULTISIG_PAYLOAD" => Some(Self::MultisigPayload), + _ => None, + } + } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Payload { #[prost(message, tag="2")] EntryFunctionPayload(super::EntryFunctionPayload), @@ -412,6 +484,7 @@ pub mod transaction_payload { MultisigPayload(super::MultisigPayload), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct EntryFunctionPayload { #[prost(message, optional, tag="1")] @@ -423,6 +496,7 @@ pub struct EntryFunctionPayload { #[prost(string, tag="4")] pub entry_function_id_str: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveScriptBytecode { #[prost(bytes="vec", tag="1")] @@ -430,6 +504,7 @@ pub struct MoveScriptBytecode { #[prost(message, optional, tag="2")] pub abi: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ScriptPayload { #[prost(message, optional, tag="1")] @@ -439,6 +514,7 @@ pub struct ScriptPayload { #[prost(string, repeated, tag="3")] pub arguments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MultisigPayload { #[prost(string, tag="1")] @@ -446,6 +522,7 @@ pub struct MultisigPayload { #[prost(message, optional, tag="2")] pub transaction_payload: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MultisigTransactionPayload { #[prost(enumeration="multisig_transaction_payload::Type", tag="1")] @@ -472,18 +549,29 @@ pub mod multisig_transaction_payload { Type::EntryFunctionPayload => "TYPE_ENTRY_FUNCTION_PAYLOAD", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TYPE_ENTRY_FUNCTION_PAYLOAD" => Some(Self::EntryFunctionPayload), + _ => None, + } + } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Payload { #[prost(message, tag="2")] EntryFunctionPayload(super::EntryFunctionPayload), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ModuleBundlePayload { #[prost(message, repeated, tag="1")] pub modules: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveModuleBytecode { #[prost(bytes="vec", tag="1")] @@ -491,6 +579,7 @@ pub struct MoveModuleBytecode { #[prost(message, optional, tag="2")] pub abi: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveModule { #[prost(string, tag="1")] @@ -504,6 +593,7 @@ pub struct MoveModule { #[prost(message, repeated, tag="5")] pub structs: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveFunction { #[prost(string, tag="1")] @@ -542,8 +632,19 @@ pub mod move_function { Visibility::Friend => "VISIBILITY_FRIEND", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "VISIBILITY_UNSPECIFIED" => Some(Self::Unspecified), + "VISIBILITY_PRIVATE" => Some(Self::Private), + "VISIBILITY_PUBLIC" => Some(Self::Public), + "VISIBILITY_FRIEND" => Some(Self::Friend), + _ => None, + } + } } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveStruct { #[prost(string, tag="1")] @@ -557,6 +658,7 @@ pub struct MoveStruct { #[prost(message, repeated, tag="5")] pub fields: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveStructGenericTypeParam { #[prost(enumeration="MoveAbility", repeated, tag="1")] @@ -564,6 +666,7 @@ pub struct MoveStructGenericTypeParam { #[prost(bool, tag="2")] pub is_phantom: bool, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveStructField { #[prost(string, tag="1")] @@ -571,11 +674,13 @@ pub struct MoveStructField { #[prost(message, optional, tag="2")] pub r#type: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveFunctionGenericTypeParam { #[prost(enumeration="MoveAbility", repeated, tag="1")] pub constraints: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveType { #[prost(enumeration="MoveTypes", tag="1")] @@ -585,14 +690,16 @@ pub struct MoveType { } /// Nested message and enum types in `MoveType`. pub mod move_type { - #[derive(Clone, PartialEq, ::prost::Message)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ReferenceType { #[prost(bool, tag="1")] pub mutable: bool, #[prost(message, optional, boxed, tag="2")] pub to: ::core::option::Option<::prost::alloc::boxed::Box>, } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Content { #[prost(message, tag="3")] Vector(::prost::alloc::boxed::Box), @@ -606,11 +713,13 @@ pub mod move_type { Unparsable(::prost::alloc::string::String), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct WriteSetPayload { #[prost(message, optional, tag="1")] pub write_set: ::core::option::Option, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct EntryFunctionId { #[prost(message, optional, tag="1")] @@ -618,6 +727,7 @@ pub struct EntryFunctionId { #[prost(string, tag="2")] pub name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveModuleId { #[prost(string, tag="1")] @@ -625,6 +735,7 @@ pub struct MoveModuleId { #[prost(string, tag="2")] pub name: ::prost::alloc::string::String, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoveStructTag { #[prost(string, tag="1")] @@ -636,11 +747,12 @@ pub struct MoveStructTag { #[prost(message, repeated, tag="4")] pub generic_type_params: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Signature { #[prost(enumeration="signature::Type", tag="1")] pub r#type: i32, - #[prost(oneof="signature::Signature", tags="2, 3, 4")] + #[prost(oneof="signature::Signature", tags="2, 3, 4, 5")] pub signature: ::core::option::Option, } /// Nested message and enum types in `Signature`. @@ -652,6 +764,7 @@ pub mod signature { Ed25519 = 1, MultiEd25519 = 2, MultiAgent = 3, + FeePayer = 4, } impl Type { /// String value of the enum field names used in the ProtoBuf definition. @@ -664,10 +777,23 @@ pub mod signature { Type::Ed25519 => "TYPE_ED25519", Type::MultiEd25519 => "TYPE_MULTI_ED25519", Type::MultiAgent => "TYPE_MULTI_AGENT", + Type::FeePayer => "TYPE_FEE_PAYER", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TYPE_ED25519" => Some(Self::Ed25519), + "TYPE_MULTI_ED25519" => Some(Self::MultiEd25519), + "TYPE_MULTI_AGENT" => Some(Self::MultiAgent), + "TYPE_FEE_PAYER" => Some(Self::FeePayer), + _ => None, } } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Signature { #[prost(message, tag="2")] Ed25519(super::Ed25519Signature), @@ -675,8 +801,11 @@ pub mod signature { MultiEd25519(super::MultiEd25519Signature), #[prost(message, tag="4")] MultiAgent(super::MultiAgentSignature), + #[prost(message, tag="5")] + FeePayer(super::FeePayerSignature), } } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Ed25519Signature { #[prost(bytes="vec", tag="1")] @@ -684,6 +813,7 @@ pub struct Ed25519Signature { #[prost(bytes="vec", tag="2")] pub signature: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MultiEd25519Signature { #[prost(bytes="vec", repeated, tag="1")] @@ -695,6 +825,7 @@ pub struct MultiEd25519Signature { #[prost(uint32, repeated, tag="4")] pub public_key_indices: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MultiAgentSignature { #[prost(message, optional, tag="1")] @@ -704,6 +835,21 @@ pub struct MultiAgentSignature { #[prost(message, repeated, tag="3")] pub secondary_signers: ::prost::alloc::vec::Vec, } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FeePayerSignature { + #[prost(message, optional, tag="1")] + pub sender: ::core::option::Option, + #[prost(string, repeated, tag="2")] + pub secondary_signer_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[prost(message, repeated, tag="3")] + pub secondary_signers: ::prost::alloc::vec::Vec, + #[prost(string, tag="4")] + pub fee_payer_address: ::prost::alloc::string::String, + #[prost(message, optional, tag="5")] + pub fee_payer_signer: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AccountSignature { #[prost(enumeration="account_signature::Type", tag="1")] @@ -732,8 +878,18 @@ pub mod account_signature { Type::MultiEd25519 => "TYPE_MULTI_ED25519", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TYPE_ED25519" => Some(Self::Ed25519), + "TYPE_MULTI_ED25519" => Some(Self::MultiEd25519), + _ => None, + } + } } - #[derive(Clone, PartialEq, ::prost::Oneof)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] pub enum Signature { #[prost(message, tag="2")] Ed25519(super::Ed25519Signature), @@ -789,6 +945,27 @@ impl MoveTypes { MoveTypes::Unparsable => "MOVE_TYPES_UNPARSABLE", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "MOVE_TYPES_UNSPECIFIED" => Some(Self::Unspecified), + "MOVE_TYPES_BOOL" => Some(Self::Bool), + "MOVE_TYPES_U8" => Some(Self::U8), + "MOVE_TYPES_U16" => Some(Self::U16), + "MOVE_TYPES_U32" => Some(Self::U32), + "MOVE_TYPES_U64" => Some(Self::U64), + "MOVE_TYPES_U128" => Some(Self::U128), + "MOVE_TYPES_U256" => Some(Self::U256), + "MOVE_TYPES_ADDRESS" => Some(Self::Address), + "MOVE_TYPES_SIGNER" => Some(Self::Signer), + "MOVE_TYPES_VECTOR" => Some(Self::Vector), + "MOVE_TYPES_STRUCT" => Some(Self::Struct), + "MOVE_TYPES_GENERIC_TYPE_PARAM" => Some(Self::GenericTypeParam), + "MOVE_TYPES_REFERENCE" => Some(Self::Reference), + "MOVE_TYPES_UNPARSABLE" => Some(Self::Unparsable), + _ => None, + } + } } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] @@ -813,10 +990,21 @@ impl MoveAbility { MoveAbility::Key => "MOVE_ABILITY_KEY", } } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "MOVE_ABILITY_UNSPECIFIED" => Some(Self::Unspecified), + "MOVE_ABILITY_COPY" => Some(Self::Copy), + "MOVE_ABILITY_DROP" => Some(Self::Drop), + "MOVE_ABILITY_STORE" => Some(Self::Store), + "MOVE_ABILITY_KEY" => Some(Self::Key), + _ => None, + } + } } /// Encoded file descriptor set for the `aptos.transaction.v1` package pub const FILE_DESCRIPTOR_SET: &[u8] = &[ - 0x0a, 0xd5, 0xdb, 0x01, 0x0a, 0x26, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, + 0x0a, 0xe5, 0xe2, 0x01, 0x0a, 0x26, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, @@ -1408,7 +1596,7 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, - 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x96, 0x03, 0x0a, 0x09, 0x53, 0x69, + 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xf2, 0x03, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, @@ -1427,1152 +1615,1209 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, - 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x02, 0x12, - 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x41, 0x47, - 0x45, 0x4e, 0x54, 0x10, 0x03, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0x4f, 0x0a, 0x10, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x45, 0x64, 0x32, - 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2c, 0x0a, 0x12, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x13, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, - 0x79, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x12, 0x53, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, + 0x74, 0x69, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x09, 0x66, 0x65, 0x65, 0x5f, 0x70, + 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x46, 0x65, 0x65, 0x50, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x48, 0x00, 0x52, 0x08, 0x66, 0x65, 0x65, 0x50, 0x61, 0x79, 0x65, 0x72, 0x22, + 0x70, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, + 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x01, 0x12, + 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x45, 0x44, + 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x12, 0x0a, + 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x45, 0x45, 0x5f, 0x50, 0x41, 0x59, 0x45, 0x52, 0x10, + 0x04, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x4f, + 0x0a, 0x10, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0xa4, 0x01, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, + 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x49, + 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3e, + 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x3c, + 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x11, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x73, 0x22, 0xe4, 0x02, 0x0a, 0x11, 0x46, 0x65, 0x65, 0x50, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x18, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, + 0x72, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x61, 0x72, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x65, + 0x65, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x65, 0x65, 0x50, 0x61, 0x79, 0x65, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x10, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x61, + 0x79, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0e, 0x66, 0x65, 0x65, 0x50, 0x61, 0x79, + 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0xc0, 0x02, 0x0a, 0x10, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3f, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x52, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x53, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x73, 0x22, 0xc0, 0x02, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x65, - 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, - 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x48, 0x00, 0x52, 0x07, 0x65, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x12, - 0x52, 0x0a, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x65, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x45, 0x64, 0x32, 0x35, - 0x35, 0x31, 0x39, 0x22, 0x46, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, - 0x39, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, - 0x49, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x02, 0x42, 0x0b, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2a, 0xea, 0x02, 0x0a, 0x09, 0x4d, 0x6f, 0x76, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, - 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x4f, 0x56, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x38, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x4f, - 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x31, 0x36, 0x10, 0x0c, 0x12, 0x12, - 0x0a, 0x0e, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x33, 0x32, - 0x10, 0x0d, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, - 0x5f, 0x55, 0x36, 0x34, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x31, 0x32, 0x38, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x4d, - 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x32, 0x35, 0x36, 0x10, 0x0e, - 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x41, - 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, - 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x56, 0x45, - 0x43, 0x54, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x10, 0x08, 0x12, 0x21, 0x0a, - 0x1d, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x45, - 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0x09, - 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x52, - 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x4f, - 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x50, 0x41, 0x52, 0x53, 0x41, - 0x42, 0x4c, 0x45, 0x10, 0x0b, 0x2a, 0x87, 0x01, 0x0a, 0x0b, 0x4d, 0x6f, 0x76, 0x65, 0x41, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x42, 0x49, 0x4c, - 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x50, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, - 0x56, 0x45, 0x5f, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x10, - 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, - 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x56, - 0x45, 0x5f, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x04, 0x4a, - 0x8e, 0x84, 0x01, 0x0a, 0x07, 0x12, 0x05, 0x03, 0x00, 0xbc, 0x03, 0x01, 0x0a, 0x4e, 0x0a, 0x01, - 0x0c, 0x12, 0x03, 0x03, 0x00, 0x12, 0x32, 0x44, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0xc2, 0xa9, 0x20, 0x41, 0x70, 0x74, 0x6f, 0x73, 0x20, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x53, 0x50, 0x44, 0x58, 0x2d, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3a, - 0x20, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x32, 0x2e, 0x30, 0x0a, 0x0a, 0x08, 0x0a, 0x01, - 0x02, 0x12, 0x03, 0x05, 0x00, 0x1d, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x07, 0x00, - 0x2e, 0x0a, 0xa3, 0x05, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x12, 0x00, 0x20, 0x01, 0x1a, 0x96, - 0x05, 0x20, 0x41, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x41, 0x70, 0x74, - 0x6f, 0x73, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x28, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x60, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x29, 0x0a, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, - 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, - 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x74, - 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x2e, 0x0a, - 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x60, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x60, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2c, 0x0a, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, - 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x67, 0x61, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, - 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x62, 0x65, 0x20, 0x74, 0x77, - 0x6f, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x60, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x60, - 0x2e, 0x0a, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x20, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x30, 0x29, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x60, 0x30, 0x60, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, - 0x12, 0x08, 0x0d, 0x0a, 0xde, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x15, 0x02, - 0x2f, 0x1a, 0xd0, 0x01, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x20, 0x72, - 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x28, 0x6f, 0x72, 0x20, 0x60, 0x47, - 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x73, - 0x69, 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x0a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x60, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x60, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x60, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x15, - 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x15, 0x21, 0x2a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x15, 0x2d, 0x2e, 0x0a, 0x88, - 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x18, 0x02, 0x29, 0x1a, 0x7b, 0x20, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x2c, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x01, 0x05, 0x12, 0x03, 0x18, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x18, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, - 0x18, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x18, 0x14, - 0x28, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x18, 0x15, 0x27, - 0x0a, 0x87, 0x02, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x1c, 0x02, 0x28, 0x1a, 0xf9, - 0x01, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x68, - 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, - 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x29, 0x0a, 0x20, 0x61, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x60, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, - 0x70, 0x20, 0x74, 0x6f, 0x20, 0x28, 0x62, 0x75, 0x74, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x29, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x60, 0x42, + 0x75, 0x72, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x42, + 0x0a, 0x07, 0x65, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x61, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x00, 0x52, 0x07, 0x65, 0x64, 0x32, 0x35, 0x35, + 0x31, 0x39, 0x12, 0x52, 0x0a, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x65, 0x64, 0x32, 0x35, + 0x35, 0x31, 0x39, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x74, 0x6f, + 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x45, + 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x22, 0x46, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, + 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x32, + 0x35, 0x35, 0x31, 0x39, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, + 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x02, 0x42, 0x0b, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2a, 0xea, 0x02, 0x0a, 0x09, + 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x4f, 0x56, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x53, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x4f, + 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x38, 0x10, 0x02, 0x12, 0x12, 0x0a, + 0x0e, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x31, 0x36, 0x10, + 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, + 0x55, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x53, 0x5f, 0x55, 0x36, 0x34, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x4f, 0x56, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x31, 0x32, 0x38, 0x10, 0x04, 0x12, 0x13, + 0x0a, 0x0f, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x32, 0x35, + 0x36, 0x10, 0x0e, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x53, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x4d, + 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, + 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, + 0x5f, 0x56, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x10, 0x08, + 0x12, 0x21, 0x0a, 0x1d, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x47, + 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x41, + 0x4d, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x53, 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x0a, 0x12, 0x19, 0x0a, + 0x15, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x50, 0x41, + 0x52, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0b, 0x2a, 0x87, 0x01, 0x0a, 0x0b, 0x4d, 0x6f, 0x76, + 0x65, 0x41, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x4f, 0x56, 0x45, + 0x5f, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, + 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x50, 0x59, 0x10, 0x01, 0x12, 0x15, 0x0a, + 0x11, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x44, 0x52, + 0x4f, 0x50, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x42, 0x49, + 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, + 0x4d, 0x4f, 0x56, 0x45, 0x5f, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4b, 0x45, 0x59, + 0x10, 0x04, 0x4a, 0xdb, 0x87, 0x01, 0x0a, 0x07, 0x12, 0x05, 0x03, 0x00, 0xc6, 0x03, 0x01, 0x0a, + 0x4e, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x03, 0x00, 0x12, 0x32, 0x44, 0x20, 0x43, 0x6f, 0x70, 0x79, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0xc2, 0xa9, 0x20, 0x41, 0x70, 0x74, 0x6f, 0x73, 0x20, 0x46, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x53, 0x50, 0x44, 0x58, 0x2d, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x3a, 0x20, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2d, 0x32, 0x2e, 0x30, 0x0a, 0x0a, + 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x05, 0x00, 0x1d, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, + 0x03, 0x07, 0x00, 0x2e, 0x0a, 0xa3, 0x05, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x12, 0x00, 0x20, + 0x01, 0x1a, 0x96, 0x05, 0x20, 0x41, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x20, + 0x41, 0x70, 0x74, 0x6f, 0x73, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x72, 0x6f, + 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, + 0x28, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, + 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, + 0x69, 0x6e, 0x67, 0x20, 0x60, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x29, 0x0a, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x02, 0x04, 0x12, 0x03, 0x1c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, - 0x06, 0x12, 0x03, 0x1c, 0x0b, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, - 0x03, 0x1c, 0x17, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x1c, - 0x26, 0x27, 0x0a, 0x99, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x1f, 0x02, 0x16, - 0x1a, 0x8b, 0x01, 0x20, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x49, 0x44, 0x20, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x75, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x20, 0x77, 0x65, 0x27, 0x72, 0x65, 0x20, 0x74, 0x72, 0x79, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, - 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x65, 0x27, 0x72, - 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x20, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x03, 0x03, 0x12, 0x03, 0x1f, 0x14, 0x15, 0x0a, 0x8c, 0x04, 0x0a, 0x02, 0x04, 0x01, 0x12, - 0x04, 0x27, 0x00, 0x3e, 0x01, 0x1a, 0xff, 0x03, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, - 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x34, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, - 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x0a, 0x20, 0x2d, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x74, 0x6f, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x22, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x0a, 0x20, 0x2d, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x61, 0x67, 0x72, - 0x65, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x0a, 0x20, 0x2d, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x20, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x61, - 0x6b, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, - 0x27, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x28, 0x02, 0x2f, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x28, 0x02, 0x20, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x21, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x28, 0x2d, 0x2e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, - 0x02, 0x01, 0x12, 0x03, 0x29, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, - 0x12, 0x03, 0x29, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, - 0x29, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x29, 0x13, - 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x29, 0x15, 0x29, 0x0a, - 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x29, 0x16, 0x28, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x2a, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x2a, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x02, 0x01, 0x12, 0x03, 0x2a, 0x12, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, - 0x12, 0x03, 0x2a, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x2b, - 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2b, 0x09, 0x0e, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x2b, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x03, 0x08, 0x12, 0x03, 0x2b, 0x13, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, - 0x02, 0x03, 0x08, 0x06, 0x12, 0x03, 0x2b, 0x14, 0x26, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x04, 0x12, 0x03, 0x2c, 0x02, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x05, 0x12, - 0x03, 0x2c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x2c, - 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2c, 0x18, 0x19, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x08, 0x12, 0x03, 0x2c, 0x1a, 0x2e, 0x0a, 0x0d, - 0x0a, 0x06, 0x04, 0x01, 0x02, 0x04, 0x08, 0x06, 0x12, 0x03, 0x2c, 0x1b, 0x2d, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x01, 0x04, 0x00, 0x12, 0x04, 0x2e, 0x02, 0x34, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x04, 0x00, 0x01, 0x12, 0x03, 0x2e, 0x07, 0x16, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, - 0x00, 0x02, 0x00, 0x12, 0x03, 0x2f, 0x04, 0x25, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x2f, 0x04, 0x20, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, - 0x02, 0x00, 0x02, 0x12, 0x03, 0x2f, 0x23, 0x24, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, 0x00, - 0x02, 0x01, 0x12, 0x03, 0x30, 0x04, 0x21, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, - 0x01, 0x01, 0x12, 0x03, 0x30, 0x04, 0x1c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, - 0x01, 0x02, 0x12, 0x03, 0x30, 0x1f, 0x20, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, 0x00, 0x02, - 0x02, 0x12, 0x03, 0x31, 0x04, 0x28, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x31, 0x04, 0x23, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, 0x02, - 0x02, 0x12, 0x03, 0x31, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, 0x00, 0x02, 0x03, - 0x12, 0x03, 0x32, 0x04, 0x2a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x32, 0x04, 0x25, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, 0x03, 0x02, - 0x12, 0x03, 0x32, 0x28, 0x29, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, 0x00, 0x02, 0x04, 0x12, - 0x03, 0x33, 0x04, 0x1e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, - 0x03, 0x33, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, 0x04, 0x02, 0x12, - 0x03, 0x33, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x36, 0x02, - 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x36, 0x02, 0x11, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x36, 0x12, 0x16, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, 0x36, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x01, 0x08, 0x00, 0x12, 0x04, 0x38, 0x02, 0x3d, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x08, - 0x00, 0x01, 0x12, 0x03, 0x38, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06, 0x12, - 0x03, 0x39, 0x04, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x06, 0x12, 0x03, 0x39, - 0x04, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x39, 0x1d, 0x2b, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x39, 0x2e, 0x2f, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, 0x3a, 0x04, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x07, 0x06, 0x12, 0x03, 0x3a, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x07, 0x01, 0x12, 0x03, 0x3a, 0x17, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x03, - 0x12, 0x03, 0x3a, 0x21, 0x22, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x08, 0x12, 0x03, 0x3b, - 0x04, 0x34, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x06, 0x12, 0x03, 0x3b, 0x04, 0x1e, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x01, 0x12, 0x03, 0x3b, 0x1f, 0x2f, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x03, 0x12, 0x03, 0x3b, 0x32, 0x33, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x01, 0x02, 0x09, 0x12, 0x03, 0x3c, 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x09, 0x06, 0x12, 0x03, 0x3c, 0x04, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x09, 0x01, - 0x12, 0x03, 0x3c, 0x14, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x09, 0x03, 0x12, 0x03, - 0x3c, 0x1b, 0x1d, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x40, 0x00, 0x47, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x40, 0x08, 0x20, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x02, 0x02, 0x00, 0x12, 0x03, 0x41, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x41, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x41, 0x09, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x41, - 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x42, 0x02, 0x28, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x42, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x42, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x42, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x01, 0x08, 0x12, 0x03, 0x42, 0x13, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x02, 0x01, 0x08, - 0x06, 0x12, 0x03, 0x42, 0x14, 0x26, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, - 0x43, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x04, 0x12, 0x03, 0x43, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x06, 0x12, 0x03, 0x43, 0x0b, 0x10, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x43, 0x11, 0x17, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x43, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x02, 0x02, 0x03, 0x12, 0x03, 0x44, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, - 0x05, 0x12, 0x03, 0x44, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x01, 0x12, - 0x03, 0x44, 0x08, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x03, 0x12, 0x03, 0x44, - 0x26, 0x27, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x04, 0x12, 0x03, 0x45, 0x02, 0x16, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x04, 0x05, 0x12, 0x03, 0x45, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x04, 0x01, 0x12, 0x03, 0x45, 0x09, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x04, 0x03, 0x12, 0x03, 0x45, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, - 0x05, 0x12, 0x03, 0x46, 0x02, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x04, 0x12, - 0x03, 0x46, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x05, 0x12, 0x03, 0x46, - 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x01, 0x12, 0x03, 0x46, 0x12, 0x29, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x03, 0x12, 0x03, 0x46, 0x2c, 0x2d, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x49, 0x00, 0x4c, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, - 0x01, 0x12, 0x03, 0x49, 0x08, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, - 0x4a, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x4a, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4a, 0x0b, 0x12, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4a, 0x15, 0x16, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x4b, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x04, 0x12, 0x03, 0x4b, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, - 0x06, 0x12, 0x03, 0x4b, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x4b, 0x11, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x4b, - 0x1a, 0x1b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x4e, 0x00, 0x4f, 0x01, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x4e, 0x08, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, - 0x12, 0x04, 0x51, 0x00, 0x54, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x51, - 0x08, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x52, 0x02, 0x25, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x52, 0x02, 0x18, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x52, 0x19, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x52, 0x23, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, - 0x01, 0x12, 0x03, 0x53, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x04, 0x12, - 0x03, 0x53, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, 0x12, 0x03, 0x53, - 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x53, 0x11, 0x17, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x53, 0x1a, 0x1b, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x56, 0x00, 0x5c, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, - 0x01, 0x12, 0x03, 0x56, 0x08, 0x0d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, - 0x57, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x03, 0x57, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x57, 0x0b, 0x0e, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x57, 0x11, 0x12, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x58, 0x02, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x58, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x58, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x58, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x08, 0x12, 0x03, 0x58, - 0x1d, 0x31, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x06, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x58, 0x1e, - 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x02, 0x12, 0x03, 0x59, 0x02, 0x14, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x06, 0x12, 0x03, 0x59, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x59, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x02, 0x03, 0x12, 0x03, 0x59, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x03, - 0x12, 0x03, 0x5a, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x05, 0x12, 0x03, - 0x5a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x01, 0x12, 0x03, 0x5a, 0x09, - 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x03, 0x12, 0x03, 0x5a, 0x14, 0x15, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x04, 0x12, 0x03, 0x5b, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x06, 0x02, 0x04, 0x05, 0x12, 0x03, 0x5b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x04, 0x01, 0x12, 0x03, 0x5b, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x04, - 0x03, 0x12, 0x03, 0x5b, 0x10, 0x11, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, 0x5e, 0x00, - 0x68, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x5e, 0x08, 0x17, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x5f, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x07, 0x02, 0x00, 0x05, 0x12, 0x03, 0x5f, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x5f, 0x08, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x5f, 0x0f, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, 0x12, 0x03, 0x60, - 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, 0x12, 0x03, 0x60, 0x02, 0x07, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x03, 0x60, 0x08, 0x19, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x03, 0x60, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x07, 0x02, 0x02, 0x12, 0x03, 0x61, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, - 0x02, 0x05, 0x12, 0x03, 0x61, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x01, - 0x12, 0x03, 0x61, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x03, 0x12, 0x03, - 0x61, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x03, 0x12, 0x03, 0x62, 0x02, 0x2b, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x04, 0x12, 0x03, 0x62, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x05, 0x12, 0x03, 0x62, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x07, 0x02, 0x03, 0x01, 0x12, 0x03, 0x62, 0x11, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, - 0x02, 0x03, 0x03, 0x12, 0x03, 0x62, 0x29, 0x2a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x04, - 0x12, 0x03, 0x63, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x05, 0x12, 0x03, - 0x63, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x01, 0x12, 0x03, 0x63, 0x09, - 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x03, 0x12, 0x03, 0x63, 0x14, 0x15, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x08, 0x12, 0x03, 0x63, 0x16, 0x2a, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x07, 0x02, 0x04, 0x08, 0x06, 0x12, 0x03, 0x63, 0x17, 0x29, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x07, 0x02, 0x05, 0x12, 0x03, 0x64, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, - 0x05, 0x05, 0x12, 0x03, 0x64, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x05, 0x01, - 0x12, 0x03, 0x64, 0x07, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x05, 0x03, 0x12, 0x03, - 0x64, 0x11, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x06, 0x12, 0x03, 0x65, 0x02, 0x17, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x06, 0x05, 0x12, 0x03, 0x65, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x07, 0x02, 0x06, 0x01, 0x12, 0x03, 0x65, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x07, 0x02, 0x06, 0x03, 0x12, 0x03, 0x65, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, - 0x02, 0x07, 0x12, 0x03, 0x66, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x07, 0x05, - 0x12, 0x03, 0x66, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x07, 0x01, 0x12, 0x03, - 0x66, 0x08, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x07, 0x03, 0x12, 0x03, 0x66, 0x20, - 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x08, 0x12, 0x03, 0x67, 0x02, 0x26, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x07, 0x02, 0x08, 0x04, 0x12, 0x03, 0x67, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x07, 0x02, 0x08, 0x06, 0x12, 0x03, 0x67, 0x0b, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, - 0x02, 0x08, 0x01, 0x12, 0x03, 0x67, 0x1a, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x08, - 0x03, 0x12, 0x03, 0x67, 0x24, 0x25, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x6a, 0x00, - 0x6d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x6a, 0x08, 0x10, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x6b, 0x02, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x08, 0x02, 0x00, 0x05, 0x12, 0x03, 0x6b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x6b, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x6b, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x08, 0x12, 0x03, - 0x6b, 0x1d, 0x31, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x08, 0x02, 0x00, 0x08, 0x06, 0x12, 0x03, 0x6b, - 0x1e, 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x01, 0x12, 0x03, 0x6c, 0x02, 0x1d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x05, 0x12, 0x03, 0x6c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, 0x12, 0x03, 0x6c, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, 0x6c, 0x1b, 0x1c, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x09, 0x12, - 0x04, 0x6f, 0x00, 0x77, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x6f, 0x08, - 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x70, 0x02, 0x14, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x05, 0x12, 0x03, 0x70, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x70, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, - 0x02, 0x00, 0x03, 0x12, 0x03, 0x70, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x01, - 0x12, 0x03, 0x71, 0x02, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x05, 0x12, 0x03, - 0x71, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x01, 0x12, 0x03, 0x71, 0x09, - 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x03, 0x12, 0x03, 0x71, 0x1b, 0x1c, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x08, 0x12, 0x03, 0x71, 0x1d, 0x31, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x09, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x71, 0x1e, 0x30, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x09, 0x02, 0x02, 0x12, 0x03, 0x72, 0x02, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, - 0x02, 0x05, 0x12, 0x03, 0x72, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x01, - 0x12, 0x03, 0x72, 0x09, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x03, 0x12, 0x03, - 0x72, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x08, 0x12, 0x03, 0x72, 0x1c, - 0x30, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x09, 0x02, 0x02, 0x08, 0x06, 0x12, 0x03, 0x72, 0x1d, 0x2f, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x03, 0x12, 0x03, 0x73, 0x02, 0x31, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x09, 0x02, 0x03, 0x05, 0x12, 0x03, 0x73, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x09, 0x02, 0x03, 0x01, 0x12, 0x03, 0x73, 0x09, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, - 0x03, 0x03, 0x12, 0x03, 0x73, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x03, 0x08, - 0x12, 0x03, 0x73, 0x1c, 0x30, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x09, 0x02, 0x03, 0x08, 0x06, 0x12, - 0x03, 0x73, 0x1d, 0x2f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x04, 0x12, 0x03, 0x74, 0x02, - 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x04, 0x06, 0x12, 0x03, 0x74, 0x02, 0x20, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x04, 0x01, 0x12, 0x03, 0x74, 0x21, 0x3a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x09, 0x02, 0x04, 0x03, 0x12, 0x03, 0x74, 0x3d, 0x3e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x09, 0x02, 0x05, 0x12, 0x03, 0x75, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x05, - 0x06, 0x12, 0x03, 0x75, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x05, 0x01, 0x12, - 0x03, 0x75, 0x15, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x05, 0x03, 0x12, 0x03, 0x75, - 0x1f, 0x20, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x06, 0x12, 0x03, 0x76, 0x02, 0x1a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x06, 0x06, 0x12, 0x03, 0x76, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x09, 0x02, 0x06, 0x01, 0x12, 0x03, 0x76, 0x0c, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x09, 0x02, 0x06, 0x03, 0x12, 0x03, 0x76, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x02, 0x04, 0x0a, 0x12, - 0x05, 0x79, 0x00, 0x86, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0a, 0x01, 0x12, 0x03, 0x79, - 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0a, 0x04, 0x00, 0x12, 0x04, 0x7b, 0x02, 0x7f, 0x03, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0a, 0x04, 0x00, 0x01, 0x12, 0x03, 0x7b, 0x07, 0x13, 0x0a, 0x0d, - 0x0a, 0x06, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x7c, 0x04, 0x23, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x7c, 0x04, 0x1e, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x7c, 0x21, 0x22, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x7d, 0x04, 0x28, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x0a, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x7d, 0x04, 0x23, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x0a, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x7d, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x06, - 0x04, 0x0a, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x7e, 0x04, 0x28, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x0a, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x7e, 0x04, 0x23, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x0a, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x7e, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x0a, 0x02, 0x00, 0x12, 0x04, 0x81, 0x01, 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, - 0x00, 0x06, 0x12, 0x04, 0x81, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, - 0x01, 0x12, 0x04, 0x81, 0x01, 0x0f, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x03, - 0x12, 0x04, 0x81, 0x01, 0x20, 0x21, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0a, 0x08, 0x00, 0x12, 0x06, - 0x82, 0x01, 0x02, 0x85, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x08, 0x00, 0x01, 0x12, - 0x04, 0x82, 0x01, 0x08, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x01, 0x12, 0x04, 0x83, - 0x01, 0x04, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x01, 0x06, 0x12, 0x04, 0x83, 0x01, - 0x04, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x01, 0x01, 0x12, 0x04, 0x83, 0x01, 0x13, - 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x01, 0x03, 0x12, 0x04, 0x83, 0x01, 0x26, 0x27, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x02, 0x12, 0x04, 0x84, 0x01, 0x04, 0x28, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x02, 0x06, 0x12, 0x04, 0x84, 0x01, 0x04, 0x12, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0a, 0x02, 0x02, 0x01, 0x12, 0x04, 0x84, 0x01, 0x13, 0x23, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0a, 0x02, 0x02, 0x03, 0x12, 0x04, 0x84, 0x01, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x02, 0x04, - 0x0b, 0x12, 0x06, 0x88, 0x01, 0x00, 0x8b, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0b, 0x01, - 0x12, 0x04, 0x88, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x00, 0x12, 0x04, - 0x89, 0x01, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x05, 0x12, 0x04, 0x89, - 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x01, 0x12, 0x04, 0x89, 0x01, - 0x09, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x03, 0x12, 0x04, 0x89, 0x01, 0x16, - 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x1b, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x01, 0x06, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x0f, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x01, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x10, 0x16, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0b, 0x02, 0x01, 0x03, 0x12, 0x04, 0x8a, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x02, - 0x04, 0x0c, 0x12, 0x06, 0x8d, 0x01, 0x00, 0x90, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0c, - 0x01, 0x12, 0x04, 0x8d, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x00, 0x12, - 0x04, 0x8e, 0x01, 0x02, 0x2f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x04, 0x12, 0x04, - 0x8e, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x06, 0x12, 0x04, 0x8e, - 0x01, 0x0b, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8e, 0x01, - 0x1a, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x03, 0x12, 0x04, 0x8e, 0x01, 0x2d, - 0x2e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x01, 0x12, 0x04, 0x8f, 0x01, 0x02, 0x1c, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x04, 0x12, 0x04, 0x8f, 0x01, 0x02, 0x0a, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x06, 0x12, 0x04, 0x8f, 0x01, 0x0b, 0x10, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0c, 0x02, 0x01, 0x01, 0x12, 0x04, 0x8f, 0x01, 0x11, 0x17, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0c, 0x02, 0x01, 0x03, 0x12, 0x04, 0x8f, 0x01, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x02, 0x04, - 0x0d, 0x12, 0x06, 0x92, 0x01, 0x00, 0xa8, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0d, 0x01, - 0x12, 0x04, 0x92, 0x01, 0x08, 0x16, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0d, 0x04, 0x00, 0x12, 0x06, - 0x94, 0x01, 0x02, 0x9c, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x04, 0x00, 0x01, 0x12, - 0x04, 0x94, 0x01, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x00, 0x12, - 0x04, 0x95, 0x01, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x00, 0x01, - 0x12, 0x04, 0x95, 0x01, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x00, - 0x02, 0x12, 0x04, 0x95, 0x01, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, - 0x01, 0x12, 0x04, 0x96, 0x01, 0x04, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, - 0x01, 0x01, 0x12, 0x04, 0x96, 0x01, 0x04, 0x16, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, - 0x02, 0x01, 0x02, 0x12, 0x04, 0x96, 0x01, 0x19, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, - 0x00, 0x02, 0x02, 0x12, 0x04, 0x97, 0x01, 0x04, 0x1d, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, - 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, 0x97, 0x01, 0x04, 0x18, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, - 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x04, 0x97, 0x01, 0x1b, 0x1c, 0x0a, 0x0e, 0x0a, 0x06, 0x04, - 0x0d, 0x04, 0x00, 0x02, 0x03, 0x12, 0x04, 0x98, 0x01, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, - 0x0d, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x04, 0x98, 0x01, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, - 0x04, 0x0d, 0x04, 0x00, 0x02, 0x03, 0x02, 0x12, 0x04, 0x98, 0x01, 0x1d, 0x1e, 0x0a, 0x0e, 0x0a, - 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x04, 0x12, 0x04, 0x99, 0x01, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, - 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x04, 0x99, 0x01, 0x04, 0x15, 0x0a, 0x0f, - 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x04, 0x02, 0x12, 0x04, 0x99, 0x01, 0x18, 0x19, 0x0a, - 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x05, 0x12, 0x04, 0x9a, 0x01, 0x04, 0x1c, 0x0a, - 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x04, 0x9a, 0x01, 0x04, 0x17, - 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x05, 0x02, 0x12, 0x04, 0x9a, 0x01, 0x1a, - 0x1b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x06, 0x12, 0x04, 0x9b, 0x01, 0x04, - 0x1e, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x04, 0x9b, 0x01, - 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x06, 0x02, 0x12, 0x04, 0x9b, - 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x00, 0x12, 0x04, 0x9e, 0x01, 0x02, - 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x06, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x07, 0x0b, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9e, 0x01, 0x0e, 0x0f, 0x0a, 0x0e, - 0x0a, 0x04, 0x04, 0x0d, 0x08, 0x00, 0x12, 0x06, 0xa0, 0x01, 0x02, 0xa7, 0x01, 0x03, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0d, 0x08, 0x00, 0x01, 0x12, 0x04, 0xa0, 0x01, 0x08, 0x0e, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0xa1, 0x01, 0x04, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0d, 0x02, 0x01, 0x06, 0x12, 0x04, 0xa1, 0x01, 0x04, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, - 0x02, 0x01, 0x01, 0x12, 0x04, 0xa1, 0x01, 0x11, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, - 0x01, 0x03, 0x12, 0x04, 0xa1, 0x01, 0x21, 0x22, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x02, - 0x12, 0x04, 0xa2, 0x01, 0x04, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x06, 0x12, - 0x04, 0xa2, 0x01, 0x04, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x01, 0x12, 0x04, - 0xa2, 0x01, 0x13, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x03, 0x12, 0x04, 0xa2, - 0x01, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x03, 0x12, 0x04, 0xa3, 0x01, 0x04, - 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x06, 0x12, 0x04, 0xa3, 0x01, 0x04, 0x13, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x01, 0x12, 0x04, 0xa3, 0x01, 0x14, 0x25, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x03, 0x12, 0x04, 0xa3, 0x01, 0x28, 0x29, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x04, 0x12, 0x04, 0xa4, 0x01, 0x04, 0x21, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0d, 0x02, 0x04, 0x06, 0x12, 0x04, 0xa4, 0x01, 0x04, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0d, 0x02, 0x04, 0x01, 0x12, 0x04, 0xa4, 0x01, 0x10, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, - 0x02, 0x04, 0x03, 0x12, 0x04, 0xa4, 0x01, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, - 0x05, 0x12, 0x04, 0xa5, 0x01, 0x04, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x06, - 0x12, 0x04, 0xa5, 0x01, 0x04, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x01, 0x12, - 0x04, 0xa5, 0x01, 0x12, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, 0x03, 0x12, 0x04, - 0xa5, 0x01, 0x23, 0x24, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x06, 0x12, 0x04, 0xa6, 0x01, - 0x04, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, 0x06, 0x12, 0x04, 0xa6, 0x01, 0x04, - 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, 0x01, 0x12, 0x04, 0xa6, 0x01, 0x13, 0x23, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, 0x03, 0x12, 0x04, 0xa6, 0x01, 0x26, 0x27, 0x0a, - 0x0c, 0x0a, 0x02, 0x04, 0x0e, 0x12, 0x06, 0xaa, 0x01, 0x00, 0xae, 0x01, 0x01, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x0e, 0x01, 0x12, 0x04, 0xaa, 0x01, 0x08, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, - 0x02, 0x00, 0x12, 0x04, 0xab, 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, - 0x05, 0x12, 0x04, 0xab, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x01, - 0x12, 0x04, 0xab, 0x01, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x03, 0x12, - 0x04, 0xab, 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x01, 0x12, 0x04, 0xac, - 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x05, 0x12, 0x04, 0xac, 0x01, - 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x01, 0x12, 0x04, 0xac, 0x01, 0x08, - 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x03, 0x12, 0x04, 0xac, 0x01, 0x19, 0x1a, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x02, 0x12, 0x04, 0xad, 0x01, 0x02, 0x1a, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x06, 0x12, 0x04, 0xad, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0e, 0x02, 0x02, 0x01, 0x12, 0x04, 0xad, 0x01, 0x0f, 0x15, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0e, 0x02, 0x02, 0x03, 0x12, 0x04, 0xad, 0x01, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x02, 0x04, - 0x0f, 0x12, 0x06, 0xb0, 0x01, 0x00, 0xb5, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0f, 0x01, - 0x12, 0x04, 0xb0, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x00, 0x12, 0x04, - 0xb1, 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x05, 0x12, 0x04, 0xb1, - 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb1, 0x01, - 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb1, 0x01, 0x13, - 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x01, 0x12, 0x04, 0xb2, 0x01, 0x02, 0x1b, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x05, 0x12, 0x04, 0xb2, 0x01, 0x02, 0x07, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb2, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0f, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb2, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x0f, 0x02, 0x02, 0x12, 0x04, 0xb3, 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, - 0x02, 0x02, 0x06, 0x12, 0x04, 0xb3, 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, - 0x02, 0x01, 0x12, 0x04, 0xb3, 0x01, 0x10, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x02, - 0x03, 0x12, 0x04, 0xb3, 0x01, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x03, 0x12, - 0x04, 0xb4, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, 0x05, 0x12, 0x04, - 0xb4, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, 0x01, 0x12, 0x04, 0xb4, - 0x01, 0x09, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, 0x03, 0x12, 0x04, 0xb4, 0x01, - 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x10, 0x12, 0x06, 0xb7, 0x01, 0x00, 0xbc, 0x01, 0x01, - 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x10, 0x01, 0x12, 0x04, 0xb7, 0x01, 0x08, 0x17, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x10, 0x02, 0x00, 0x12, 0x04, 0xb8, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x10, 0x02, 0x00, 0x05, 0x12, 0x04, 0xb8, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, - 0x02, 0x00, 0x01, 0x12, 0x04, 0xb8, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, - 0x00, 0x03, 0x12, 0x04, 0xb8, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x01, - 0x12, 0x04, 0xb9, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x05, 0x12, - 0x04, 0xb9, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x01, 0x12, 0x04, - 0xb9, 0x01, 0x09, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb9, - 0x01, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x02, 0x12, 0x04, 0xba, 0x01, 0x02, - 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x02, 0x05, 0x12, 0x04, 0xba, 0x01, 0x02, 0x08, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x02, 0x01, 0x12, 0x04, 0xba, 0x01, 0x09, 0x0c, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x02, 0x03, 0x12, 0x04, 0xba, 0x01, 0x0f, 0x10, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x10, 0x02, 0x03, 0x12, 0x04, 0xbb, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x10, 0x02, 0x03, 0x06, 0x12, 0x04, 0xbb, 0x01, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x10, 0x02, 0x03, 0x01, 0x12, 0x04, 0xbb, 0x01, 0x12, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, - 0x02, 0x03, 0x03, 0x12, 0x04, 0xbb, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x11, 0x12, - 0x06, 0xbe, 0x01, 0x00, 0xc1, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x11, 0x01, 0x12, 0x04, - 0xbe, 0x01, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x11, 0x02, 0x00, 0x12, 0x04, 0xbf, 0x01, - 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x05, 0x12, 0x04, 0xbf, 0x01, 0x02, - 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x01, 0x12, 0x04, 0xbf, 0x01, 0x09, 0x0c, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x03, 0x12, 0x04, 0xbf, 0x01, 0x0f, 0x10, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x11, 0x02, 0x01, 0x12, 0x04, 0xc0, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x11, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc0, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x11, 0x02, 0x01, 0x01, 0x12, 0x04, 0xc0, 0x01, 0x09, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x11, 0x02, 0x01, 0x03, 0x12, 0x04, 0xc0, 0x01, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x12, - 0x12, 0x06, 0xc3, 0x01, 0x00, 0xc7, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x12, 0x01, 0x12, - 0x04, 0xc3, 0x01, 0x08, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x12, 0x02, 0x00, 0x12, 0x04, 0xc4, - 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x05, 0x12, 0x04, 0xc4, 0x01, - 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0xc4, 0x01, 0x09, - 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc4, 0x01, 0x13, 0x14, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x12, 0x02, 0x01, 0x12, 0x04, 0xc5, 0x01, 0x02, 0x1b, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc5, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x12, 0x02, 0x01, 0x01, 0x12, 0x04, 0xc5, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x12, 0x02, 0x01, 0x03, 0x12, 0x04, 0xc5, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x12, 0x02, 0x02, 0x12, 0x04, 0xc6, 0x01, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, - 0x02, 0x06, 0x12, 0x04, 0xc6, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x02, - 0x01, 0x12, 0x04, 0xc6, 0x01, 0x15, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x02, 0x03, - 0x12, 0x04, 0xc6, 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x13, 0x12, 0x06, 0xc9, 0x01, - 0x00, 0xcf, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x13, 0x01, 0x12, 0x04, 0xc9, 0x01, 0x08, - 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x00, 0x12, 0x04, 0xca, 0x01, 0x02, 0x15, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x05, 0x12, 0x04, 0xca, 0x01, 0x02, 0x08, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x01, 0x12, 0x04, 0xca, 0x01, 0x09, 0x10, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x13, 0x02, 0x00, 0x03, 0x12, 0x04, 0xca, 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x13, 0x02, 0x01, 0x12, 0x04, 0xcb, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, - 0x02, 0x01, 0x05, 0x12, 0x04, 0xcb, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, - 0x01, 0x01, 0x12, 0x04, 0xcb, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, - 0x03, 0x12, 0x04, 0xcb, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x02, 0x12, - 0x04, 0xcc, 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x02, 0x06, 0x12, 0x04, - 0xcc, 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x02, 0x01, 0x12, 0x04, 0xcc, - 0x01, 0x10, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x02, 0x03, 0x12, 0x04, 0xcc, 0x01, - 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x02, 0x16, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x03, 0x05, 0x12, 0x04, 0xcd, 0x01, 0x02, 0x08, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x03, 0x01, 0x12, 0x04, 0xcd, 0x01, 0x09, 0x11, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x13, 0x02, 0x03, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x14, 0x15, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x13, 0x02, 0x04, 0x12, 0x04, 0xce, 0x01, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x13, 0x02, 0x04, 0x05, 0x12, 0x04, 0xce, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, - 0x02, 0x04, 0x01, 0x12, 0x04, 0xce, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, - 0x04, 0x03, 0x12, 0x04, 0xce, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x14, 0x12, 0x06, - 0xd1, 0x01, 0x00, 0xd6, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x14, 0x01, 0x12, 0x04, 0xd1, - 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x00, 0x12, 0x04, 0xd2, 0x01, 0x02, - 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x05, 0x12, 0x04, 0xd2, 0x01, 0x02, 0x08, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x01, 0x12, 0x04, 0xd2, 0x01, 0x09, 0x0c, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x03, 0x12, 0x04, 0xd2, 0x01, 0x0f, 0x10, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x14, 0x02, 0x01, 0x12, 0x04, 0xd3, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x14, 0x02, 0x01, 0x05, 0x12, 0x04, 0xd3, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x14, 0x02, 0x01, 0x01, 0x12, 0x04, 0xd3, 0x01, 0x09, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, - 0x02, 0x01, 0x03, 0x12, 0x04, 0xd3, 0x01, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x14, 0x02, - 0x02, 0x12, 0x04, 0xd4, 0x01, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x02, 0x05, - 0x12, 0x04, 0xd4, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x02, 0x01, 0x12, - 0x04, 0xd4, 0x01, 0x09, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x02, 0x03, 0x12, 0x04, - 0xd4, 0x01, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x03, 0x12, 0x04, 0xd5, 0x01, - 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x03, 0x05, 0x12, 0x04, 0xd5, 0x01, 0x02, - 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x03, 0x01, 0x12, 0x04, 0xd5, 0x01, 0x09, 0x13, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x03, 0x03, 0x12, 0x04, 0xd5, 0x01, 0x16, 0x17, 0x0a, - 0x0c, 0x0a, 0x02, 0x04, 0x15, 0x12, 0x06, 0xd8, 0x01, 0x00, 0xdd, 0x01, 0x01, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x15, 0x01, 0x12, 0x04, 0xd8, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x15, - 0x02, 0x00, 0x12, 0x04, 0xd9, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, - 0x05, 0x12, 0x04, 0xd9, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x01, - 0x12, 0x04, 0xd9, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x03, 0x12, - 0x04, 0xd9, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x15, 0x02, 0x01, 0x12, 0x04, 0xda, - 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x01, 0x05, 0x12, 0x04, 0xda, 0x01, - 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x01, 0x01, 0x12, 0x04, 0xda, 0x01, 0x09, - 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x01, 0x03, 0x12, 0x04, 0xda, 0x01, 0x12, 0x13, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x15, 0x02, 0x02, 0x12, 0x04, 0xdb, 0x01, 0x02, 0x11, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x15, 0x02, 0x02, 0x05, 0x12, 0x04, 0xdb, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x15, 0x02, 0x02, 0x01, 0x12, 0x04, 0xdb, 0x01, 0x09, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x15, 0x02, 0x02, 0x03, 0x12, 0x04, 0xdb, 0x01, 0x0f, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x15, 0x02, 0x03, 0x12, 0x04, 0xdc, 0x01, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, - 0x03, 0x06, 0x12, 0x04, 0xdc, 0x01, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x03, - 0x01, 0x12, 0x04, 0xdc, 0x01, 0x11, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x03, 0x03, - 0x12, 0x04, 0xdc, 0x01, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x16, 0x12, 0x06, 0xdf, 0x01, - 0x00, 0xf2, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x16, 0x01, 0x12, 0x04, 0xdf, 0x01, 0x08, - 0x1a, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x16, 0x04, 0x00, 0x12, 0x06, 0xe0, 0x01, 0x02, 0xe7, 0x01, - 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x04, 0x00, 0x01, 0x12, 0x04, 0xe0, 0x01, 0x07, 0x0b, - 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0xe1, 0x01, 0x04, 0x19, - 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe1, 0x01, 0x04, - 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0xe1, 0x01, - 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0xe2, 0x01, - 0x04, 0x24, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xe2, - 0x01, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, - 0xe2, 0x01, 0x22, 0x23, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x02, 0x12, 0x04, - 0xe3, 0x01, 0x04, 0x1c, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, - 0x04, 0xe3, 0x01, 0x04, 0x17, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x02, 0x02, - 0x12, 0x04, 0xe3, 0x01, 0x1a, 0x1b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x03, - 0x12, 0x04, 0xe4, 0x01, 0x04, 0x23, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x03, - 0x01, 0x12, 0x04, 0xe4, 0x01, 0x04, 0x1e, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, - 0x03, 0x02, 0x12, 0x04, 0xe4, 0x01, 0x21, 0x22, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, - 0x02, 0x04, 0x12, 0x04, 0xe5, 0x01, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, - 0x02, 0x04, 0x01, 0x12, 0x04, 0xe5, 0x01, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, - 0x00, 0x02, 0x04, 0x02, 0x12, 0x04, 0xe5, 0x01, 0x1d, 0x1e, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, - 0x04, 0x00, 0x02, 0x05, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x1e, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, - 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, - 0x16, 0x04, 0x00, 0x02, 0x05, 0x02, 0x12, 0x04, 0xe6, 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x16, 0x02, 0x00, 0x12, 0x04, 0xe9, 0x01, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, - 0x02, 0x00, 0x06, 0x12, 0x04, 0xe9, 0x01, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, - 0x00, 0x01, 0x12, 0x04, 0xe9, 0x01, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, - 0x03, 0x12, 0x04, 0xe9, 0x01, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x16, 0x08, 0x00, 0x12, - 0x06, 0xeb, 0x01, 0x02, 0xf1, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x08, 0x00, 0x01, - 0x12, 0x04, 0xeb, 0x01, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x01, 0x12, 0x04, - 0xec, 0x01, 0x04, 0x34, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x06, 0x12, 0x04, 0xec, - 0x01, 0x04, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x01, 0x12, 0x04, 0xec, 0x01, - 0x19, 0x2f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x03, 0x12, 0x04, 0xec, 0x01, 0x32, - 0x33, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x02, 0x12, 0x04, 0xed, 0x01, 0x04, 0x25, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x02, 0x06, 0x12, 0x04, 0xed, 0x01, 0x04, 0x11, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x16, 0x02, 0x02, 0x01, 0x12, 0x04, 0xed, 0x01, 0x12, 0x20, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x16, 0x02, 0x02, 0x03, 0x12, 0x04, 0xed, 0x01, 0x23, 0x24, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x16, 0x02, 0x03, 0x12, 0x04, 0xee, 0x01, 0x04, 0x32, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, - 0x02, 0x03, 0x06, 0x12, 0x04, 0xee, 0x01, 0x04, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, - 0x03, 0x01, 0x12, 0x04, 0xee, 0x01, 0x18, 0x2d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x03, - 0x03, 0x12, 0x04, 0xee, 0x01, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x04, 0x12, - 0x04, 0xef, 0x01, 0x04, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x04, 0x06, 0x12, 0x04, - 0xef, 0x01, 0x04, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x04, 0x01, 0x12, 0x04, 0xef, - 0x01, 0x14, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x04, 0x03, 0x12, 0x04, 0xef, 0x01, - 0x28, 0x29, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x05, 0x12, 0x04, 0xf0, 0x01, 0x04, 0x29, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x05, 0x06, 0x12, 0x04, 0xf0, 0x01, 0x04, 0x13, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x05, 0x01, 0x12, 0x04, 0xf0, 0x01, 0x14, 0x24, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x16, 0x02, 0x05, 0x03, 0x12, 0x04, 0xf0, 0x01, 0x27, 0x28, 0x0a, 0x0c, 0x0a, - 0x02, 0x04, 0x17, 0x12, 0x06, 0xf4, 0x01, 0x00, 0xf9, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, - 0x17, 0x01, 0x12, 0x04, 0xf4, 0x01, 0x08, 0x1c, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, 0x02, 0x00, - 0x12, 0x04, 0xf5, 0x01, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x00, 0x06, 0x12, - 0x04, 0xf5, 0x01, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x00, 0x01, 0x12, 0x04, - 0xf5, 0x01, 0x12, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf5, - 0x01, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, 0x02, 0x01, 0x12, 0x04, 0xf6, 0x01, 0x02, - 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x04, 0x12, 0x04, 0xf6, 0x01, 0x02, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x06, 0x12, 0x04, 0xf6, 0x01, 0x0b, 0x13, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x01, 0x12, 0x04, 0xf6, 0x01, 0x14, 0x22, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x03, 0x12, 0x04, 0xf6, 0x01, 0x25, 0x26, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x17, 0x02, 0x02, 0x12, 0x04, 0xf7, 0x01, 0x02, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x17, 0x02, 0x02, 0x04, 0x12, 0x04, 0xf7, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, - 0x02, 0x02, 0x05, 0x12, 0x04, 0xf7, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, - 0x02, 0x01, 0x12, 0x04, 0xf7, 0x01, 0x12, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x02, - 0x03, 0x12, 0x04, 0xf7, 0x01, 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, 0x02, 0x03, 0x12, - 0x04, 0xf8, 0x01, 0x02, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x03, 0x05, 0x12, 0x04, - 0xf8, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x03, 0x01, 0x12, 0x04, 0xf8, - 0x01, 0x09, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x03, 0x03, 0x12, 0x04, 0xf8, 0x01, - 0x21, 0x22, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x18, 0x12, 0x06, 0xfb, 0x01, 0x00, 0xfe, 0x01, 0x01, - 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x18, 0x01, 0x12, 0x04, 0xfb, 0x01, 0x08, 0x1a, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x18, 0x02, 0x00, 0x12, 0x04, 0xfc, 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x18, 0x02, 0x00, 0x05, 0x12, 0x04, 0xfc, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, - 0x02, 0x00, 0x01, 0x12, 0x04, 0xfc, 0x01, 0x08, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, - 0x00, 0x03, 0x12, 0x04, 0xfc, 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x18, 0x02, 0x01, - 0x12, 0x04, 0xfd, 0x01, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, 0x06, 0x12, - 0x04, 0xfd, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, 0x01, 0x12, 0x04, - 0xfd, 0x01, 0x0f, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, 0x03, 0x12, 0x04, 0xfd, - 0x01, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x19, 0x12, 0x06, 0x80, 0x02, 0x00, 0x84, 0x02, - 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x19, 0x01, 0x12, 0x04, 0x80, 0x02, 0x08, 0x15, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x19, 0x02, 0x00, 0x12, 0x04, 0x81, 0x02, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x19, 0x02, 0x00, 0x06, 0x12, 0x04, 0x81, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x19, 0x02, 0x00, 0x01, 0x12, 0x04, 0x81, 0x02, 0x15, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, - 0x02, 0x00, 0x03, 0x12, 0x04, 0x81, 0x02, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x19, 0x02, - 0x01, 0x12, 0x04, 0x82, 0x02, 0x02, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x01, 0x04, - 0x12, 0x04, 0x82, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x01, 0x06, 0x12, - 0x04, 0x82, 0x02, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x01, 0x01, 0x12, 0x04, - 0x82, 0x02, 0x14, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x01, 0x03, 0x12, 0x04, 0x82, - 0x02, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x19, 0x02, 0x02, 0x12, 0x04, 0x83, 0x02, 0x02, - 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x04, 0x12, 0x04, 0x83, 0x02, 0x02, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x05, 0x12, 0x04, 0x83, 0x02, 0x0b, 0x11, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x01, 0x12, 0x04, 0x83, 0x02, 0x12, 0x1b, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x03, 0x12, 0x04, 0x83, 0x02, 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, - 0x02, 0x04, 0x1a, 0x12, 0x06, 0x86, 0x02, 0x00, 0x89, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, - 0x1a, 0x01, 0x12, 0x04, 0x86, 0x02, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x00, - 0x12, 0x04, 0x87, 0x02, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x05, 0x12, - 0x04, 0x87, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x01, 0x12, 0x04, - 0x87, 0x02, 0x09, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x03, 0x12, 0x04, 0x87, - 0x02, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x01, 0x12, 0x04, 0x88, 0x02, 0x02, - 0x3e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x04, 0x12, 0x04, 0x88, 0x02, 0x02, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x06, 0x12, 0x04, 0x88, 0x02, 0x0b, 0x25, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x01, 0x12, 0x04, 0x88, 0x02, 0x26, 0x39, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x03, 0x12, 0x04, 0x88, 0x02, 0x3c, 0x3d, 0x0a, 0x0c, 0x0a, - 0x02, 0x04, 0x1b, 0x12, 0x06, 0x8b, 0x02, 0x00, 0x96, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, - 0x1b, 0x01, 0x12, 0x04, 0x8b, 0x02, 0x08, 0x22, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1b, 0x04, 0x00, - 0x12, 0x06, 0x8c, 0x02, 0x02, 0x8f, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x04, 0x00, - 0x01, 0x12, 0x04, 0x8c, 0x02, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1b, 0x04, 0x00, 0x02, - 0x00, 0x12, 0x04, 0x8d, 0x02, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1b, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x12, 0x04, 0x8d, 0x02, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1b, 0x04, 0x00, - 0x02, 0x00, 0x02, 0x12, 0x04, 0x8d, 0x02, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1b, 0x04, - 0x00, 0x02, 0x01, 0x12, 0x04, 0x8e, 0x02, 0x04, 0x24, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1b, 0x04, - 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0x8e, 0x02, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1b, - 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0x8e, 0x02, 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x1b, 0x02, 0x00, 0x12, 0x04, 0x91, 0x02, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, - 0x00, 0x06, 0x12, 0x04, 0x91, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, - 0x01, 0x12, 0x04, 0x91, 0x02, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x03, - 0x12, 0x04, 0x91, 0x02, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1b, 0x08, 0x00, 0x12, 0x06, - 0x93, 0x02, 0x02, 0x95, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x08, 0x00, 0x01, 0x12, - 0x04, 0x93, 0x02, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x01, 0x12, 0x04, 0x94, - 0x02, 0x04, 0x34, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x06, 0x12, 0x04, 0x94, 0x02, - 0x04, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x01, 0x12, 0x04, 0x94, 0x02, 0x19, - 0x2f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x03, 0x12, 0x04, 0x94, 0x02, 0x32, 0x33, - 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1c, 0x12, 0x06, 0x98, 0x02, 0x00, 0x9a, 0x02, 0x01, 0x0a, 0x0b, - 0x0a, 0x03, 0x04, 0x1c, 0x01, 0x12, 0x04, 0x98, 0x02, 0x08, 0x1b, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x1c, 0x02, 0x00, 0x12, 0x04, 0x99, 0x02, 0x02, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1c, 0x02, - 0x00, 0x04, 0x12, 0x04, 0x99, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1c, 0x02, 0x00, - 0x06, 0x12, 0x04, 0x99, 0x02, 0x0b, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1c, 0x02, 0x00, 0x01, - 0x12, 0x04, 0x99, 0x02, 0x1e, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1c, 0x02, 0x00, 0x03, 0x12, - 0x04, 0x99, 0x02, 0x28, 0x29, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1d, 0x12, 0x06, 0x9c, 0x02, 0x00, - 0x9f, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1d, 0x01, 0x12, 0x04, 0x9c, 0x02, 0x08, 0x1a, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1d, 0x02, 0x00, 0x12, 0x04, 0x9d, 0x02, 0x02, 0x15, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1d, 0x02, 0x00, 0x05, 0x12, 0x04, 0x9d, 0x02, 0x02, 0x07, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x1d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9d, 0x02, 0x08, 0x10, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x1d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9d, 0x02, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x1d, 0x02, 0x01, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1d, 0x02, - 0x01, 0x06, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1d, 0x02, 0x01, - 0x01, 0x12, 0x04, 0x9e, 0x02, 0x0d, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1d, 0x02, 0x01, 0x03, - 0x12, 0x04, 0x9e, 0x02, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1e, 0x12, 0x06, 0xa1, 0x02, - 0x00, 0xa7, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1e, 0x01, 0x12, 0x04, 0xa1, 0x02, 0x08, - 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x00, 0x12, 0x04, 0xa2, 0x02, 0x02, 0x15, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x00, 0x05, 0x12, 0x04, 0xa2, 0x02, 0x02, 0x08, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x00, 0x01, 0x12, 0x04, 0xa2, 0x02, 0x09, 0x10, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x1e, 0x02, 0x00, 0x03, 0x12, 0x04, 0xa2, 0x02, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x1e, 0x02, 0x01, 0x12, 0x04, 0xa3, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, - 0x02, 0x01, 0x05, 0x12, 0x04, 0xa3, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, - 0x01, 0x01, 0x12, 0x04, 0xa3, 0x02, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x01, - 0x03, 0x12, 0x04, 0xa3, 0x02, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x02, 0x12, - 0x04, 0xa4, 0x02, 0x02, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x04, 0x12, 0x04, - 0xa4, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x06, 0x12, 0x04, 0xa4, - 0x02, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x01, 0x12, 0x04, 0xa4, 0x02, - 0x18, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x03, 0x12, 0x04, 0xa4, 0x02, 0x22, - 0x23, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x03, 0x12, 0x04, 0xa5, 0x02, 0x02, 0x2e, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x03, 0x04, 0x12, 0x04, 0xa5, 0x02, 0x02, 0x0a, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x03, 0x06, 0x12, 0x04, 0xa5, 0x02, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x1e, 0x02, 0x03, 0x01, 0x12, 0x04, 0xa5, 0x02, 0x18, 0x29, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x1e, 0x02, 0x03, 0x03, 0x12, 0x04, 0xa5, 0x02, 0x2c, 0x2d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x1e, 0x02, 0x04, 0x12, 0x04, 0xa6, 0x02, 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, - 0x04, 0x04, 0x12, 0x04, 0xa6, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x04, - 0x06, 0x12, 0x04, 0xa6, 0x02, 0x0b, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x04, 0x01, - 0x12, 0x04, 0xa6, 0x02, 0x16, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x04, 0x03, 0x12, - 0x04, 0xa6, 0x02, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1f, 0x12, 0x06, 0xa8, 0x02, 0x00, - 0xb5, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1f, 0x01, 0x12, 0x04, 0xa8, 0x02, 0x08, 0x14, - 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1f, 0x04, 0x00, 0x12, 0x06, 0xa9, 0x02, 0x02, 0xae, 0x02, 0x03, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x04, 0x00, 0x01, 0x12, 0x04, 0xa9, 0x02, 0x07, 0x11, 0x0a, - 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0xaa, 0x02, 0x04, 0x1f, 0x0a, - 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xaa, 0x02, 0x04, 0x1a, - 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0xaa, 0x02, 0x1d, - 0x1e, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0xab, 0x02, 0x04, - 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xab, 0x02, - 0x04, 0x16, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0xab, - 0x02, 0x19, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x02, 0x12, 0x04, 0xac, - 0x02, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, - 0xac, 0x02, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, - 0x04, 0xac, 0x02, 0x18, 0x19, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x03, 0x12, - 0x04, 0xad, 0x02, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x03, 0x01, - 0x12, 0x04, 0xad, 0x02, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x03, - 0x02, 0x12, 0x04, 0xad, 0x02, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x00, 0x12, - 0x04, 0xaf, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x00, 0x05, 0x12, 0x04, - 0xaf, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x00, 0x01, 0x12, 0x04, 0xaf, - 0x02, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x00, 0x03, 0x12, 0x04, 0xaf, 0x02, - 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x01, 0x12, 0x04, 0xb0, 0x02, 0x02, 0x29, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x01, 0x06, 0x12, 0x04, 0xb0, 0x02, 0x02, 0x19, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb0, 0x02, 0x1a, 0x24, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb0, 0x02, 0x27, 0x28, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x1f, 0x02, 0x02, 0x12, 0x04, 0xb1, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x1f, 0x02, 0x02, 0x05, 0x12, 0x04, 0xb1, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, - 0x02, 0x02, 0x01, 0x12, 0x04, 0xb1, 0x02, 0x07, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, - 0x02, 0x03, 0x12, 0x04, 0xb1, 0x02, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x03, - 0x12, 0x04, 0xb2, 0x02, 0x02, 0x40, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, 0x04, 0x12, - 0x04, 0xb2, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, 0x06, 0x12, 0x04, - 0xb2, 0x02, 0x0b, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, 0x01, 0x12, 0x04, 0xb2, - 0x02, 0x28, 0x3b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, 0x03, 0x12, 0x04, 0xb2, 0x02, - 0x3e, 0x3f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x04, 0x12, 0x04, 0xb3, 0x02, 0x02, 0x1f, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x04, 0x12, 0x04, 0xb3, 0x02, 0x02, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x06, 0x12, 0x04, 0xb3, 0x02, 0x0b, 0x13, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x01, 0x12, 0x04, 0xb3, 0x02, 0x14, 0x1a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x1f, 0x02, 0x04, 0x03, 0x12, 0x04, 0xb3, 0x02, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x1f, 0x02, 0x05, 0x12, 0x04, 0xb4, 0x02, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, - 0x02, 0x05, 0x04, 0x12, 0x04, 0xb4, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, - 0x05, 0x06, 0x12, 0x04, 0xb4, 0x02, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x05, - 0x01, 0x12, 0x04, 0xb4, 0x02, 0x14, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x05, 0x03, - 0x12, 0x04, 0xb4, 0x02, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x20, 0x12, 0x06, 0xb7, 0x02, - 0x00, 0xbd, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x20, 0x01, 0x12, 0x04, 0xb7, 0x02, 0x08, - 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x20, 0x02, 0x00, 0x12, 0x04, 0xb8, 0x02, 0x02, 0x12, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x00, 0x05, 0x12, 0x04, 0xb8, 0x02, 0x02, 0x08, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x20, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb8, 0x02, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x20, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb8, 0x02, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x20, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, - 0x02, 0x01, 0x05, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, - 0x01, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x07, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x01, - 0x03, 0x12, 0x04, 0xb9, 0x02, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x20, 0x02, 0x02, 0x12, - 0x04, 0xba, 0x02, 0x02, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x04, 0x12, 0x04, - 0xba, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x06, 0x12, 0x04, 0xba, - 0x02, 0x0b, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x01, 0x12, 0x04, 0xba, 0x02, - 0x17, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x03, 0x12, 0x04, 0xba, 0x02, 0x23, - 0x24, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x20, 0x02, 0x03, 0x12, 0x04, 0xbb, 0x02, 0x02, 0x3e, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x03, 0x04, 0x12, 0x04, 0xbb, 0x02, 0x02, 0x0a, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x20, 0x02, 0x03, 0x06, 0x12, 0x04, 0xbb, 0x02, 0x0b, 0x25, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x20, 0x02, 0x03, 0x01, 0x12, 0x04, 0xbb, 0x02, 0x26, 0x39, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x20, 0x02, 0x03, 0x03, 0x12, 0x04, 0xbb, 0x02, 0x3c, 0x3d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x20, 0x02, 0x04, 0x12, 0x04, 0xbc, 0x02, 0x02, 0x26, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, - 0x04, 0x04, 0x12, 0x04, 0xbc, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x04, - 0x06, 0x12, 0x04, 0xbc, 0x02, 0x0b, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x04, 0x01, - 0x12, 0x04, 0xbc, 0x02, 0x1b, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x04, 0x03, 0x12, - 0x04, 0xbc, 0x02, 0x24, 0x25, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x21, 0x12, 0x06, 0xbf, 0x02, 0x00, - 0xc2, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x21, 0x01, 0x12, 0x04, 0xbf, 0x02, 0x08, 0x22, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x21, 0x02, 0x00, 0x12, 0x04, 0xc0, 0x02, 0x02, 0x27, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x21, 0x02, 0x00, 0x04, 0x12, 0x04, 0xc0, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x21, 0x02, 0x00, 0x06, 0x12, 0x04, 0xc0, 0x02, 0x0b, 0x16, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x21, 0x02, 0x00, 0x01, 0x12, 0x04, 0xc0, 0x02, 0x17, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x21, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc0, 0x02, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x21, - 0x02, 0x01, 0x12, 0x04, 0xc1, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, 0x01, - 0x05, 0x12, 0x04, 0xc1, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, 0x01, 0x01, - 0x12, 0x04, 0xc1, 0x02, 0x07, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, 0x01, 0x03, 0x12, - 0x04, 0xc1, 0x02, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x22, 0x12, 0x06, 0xc4, 0x02, 0x00, - 0xc7, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x22, 0x01, 0x12, 0x04, 0xc4, 0x02, 0x08, 0x17, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x22, 0x02, 0x00, 0x12, 0x04, 0xc5, 0x02, 0x02, 0x12, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x22, 0x02, 0x00, 0x05, 0x12, 0x04, 0xc5, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x22, 0x02, 0x00, 0x01, 0x12, 0x04, 0xc5, 0x02, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x22, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc5, 0x02, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x22, 0x02, 0x01, 0x12, 0x04, 0xc6, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x22, 0x02, - 0x01, 0x06, 0x12, 0x04, 0xc6, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x22, 0x02, 0x01, - 0x01, 0x12, 0x04, 0xc6, 0x02, 0x0b, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x22, 0x02, 0x01, 0x03, - 0x12, 0x04, 0xc6, 0x02, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x23, 0x12, 0x06, 0xc9, 0x02, - 0x00, 0xcb, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x23, 0x01, 0x12, 0x04, 0xc9, 0x02, 0x08, - 0x24, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x23, 0x02, 0x00, 0x12, 0x04, 0xca, 0x02, 0x02, 0x27, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x23, 0x02, 0x00, 0x04, 0x12, 0x04, 0xca, 0x02, 0x02, 0x0a, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x23, 0x02, 0x00, 0x06, 0x12, 0x04, 0xca, 0x02, 0x0b, 0x16, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x23, 0x02, 0x00, 0x01, 0x12, 0x04, 0xca, 0x02, 0x17, 0x22, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x23, 0x02, 0x00, 0x03, 0x12, 0x04, 0xca, 0x02, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x02, 0x05, - 0x00, 0x12, 0x06, 0xcd, 0x02, 0x00, 0xdd, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x05, 0x00, 0x01, - 0x12, 0x04, 0xcd, 0x02, 0x05, 0x0e, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x04, - 0xce, 0x02, 0x02, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xce, - 0x02, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0xce, 0x02, - 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x04, 0xcf, 0x02, 0x02, 0x16, - 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xcf, 0x02, 0x02, 0x11, 0x0a, - 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0xcf, 0x02, 0x14, 0x15, 0x0a, 0x0c, - 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x04, 0xd0, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, 0xd0, 0x02, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x02, 0x02, 0x12, 0x04, 0xd0, 0x02, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x03, 0x12, 0x04, 0xd1, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, - 0x01, 0x12, 0x04, 0xd1, 0x02, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, - 0x12, 0x04, 0xd1, 0x02, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x04, - 0xd2, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x04, 0xd2, - 0x02, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x02, 0x12, 0x04, 0xd2, 0x02, - 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x04, 0xd3, 0x02, 0x02, 0x15, - 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x04, 0xd3, 0x02, 0x02, 0x10, 0x0a, - 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x02, 0x12, 0x04, 0xd3, 0x02, 0x13, 0x14, 0x0a, 0x0c, - 0x0a, 0x04, 0x05, 0x00, 0x02, 0x06, 0x12, 0x04, 0xd4, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x06, 0x01, 0x12, 0x04, 0xd4, 0x02, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x06, 0x02, 0x12, 0x04, 0xd4, 0x02, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x07, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, - 0x01, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x02, - 0x12, 0x04, 0xd5, 0x02, 0x14, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x08, 0x12, 0x04, - 0xd6, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, 0x04, 0xd6, - 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, 0x04, 0xd6, 0x02, - 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x09, 0x12, 0x04, 0xd7, 0x02, 0x02, 0x18, - 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x01, 0x12, 0x04, 0xd7, 0x02, 0x02, 0x13, 0x0a, - 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x02, 0x12, 0x04, 0xd7, 0x02, 0x16, 0x17, 0x0a, 0x2b, - 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0a, 0x12, 0x04, 0xd8, 0x02, 0x02, 0x18, 0x22, 0x1d, 0x20, 0x60, - 0x7b, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x3a, 0x20, 0x42, 0x6f, 0x78, 0x3c, 0x4d, 0x6f, 0x76, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x3e, 0x20, 0x7d, 0x60, 0x2c, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x0a, 0x01, 0x12, 0x04, 0xd8, 0x02, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, - 0x02, 0x0a, 0x02, 0x12, 0x04, 0xd8, 0x02, 0x16, 0x17, 0x0a, 0x22, 0x0a, 0x04, 0x05, 0x00, 0x02, - 0x0b, 0x12, 0x04, 0xd9, 0x02, 0x02, 0x18, 0x22, 0x14, 0x20, 0x60, 0x28, 0x4d, 0x6f, 0x76, 0x65, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x61, 0x67, 0x29, 0x60, 0x2c, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x0b, 0x01, 0x12, 0x04, 0xd9, 0x02, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x0b, 0x02, 0x12, 0x04, 0xd9, 0x02, 0x16, 0x17, 0x0a, 0x22, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x0c, 0x12, 0x04, 0xda, 0x02, 0x02, 0x24, 0x22, 0x14, 0x20, 0x60, 0x7b, 0x20, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x20, 0x75, 0x31, 0x36, 0x20, 0x7d, 0x60, 0x60, 0x2c, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0c, 0x01, 0x12, 0x04, 0xda, 0x02, 0x02, 0x1f, 0x0a, 0x0d, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0c, 0x02, 0x12, 0x04, 0xda, 0x02, 0x22, 0x23, 0x0a, 0x37, 0x0a, - 0x04, 0x05, 0x00, 0x02, 0x0d, 0x12, 0x04, 0xdb, 0x02, 0x02, 0x1c, 0x22, 0x29, 0x20, 0x60, 0x7b, - 0x20, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3a, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x2c, 0x20, - 0x74, 0x6f, 0x3a, 0x20, 0x42, 0x6f, 0x78, 0x3c, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x3e, 0x20, 0x7d, 0x60, 0x2c, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0d, 0x01, 0x12, - 0x04, 0xdb, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0d, 0x02, 0x12, 0x04, - 0xdb, 0x02, 0x19, 0x1b, 0x0a, 0x1b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0e, 0x12, 0x04, 0xdc, 0x02, - 0x02, 0x1d, 0x22, 0x0d, 0x20, 0x60, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x29, 0x60, 0x2c, - 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x01, 0x12, 0x04, 0xdc, 0x02, 0x02, 0x17, - 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x02, 0x12, 0x04, 0xdc, 0x02, 0x1a, 0x1c, 0x0a, - 0x0c, 0x0a, 0x02, 0x04, 0x24, 0x12, 0x06, 0xdf, 0x02, 0x00, 0xee, 0x02, 0x01, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x24, 0x01, 0x12, 0x04, 0xdf, 0x02, 0x08, 0x10, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x24, - 0x03, 0x00, 0x12, 0x06, 0xe1, 0x02, 0x02, 0xe4, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, - 0x03, 0x00, 0x01, 0x12, 0x04, 0xe1, 0x02, 0x0a, 0x17, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x24, 0x03, - 0x00, 0x02, 0x00, 0x12, 0x04, 0xe2, 0x02, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x24, 0x03, - 0x00, 0x02, 0x00, 0x05, 0x12, 0x04, 0xe2, 0x02, 0x04, 0x08, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x24, - 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe2, 0x02, 0x09, 0x10, 0x0a, 0x0f, 0x0a, 0x07, 0x04, - 0x24, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe2, 0x02, 0x13, 0x14, 0x0a, 0x0e, 0x0a, 0x06, - 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x12, 0x04, 0xe3, 0x02, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, - 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x06, 0x12, 0x04, 0xe3, 0x02, 0x04, 0x0c, 0x0a, 0x0f, 0x0a, - 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xe3, 0x02, 0x0d, 0x0f, 0x0a, 0x0f, - 0x0a, 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, 0x04, 0xe3, 0x02, 0x12, 0x13, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x00, 0x12, 0x04, 0xe6, 0x02, 0x02, 0x15, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x24, 0x02, 0x00, 0x06, 0x12, 0x04, 0xe6, 0x02, 0x02, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x24, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe6, 0x02, 0x0c, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x24, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe6, 0x02, 0x13, 0x14, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x24, - 0x08, 0x00, 0x12, 0x06, 0xe7, 0x02, 0x02, 0xed, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, - 0x08, 0x00, 0x01, 0x12, 0x04, 0xe7, 0x02, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, - 0x01, 0x12, 0x04, 0xe8, 0x02, 0x04, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x01, 0x06, - 0x12, 0x04, 0xe8, 0x02, 0x04, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x01, 0x01, 0x12, - 0x04, 0xe8, 0x02, 0x0d, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x01, 0x03, 0x12, 0x04, - 0xe8, 0x02, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x02, 0x12, 0x04, 0xe9, 0x02, - 0x04, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x02, 0x06, 0x12, 0x04, 0xe9, 0x02, 0x04, - 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x02, 0x01, 0x12, 0x04, 0xe9, 0x02, 0x12, 0x18, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x02, 0x03, 0x12, 0x04, 0xe9, 0x02, 0x1b, 0x1c, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x03, 0x12, 0x04, 0xea, 0x02, 0x04, 0x28, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x24, 0x02, 0x03, 0x05, 0x12, 0x04, 0xea, 0x02, 0x04, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x24, 0x02, 0x03, 0x01, 0x12, 0x04, 0xea, 0x02, 0x0b, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x24, 0x02, 0x03, 0x03, 0x12, 0x04, 0xea, 0x02, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, - 0x02, 0x04, 0x12, 0x04, 0xeb, 0x02, 0x04, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x04, - 0x06, 0x12, 0x04, 0xeb, 0x02, 0x04, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x04, 0x01, - 0x12, 0x04, 0xeb, 0x02, 0x12, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x04, 0x03, 0x12, - 0x04, 0xeb, 0x02, 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x05, 0x12, 0x04, 0xec, - 0x02, 0x04, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x05, 0x05, 0x12, 0x04, 0xec, 0x02, - 0x04, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x05, 0x01, 0x12, 0x04, 0xec, 0x02, 0x0b, - 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x05, 0x03, 0x12, 0x04, 0xec, 0x02, 0x18, 0x19, - 0x0a, 0x0c, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x06, 0xf0, 0x02, 0x00, 0xf6, 0x02, 0x01, 0x0a, 0x0b, - 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x04, 0xf0, 0x02, 0x05, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x05, - 0x01, 0x02, 0x00, 0x12, 0x04, 0xf1, 0x02, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, - 0x00, 0x01, 0x12, 0x04, 0xf1, 0x02, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x00, - 0x02, 0x12, 0x04, 0xf1, 0x02, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x01, 0x12, - 0x04, 0xf2, 0x02, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x01, 0x12, 0x04, - 0xf2, 0x02, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x02, 0x12, 0x04, 0xf2, - 0x02, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x02, 0x12, 0x04, 0xf3, 0x02, 0x02, - 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x01, 0x12, 0x04, 0xf3, 0x02, 0x02, 0x13, - 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x02, 0x12, 0x04, 0xf3, 0x02, 0x16, 0x17, 0x0a, - 0x0c, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x03, 0x12, 0x04, 0xf4, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, - 0x05, 0x05, 0x01, 0x02, 0x03, 0x01, 0x12, 0x04, 0xf4, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, - 0x05, 0x01, 0x02, 0x03, 0x02, 0x12, 0x04, 0xf4, 0x02, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x05, - 0x01, 0x02, 0x04, 0x12, 0x04, 0xf5, 0x02, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, - 0x04, 0x01, 0x12, 0x04, 0xf5, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x04, - 0x02, 0x12, 0x04, 0xf5, 0x02, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x25, 0x12, 0x06, 0xf8, - 0x02, 0x00, 0xfa, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x25, 0x01, 0x12, 0x04, 0xf8, 0x02, - 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x25, 0x02, 0x00, 0x12, 0x04, 0xf9, 0x02, 0x02, 0x19, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x25, 0x02, 0x00, 0x06, 0x12, 0x04, 0xf9, 0x02, 0x02, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x25, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf9, 0x02, 0x0b, 0x14, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x25, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf9, 0x02, 0x17, 0x18, 0x0a, 0x0c, 0x0a, - 0x02, 0x04, 0x26, 0x12, 0x06, 0xfc, 0x02, 0x00, 0xff, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, - 0x26, 0x01, 0x12, 0x04, 0xfc, 0x02, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x26, 0x02, 0x00, - 0x12, 0x04, 0xfd, 0x02, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x00, 0x06, 0x12, - 0x04, 0xfd, 0x02, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x00, 0x01, 0x12, 0x04, - 0xfd, 0x02, 0x0f, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x00, 0x03, 0x12, 0x04, 0xfd, - 0x02, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x26, 0x02, 0x01, 0x12, 0x04, 0xfe, 0x02, 0x02, - 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x01, 0x05, 0x12, 0x04, 0xfe, 0x02, 0x02, 0x08, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x01, 0x01, 0x12, 0x04, 0xfe, 0x02, 0x09, 0x0d, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x01, 0x03, 0x12, 0x04, 0xfe, 0x02, 0x10, 0x11, 0x0a, 0x0c, - 0x0a, 0x02, 0x04, 0x27, 0x12, 0x06, 0x81, 0x03, 0x00, 0x84, 0x03, 0x01, 0x0a, 0x0b, 0x0a, 0x03, - 0x04, 0x27, 0x01, 0x12, 0x04, 0x81, 0x03, 0x08, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x27, 0x02, - 0x00, 0x12, 0x04, 0x82, 0x03, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x00, 0x05, - 0x12, 0x04, 0x82, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x00, 0x01, 0x12, - 0x04, 0x82, 0x03, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x00, 0x03, 0x12, 0x04, - 0x82, 0x03, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x27, 0x02, 0x01, 0x12, 0x04, 0x83, 0x03, - 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x01, 0x05, 0x12, 0x04, 0x83, 0x03, 0x02, - 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x01, 0x01, 0x12, 0x04, 0x83, 0x03, 0x09, 0x0d, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x01, 0x03, 0x12, 0x04, 0x83, 0x03, 0x10, 0x11, 0x0a, - 0x0c, 0x0a, 0x02, 0x04, 0x28, 0x12, 0x06, 0x86, 0x03, 0x00, 0x8b, 0x03, 0x01, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x28, 0x01, 0x12, 0x04, 0x86, 0x03, 0x08, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x28, - 0x02, 0x00, 0x12, 0x04, 0x87, 0x03, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x00, - 0x05, 0x12, 0x04, 0x87, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x00, 0x01, - 0x12, 0x04, 0x87, 0x03, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x00, 0x03, 0x12, - 0x04, 0x87, 0x03, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x28, 0x02, 0x01, 0x12, 0x04, 0x88, - 0x03, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x01, 0x05, 0x12, 0x04, 0x88, 0x03, - 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x01, 0x01, 0x12, 0x04, 0x88, 0x03, 0x09, - 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x01, 0x03, 0x12, 0x04, 0x88, 0x03, 0x12, 0x13, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x28, 0x02, 0x02, 0x12, 0x04, 0x89, 0x03, 0x02, 0x12, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x28, 0x02, 0x02, 0x05, 0x12, 0x04, 0x89, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x28, 0x02, 0x02, 0x01, 0x12, 0x04, 0x89, 0x03, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x28, 0x02, 0x02, 0x03, 0x12, 0x04, 0x89, 0x03, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x28, 0x02, 0x03, 0x12, 0x04, 0x8a, 0x03, 0x02, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, - 0x03, 0x04, 0x12, 0x04, 0x8a, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x03, - 0x06, 0x12, 0x04, 0x8a, 0x03, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x03, 0x01, - 0x12, 0x04, 0x8a, 0x03, 0x14, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x03, 0x03, 0x12, - 0x04, 0x8a, 0x03, 0x2a, 0x2b, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x29, 0x12, 0x06, 0x8d, 0x03, 0x00, - 0x9c, 0x03, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x29, 0x01, 0x12, 0x04, 0x8d, 0x03, 0x08, 0x11, - 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x29, 0x04, 0x00, 0x12, 0x06, 0x8f, 0x03, 0x02, 0x94, 0x03, 0x03, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x04, 0x00, 0x01, 0x12, 0x04, 0x8f, 0x03, 0x07, 0x0b, 0x0a, - 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0x90, 0x03, 0x04, 0x19, 0x0a, - 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x90, 0x03, 0x04, 0x14, - 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0x90, 0x03, 0x17, - 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0x91, 0x03, 0x04, - 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0x91, 0x03, - 0x04, 0x10, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0x91, - 0x03, 0x13, 0x14, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x02, 0x12, 0x04, 0x92, - 0x03, 0x04, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, - 0x92, 0x03, 0x04, 0x16, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, - 0x04, 0x92, 0x03, 0x19, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x03, 0x12, - 0x04, 0x93, 0x03, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x03, 0x01, - 0x12, 0x04, 0x93, 0x03, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x03, - 0x02, 0x12, 0x04, 0x93, 0x03, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x29, 0x02, 0x00, 0x12, - 0x04, 0x96, 0x03, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x00, 0x06, 0x12, 0x04, - 0x96, 0x03, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x00, 0x01, 0x12, 0x04, 0x96, - 0x03, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x00, 0x03, 0x12, 0x04, 0x96, 0x03, - 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x29, 0x08, 0x00, 0x12, 0x06, 0x97, 0x03, 0x02, 0x9b, - 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x08, 0x00, 0x01, 0x12, 0x04, 0x97, 0x03, 0x08, - 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x29, 0x02, 0x01, 0x12, 0x04, 0x98, 0x03, 0x04, 0x21, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x01, 0x06, 0x12, 0x04, 0x98, 0x03, 0x04, 0x14, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x29, 0x02, 0x01, 0x01, 0x12, 0x04, 0x98, 0x03, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x29, 0x02, 0x01, 0x03, 0x12, 0x04, 0x98, 0x03, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x29, 0x02, 0x02, 0x12, 0x04, 0x99, 0x03, 0x04, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, - 0x02, 0x02, 0x06, 0x12, 0x04, 0x99, 0x03, 0x04, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, - 0x02, 0x01, 0x12, 0x04, 0x99, 0x03, 0x1a, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x02, - 0x03, 0x12, 0x04, 0x99, 0x03, 0x2a, 0x2b, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x29, 0x02, 0x03, 0x12, - 0x04, 0x9a, 0x03, 0x04, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x03, 0x06, 0x12, 0x04, - 0x9a, 0x03, 0x04, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x03, 0x01, 0x12, 0x04, 0x9a, - 0x03, 0x18, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x03, 0x03, 0x12, 0x04, 0x9a, 0x03, - 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2a, 0x12, 0x06, 0x9e, 0x03, 0x00, 0xa1, 0x03, 0x01, - 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x2a, 0x01, 0x12, 0x04, 0x9e, 0x03, 0x08, 0x18, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x2a, 0x02, 0x00, 0x12, 0x04, 0x9f, 0x03, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x2a, 0x02, 0x00, 0x05, 0x12, 0x04, 0x9f, 0x03, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, - 0x02, 0x00, 0x01, 0x12, 0x04, 0x9f, 0x03, 0x08, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, - 0x00, 0x03, 0x12, 0x04, 0x9f, 0x03, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2a, 0x02, 0x01, - 0x12, 0x04, 0xa0, 0x03, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, 0x01, 0x05, 0x12, - 0x04, 0xa0, 0x03, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, 0x01, 0x01, 0x12, 0x04, - 0xa0, 0x03, 0x08, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa0, - 0x03, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2b, 0x12, 0x06, 0xa3, 0x03, 0x00, 0xa8, 0x03, - 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x2b, 0x01, 0x12, 0x04, 0xa3, 0x03, 0x08, 0x1d, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x2b, 0x02, 0x00, 0x12, 0x04, 0xa4, 0x03, 0x02, 0x21, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x2b, 0x02, 0x00, 0x04, 0x12, 0x04, 0xa4, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x2b, 0x02, 0x00, 0x05, 0x12, 0x04, 0xa4, 0x03, 0x0b, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, - 0x02, 0x00, 0x01, 0x12, 0x04, 0xa4, 0x03, 0x11, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, - 0x00, 0x03, 0x12, 0x04, 0xa4, 0x03, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2b, 0x02, 0x01, - 0x12, 0x04, 0xa5, 0x03, 0x02, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x04, 0x12, - 0x04, 0xa5, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x05, 0x12, 0x04, - 0xa5, 0x03, 0x0b, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa5, - 0x03, 0x11, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa5, 0x03, - 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2b, 0x02, 0x02, 0x12, 0x04, 0xa6, 0x03, 0x02, 0x17, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x02, 0x05, 0x12, 0x04, 0xa6, 0x03, 0x02, 0x08, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x02, 0x01, 0x12, 0x04, 0xa6, 0x03, 0x09, 0x12, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x02, 0x03, 0x12, 0x04, 0xa6, 0x03, 0x15, 0x16, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x2b, 0x02, 0x03, 0x12, 0x04, 0xa7, 0x03, 0x02, 0x29, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x2b, 0x02, 0x03, 0x04, 0x12, 0x04, 0xa7, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, - 0x02, 0x03, 0x05, 0x12, 0x04, 0xa7, 0x03, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, - 0x03, 0x01, 0x12, 0x04, 0xa7, 0x03, 0x12, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x03, - 0x03, 0x12, 0x04, 0xa7, 0x03, 0x27, 0x28, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2c, 0x12, 0x06, 0xaa, - 0x03, 0x00, 0xae, 0x03, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x2c, 0x01, 0x12, 0x04, 0xaa, 0x03, - 0x08, 0x1b, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2c, 0x02, 0x00, 0x12, 0x04, 0xab, 0x03, 0x02, 0x1e, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x00, 0x06, 0x12, 0x04, 0xab, 0x03, 0x02, 0x12, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x00, 0x01, 0x12, 0x04, 0xab, 0x03, 0x13, 0x19, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x00, 0x03, 0x12, 0x04, 0xab, 0x03, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, - 0x04, 0x04, 0x2c, 0x02, 0x01, 0x12, 0x04, 0xac, 0x03, 0x02, 0x31, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x2c, 0x02, 0x01, 0x04, 0x12, 0x04, 0xac, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, - 0x02, 0x01, 0x05, 0x12, 0x04, 0xac, 0x03, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, - 0x01, 0x01, 0x12, 0x04, 0xac, 0x03, 0x12, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x01, - 0x03, 0x12, 0x04, 0xac, 0x03, 0x2f, 0x30, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2c, 0x02, 0x02, 0x12, - 0x04, 0xad, 0x03, 0x02, 0x32, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x04, 0x12, 0x04, - 0xad, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x06, 0x12, 0x04, 0xad, - 0x03, 0x0b, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x01, 0x12, 0x04, 0xad, 0x03, - 0x1c, 0x2d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x03, 0x12, 0x04, 0xad, 0x03, 0x30, - 0x31, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2d, 0x12, 0x06, 0xb0, 0x03, 0x00, 0xbc, 0x03, 0x01, 0x0a, - 0x0b, 0x0a, 0x03, 0x04, 0x2d, 0x01, 0x12, 0x04, 0xb0, 0x03, 0x08, 0x18, 0x0a, 0x0e, 0x0a, 0x04, - 0x04, 0x2d, 0x04, 0x00, 0x12, 0x06, 0xb1, 0x03, 0x02, 0xb5, 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x2d, 0x04, 0x00, 0x01, 0x12, 0x04, 0xb1, 0x03, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, - 0x2d, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0xb2, 0x03, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, - 0x2d, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb2, 0x03, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, - 0x04, 0x2d, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0xb2, 0x03, 0x17, 0x18, 0x0a, 0x0e, 0x0a, - 0x06, 0x04, 0x2d, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0xb3, 0x03, 0x04, 0x15, 0x0a, 0x0f, 0x0a, - 0x07, 0x04, 0x2d, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb3, 0x03, 0x04, 0x10, 0x0a, 0x0f, - 0x0a, 0x07, 0x04, 0x2d, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0xb3, 0x03, 0x13, 0x14, 0x0a, - 0x0e, 0x0a, 0x06, 0x04, 0x2d, 0x04, 0x00, 0x02, 0x02, 0x12, 0x04, 0xb4, 0x03, 0x04, 0x1b, 0x0a, - 0x0f, 0x0a, 0x07, 0x04, 0x2d, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, 0xb4, 0x03, 0x04, 0x16, - 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x2d, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x04, 0xb4, 0x03, 0x19, - 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2d, 0x02, 0x00, 0x12, 0x04, 0xb7, 0x03, 0x02, 0x10, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb7, 0x03, 0x02, 0x06, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb7, 0x03, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x2d, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb7, 0x03, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, - 0x04, 0x2d, 0x08, 0x00, 0x12, 0x06, 0xb8, 0x03, 0x02, 0xbb, 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x2d, 0x08, 0x00, 0x01, 0x12, 0x04, 0xb8, 0x03, 0x08, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x2d, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x03, 0x04, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, - 0x01, 0x06, 0x12, 0x04, 0xb9, 0x03, 0x04, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x01, - 0x01, 0x12, 0x04, 0xb9, 0x03, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x01, 0x03, - 0x12, 0x04, 0xb9, 0x03, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2d, 0x02, 0x02, 0x12, 0x04, - 0xba, 0x03, 0x04, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x02, 0x06, 0x12, 0x04, 0xba, - 0x03, 0x04, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x02, 0x01, 0x12, 0x04, 0xba, 0x03, - 0x1a, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x02, 0x03, 0x12, 0x04, 0xba, 0x03, 0x2a, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, + 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x7a, 0x65, + 0x72, 0x6f, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x65, + 0x78, 0x74, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x64, 0x65, + 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x6f, 0x6e, + 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x60, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x60, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, + 0x69, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x61, + 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2c, 0x0a, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x65, + 0x76, 0x65, 0x72, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x67, 0x61, 0x70, 0x20, 0x69, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x49, 0x74, 0x20, + 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3a, 0x20, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x62, 0x65, + 0x20, 0x74, 0x77, 0x6f, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x0a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x60, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x60, 0x2e, 0x0a, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x30, 0x29, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, + 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x30, 0x60, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, + 0x01, 0x12, 0x03, 0x12, 0x08, 0x0d, 0x0a, 0xde, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, + 0x03, 0x15, 0x02, 0x2f, 0x1a, 0xd0, 0x01, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x28, 0x6f, 0x72, + 0x20, 0x60, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x0a, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x60, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, + 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x60, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x60, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, + 0x12, 0x03, 0x15, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x15, 0x21, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x15, 0x2d, + 0x2e, 0x0a, 0x88, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x18, 0x02, 0x29, 0x1a, + 0x7b, 0x20, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, + 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x18, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x01, 0x12, 0x03, 0x18, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x18, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, + 0x03, 0x18, 0x14, 0x28, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, + 0x18, 0x15, 0x27, 0x0a, 0x87, 0x02, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x1c, 0x02, + 0x28, 0x1a, 0xf9, 0x01, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, + 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, + 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x69, 0x6e, 0x67, 0x29, 0x0a, 0x20, 0x61, 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x60, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x28, 0x62, 0x75, 0x74, 0x20, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x29, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x60, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x1c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x1c, 0x0b, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x02, 0x01, 0x12, 0x03, 0x1c, 0x17, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, + 0x12, 0x03, 0x1c, 0x26, 0x27, 0x0a, 0x99, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, + 0x1f, 0x02, 0x16, 0x1a, 0x8b, 0x01, 0x20, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x49, 0x44, 0x20, + 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x75, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x77, 0x65, 0x27, 0x72, 0x65, 0x20, 0x74, 0x72, 0x79, + 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, + 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, + 0x65, 0x27, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x69, 0x78, 0x69, 0x6e, 0x67, 0x20, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x20, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1f, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x1f, 0x14, 0x15, 0x0a, 0x8c, 0x04, 0x0a, 0x02, + 0x04, 0x01, 0x12, 0x04, 0x27, 0x00, 0x3e, 0x01, 0x1a, 0xff, 0x03, 0x20, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, + 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x34, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x61, 0x20, 0x75, + 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x61, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x0a, 0x20, 0x2d, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x3a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x20, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x0a, 0x20, 0x2d, 0x20, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x6f, + 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x20, + 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x0a, 0x20, 0x2d, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x20, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2c, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x62, 0x61, 0x6b, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, + 0x01, 0x12, 0x03, 0x27, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, + 0x28, 0x02, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x28, 0x02, + 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x21, 0x2a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x28, 0x2d, 0x2e, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x29, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x01, 0x05, 0x12, 0x03, 0x29, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x29, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x29, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x29, + 0x15, 0x29, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x29, 0x16, + 0x28, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x2a, 0x02, 0x1b, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x2a, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2a, 0x12, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x2a, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, + 0x12, 0x03, 0x2b, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, + 0x2b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2b, 0x09, + 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x2b, 0x11, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x08, 0x12, 0x03, 0x2b, 0x13, 0x27, 0x0a, 0x0d, 0x0a, + 0x06, 0x04, 0x01, 0x02, 0x03, 0x08, 0x06, 0x12, 0x03, 0x2b, 0x14, 0x26, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x2c, 0x02, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x04, 0x05, 0x12, 0x03, 0x2c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, + 0x12, 0x03, 0x2c, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, + 0x2c, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x08, 0x12, 0x03, 0x2c, 0x1a, + 0x2e, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x02, 0x04, 0x08, 0x06, 0x12, 0x03, 0x2c, 0x1b, 0x2d, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x01, 0x04, 0x00, 0x12, 0x04, 0x2e, 0x02, 0x34, 0x03, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x04, 0x00, 0x01, 0x12, 0x03, 0x2e, 0x07, 0x16, 0x0a, 0x0d, 0x0a, 0x06, + 0x04, 0x01, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2f, 0x04, 0x25, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2f, 0x04, 0x20, 0x0a, 0x0e, 0x0a, 0x07, 0x04, + 0x01, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x2f, 0x23, 0x24, 0x0a, 0x0d, 0x0a, 0x06, 0x04, + 0x01, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x30, 0x04, 0x21, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x30, 0x04, 0x1c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, + 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x30, 0x1f, 0x20, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, + 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x31, 0x04, 0x28, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, + 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x31, 0x04, 0x23, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, + 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x31, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, + 0x00, 0x02, 0x03, 0x12, 0x03, 0x32, 0x04, 0x2a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x32, 0x04, 0x25, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, + 0x02, 0x03, 0x02, 0x12, 0x03, 0x32, 0x28, 0x29, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, 0x04, 0x00, + 0x02, 0x04, 0x12, 0x03, 0x33, 0x04, 0x1e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, + 0x04, 0x01, 0x12, 0x03, 0x33, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x04, 0x00, 0x02, + 0x04, 0x02, 0x12, 0x03, 0x33, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, + 0x03, 0x36, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x36, + 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x36, 0x12, 0x16, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, 0x36, 0x19, 0x1a, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x01, 0x08, 0x00, 0x12, 0x04, 0x38, 0x02, 0x3d, 0x03, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x08, 0x00, 0x01, 0x12, 0x03, 0x38, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x06, 0x12, 0x03, 0x39, 0x04, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x06, + 0x12, 0x03, 0x39, 0x04, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, + 0x39, 0x1d, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x39, 0x2e, + 0x2f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, 0x3a, 0x04, 0x23, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x06, 0x12, 0x03, 0x3a, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x07, 0x01, 0x12, 0x03, 0x3a, 0x17, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x07, 0x03, 0x12, 0x03, 0x3a, 0x21, 0x22, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x08, + 0x12, 0x03, 0x3b, 0x04, 0x34, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x06, 0x12, 0x03, + 0x3b, 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x01, 0x12, 0x03, 0x3b, 0x1f, + 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x03, 0x12, 0x03, 0x3b, 0x32, 0x33, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x09, 0x12, 0x03, 0x3c, 0x04, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x09, 0x06, 0x12, 0x03, 0x3c, 0x04, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x09, 0x01, 0x12, 0x03, 0x3c, 0x14, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x09, + 0x03, 0x12, 0x03, 0x3c, 0x1b, 0x1d, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x40, 0x00, + 0x47, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x40, 0x08, 0x20, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x41, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x41, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x41, 0x09, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x41, 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x42, + 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x42, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x42, 0x09, 0x0e, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x42, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x01, 0x08, 0x12, 0x03, 0x42, 0x13, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, + 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x42, 0x14, 0x26, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, + 0x02, 0x12, 0x03, 0x43, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x04, 0x12, + 0x03, 0x43, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x06, 0x12, 0x03, 0x43, + 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x43, 0x11, 0x17, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x43, 0x1a, 0x1b, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x44, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x03, 0x05, 0x12, 0x03, 0x44, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x44, 0x08, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x03, + 0x12, 0x03, 0x44, 0x26, 0x27, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x04, 0x12, 0x03, 0x45, + 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x04, 0x05, 0x12, 0x03, 0x45, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x04, 0x01, 0x12, 0x03, 0x45, 0x09, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x04, 0x03, 0x12, 0x03, 0x45, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x02, 0x02, 0x05, 0x12, 0x03, 0x46, 0x02, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x05, 0x04, 0x12, 0x03, 0x46, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x05, + 0x12, 0x03, 0x46, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x01, 0x12, 0x03, + 0x46, 0x12, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x05, 0x03, 0x12, 0x03, 0x46, 0x2c, + 0x2d, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x49, 0x00, 0x4c, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x49, 0x08, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, + 0x00, 0x12, 0x03, 0x4a, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x4a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4a, + 0x0b, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4a, 0x15, 0x16, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x4b, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x03, 0x02, 0x01, 0x04, 0x12, 0x03, 0x4b, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x4b, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x4b, 0x11, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x4b, 0x1a, 0x1b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x4e, 0x00, 0x4f, + 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x4e, 0x08, 0x22, 0x0a, 0x0a, 0x0a, + 0x02, 0x04, 0x05, 0x12, 0x04, 0x51, 0x00, 0x54, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, + 0x12, 0x03, 0x51, 0x08, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x52, + 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x52, 0x02, 0x18, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x52, 0x19, 0x20, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x52, 0x23, 0x24, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x53, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x01, 0x04, 0x12, 0x03, 0x53, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, + 0x12, 0x03, 0x53, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x53, 0x11, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x53, 0x1a, + 0x1b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x56, 0x00, 0x5c, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x56, 0x08, 0x0d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, + 0x00, 0x12, 0x03, 0x57, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x57, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x57, + 0x0b, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x57, 0x11, 0x12, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x58, 0x02, 0x32, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x58, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x58, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x58, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x08, + 0x12, 0x03, 0x58, 0x1d, 0x31, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x06, 0x02, 0x01, 0x08, 0x06, 0x12, + 0x03, 0x58, 0x1e, 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x02, 0x12, 0x03, 0x59, 0x02, + 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x06, 0x12, 0x03, 0x59, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x59, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x02, 0x03, 0x12, 0x03, 0x59, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x06, 0x02, 0x03, 0x12, 0x03, 0x5a, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, + 0x05, 0x12, 0x03, 0x5a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x01, 0x12, + 0x03, 0x5a, 0x09, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x03, 0x12, 0x03, 0x5a, + 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x04, 0x12, 0x03, 0x5b, 0x02, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x04, 0x05, 0x12, 0x03, 0x5b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x04, 0x01, 0x12, 0x03, 0x5b, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x04, 0x03, 0x12, 0x03, 0x5b, 0x10, 0x11, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, + 0x04, 0x5e, 0x00, 0x68, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x5e, 0x08, + 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x5f, 0x02, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x05, 0x12, 0x03, 0x5f, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5f, 0x08, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x5f, 0x0f, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, + 0x12, 0x03, 0x60, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, 0x12, 0x03, + 0x60, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x03, 0x60, 0x08, + 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x03, 0x60, 0x1c, 0x1d, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x02, 0x12, 0x03, 0x61, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x02, 0x05, 0x12, 0x03, 0x61, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x61, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x61, 0x1a, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x03, 0x12, 0x03, + 0x62, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x04, 0x12, 0x03, 0x62, 0x02, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x05, 0x12, 0x03, 0x62, 0x0b, 0x10, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x01, 0x12, 0x03, 0x62, 0x11, 0x26, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x07, 0x02, 0x03, 0x03, 0x12, 0x03, 0x62, 0x29, 0x2a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x07, 0x02, 0x04, 0x12, 0x03, 0x63, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, + 0x05, 0x12, 0x03, 0x63, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x01, 0x12, + 0x03, 0x63, 0x09, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x03, 0x12, 0x03, 0x63, + 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x04, 0x08, 0x12, 0x03, 0x63, 0x16, 0x2a, + 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x07, 0x02, 0x04, 0x08, 0x06, 0x12, 0x03, 0x63, 0x17, 0x29, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x05, 0x12, 0x03, 0x64, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x05, 0x05, 0x12, 0x03, 0x64, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x05, 0x01, 0x12, 0x03, 0x64, 0x07, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x05, + 0x03, 0x12, 0x03, 0x64, 0x11, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x06, 0x12, 0x03, + 0x65, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x06, 0x05, 0x12, 0x03, 0x65, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x06, 0x01, 0x12, 0x03, 0x65, 0x09, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x06, 0x03, 0x12, 0x03, 0x65, 0x15, 0x16, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x07, 0x02, 0x07, 0x12, 0x03, 0x66, 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x07, 0x05, 0x12, 0x03, 0x66, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x07, + 0x01, 0x12, 0x03, 0x66, 0x08, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x07, 0x03, 0x12, + 0x03, 0x66, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x08, 0x12, 0x03, 0x67, 0x02, + 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x08, 0x04, 0x12, 0x03, 0x67, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x08, 0x06, 0x12, 0x03, 0x67, 0x0b, 0x19, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x07, 0x02, 0x08, 0x01, 0x12, 0x03, 0x67, 0x1a, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x07, 0x02, 0x08, 0x03, 0x12, 0x03, 0x67, 0x24, 0x25, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x08, 0x12, + 0x04, 0x6a, 0x00, 0x6d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x6a, 0x08, + 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x6b, 0x02, 0x32, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x05, 0x12, 0x03, 0x6b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6b, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x6b, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x6b, 0x1d, 0x31, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x08, 0x02, 0x00, 0x08, 0x06, + 0x12, 0x03, 0x6b, 0x1e, 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x01, 0x12, 0x03, 0x6c, + 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x05, 0x12, 0x03, 0x6c, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, 0x12, 0x03, 0x6c, 0x09, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, 0x6c, 0x1b, 0x1c, 0x0a, 0x0a, 0x0a, 0x02, + 0x04, 0x09, 0x12, 0x04, 0x6f, 0x00, 0x77, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, + 0x03, 0x6f, 0x08, 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x70, 0x02, + 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x05, 0x12, 0x03, 0x70, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x70, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x03, 0x70, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x09, 0x02, 0x01, 0x12, 0x03, 0x71, 0x02, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, + 0x05, 0x12, 0x03, 0x71, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x71, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x03, 0x12, 0x03, 0x71, + 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x08, 0x12, 0x03, 0x71, 0x1d, 0x31, + 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x09, 0x02, 0x01, 0x08, 0x06, 0x12, 0x03, 0x71, 0x1e, 0x30, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x02, 0x12, 0x03, 0x72, 0x02, 0x31, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x09, 0x02, 0x02, 0x05, 0x12, 0x03, 0x72, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x72, 0x09, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x72, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x08, 0x12, + 0x03, 0x72, 0x1c, 0x30, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x09, 0x02, 0x02, 0x08, 0x06, 0x12, 0x03, + 0x72, 0x1d, 0x2f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x03, 0x12, 0x03, 0x73, 0x02, 0x31, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x03, 0x05, 0x12, 0x03, 0x73, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x09, 0x02, 0x03, 0x01, 0x12, 0x03, 0x73, 0x09, 0x17, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x09, 0x02, 0x03, 0x03, 0x12, 0x03, 0x73, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, + 0x02, 0x03, 0x08, 0x12, 0x03, 0x73, 0x1c, 0x30, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x09, 0x02, 0x03, + 0x08, 0x06, 0x12, 0x03, 0x73, 0x1d, 0x2f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x04, 0x12, + 0x03, 0x74, 0x02, 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x04, 0x06, 0x12, 0x03, 0x74, + 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x04, 0x01, 0x12, 0x03, 0x74, 0x21, 0x3a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x04, 0x03, 0x12, 0x03, 0x74, 0x3d, 0x3e, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x09, 0x02, 0x05, 0x12, 0x03, 0x75, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x09, 0x02, 0x05, 0x06, 0x12, 0x03, 0x75, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, + 0x05, 0x01, 0x12, 0x03, 0x75, 0x15, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x05, 0x03, + 0x12, 0x03, 0x75, 0x1f, 0x20, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x06, 0x12, 0x03, 0x76, + 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x06, 0x06, 0x12, 0x03, 0x76, 0x02, 0x0b, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x06, 0x01, 0x12, 0x03, 0x76, 0x0c, 0x15, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x09, 0x02, 0x06, 0x03, 0x12, 0x03, 0x76, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x02, + 0x04, 0x0a, 0x12, 0x05, 0x79, 0x00, 0x86, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x0a, 0x01, + 0x12, 0x03, 0x79, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0a, 0x04, 0x00, 0x12, 0x04, 0x7b, + 0x02, 0x7f, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x0a, 0x04, 0x00, 0x01, 0x12, 0x03, 0x7b, 0x07, + 0x13, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x7c, 0x04, 0x23, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x7c, 0x04, 0x1e, + 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x7c, 0x21, 0x22, + 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x7d, 0x04, 0x28, 0x0a, + 0x0e, 0x0a, 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x7d, 0x04, 0x23, 0x0a, + 0x0e, 0x0a, 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x7d, 0x26, 0x27, 0x0a, + 0x0d, 0x0a, 0x06, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x7e, 0x04, 0x28, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x7e, 0x04, 0x23, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x0a, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x7e, 0x26, 0x27, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x00, 0x12, 0x04, 0x81, 0x01, 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0a, 0x02, 0x00, 0x06, 0x12, 0x04, 0x81, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0a, 0x02, 0x00, 0x01, 0x12, 0x04, 0x81, 0x01, 0x0f, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, + 0x02, 0x00, 0x03, 0x12, 0x04, 0x81, 0x01, 0x20, 0x21, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0a, 0x08, + 0x00, 0x12, 0x06, 0x82, 0x01, 0x02, 0x85, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x08, + 0x00, 0x01, 0x12, 0x04, 0x82, 0x01, 0x08, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x01, + 0x12, 0x04, 0x83, 0x01, 0x04, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x01, 0x06, 0x12, + 0x04, 0x83, 0x01, 0x04, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x01, 0x01, 0x12, 0x04, + 0x83, 0x01, 0x13, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x01, 0x03, 0x12, 0x04, 0x83, + 0x01, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x02, 0x12, 0x04, 0x84, 0x01, 0x04, + 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x02, 0x06, 0x12, 0x04, 0x84, 0x01, 0x04, 0x12, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x02, 0x01, 0x12, 0x04, 0x84, 0x01, 0x13, 0x23, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x02, 0x03, 0x12, 0x04, 0x84, 0x01, 0x26, 0x27, 0x0a, 0x0c, + 0x0a, 0x02, 0x04, 0x0b, 0x12, 0x06, 0x88, 0x01, 0x00, 0x8b, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, + 0x04, 0x0b, 0x01, 0x12, 0x04, 0x88, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0b, 0x02, + 0x00, 0x12, 0x04, 0x89, 0x01, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x05, + 0x12, 0x04, 0x89, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x01, 0x12, + 0x04, 0x89, 0x01, 0x09, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x03, 0x12, 0x04, + 0x89, 0x01, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x01, 0x12, 0x04, 0x8a, 0x01, + 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x01, 0x06, 0x12, 0x04, 0x8a, 0x01, 0x02, + 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x01, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x10, 0x16, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x01, 0x03, 0x12, 0x04, 0x8a, 0x01, 0x19, 0x1a, 0x0a, + 0x0c, 0x0a, 0x02, 0x04, 0x0c, 0x12, 0x06, 0x8d, 0x01, 0x00, 0x90, 0x01, 0x01, 0x0a, 0x0b, 0x0a, + 0x03, 0x04, 0x0c, 0x01, 0x12, 0x04, 0x8d, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0c, + 0x02, 0x00, 0x12, 0x04, 0x8e, 0x01, 0x02, 0x2f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, + 0x04, 0x12, 0x04, 0x8e, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x06, + 0x12, 0x04, 0x8e, 0x01, 0x0b, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, + 0x04, 0x8e, 0x01, 0x1a, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x03, 0x12, 0x04, + 0x8e, 0x01, 0x2d, 0x2e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x01, 0x12, 0x04, 0x8f, 0x01, + 0x02, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x04, 0x12, 0x04, 0x8f, 0x01, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x06, 0x12, 0x04, 0x8f, 0x01, 0x0b, 0x10, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x01, 0x12, 0x04, 0x8f, 0x01, 0x11, 0x17, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x01, 0x03, 0x12, 0x04, 0x8f, 0x01, 0x1a, 0x1b, 0x0a, 0x0c, + 0x0a, 0x02, 0x04, 0x0d, 0x12, 0x06, 0x92, 0x01, 0x00, 0xa8, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, + 0x04, 0x0d, 0x01, 0x12, 0x04, 0x92, 0x01, 0x08, 0x16, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0d, 0x04, + 0x00, 0x12, 0x06, 0x94, 0x01, 0x02, 0x9c, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x04, + 0x00, 0x01, 0x12, 0x04, 0x94, 0x01, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, + 0x02, 0x00, 0x12, 0x04, 0x95, 0x01, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, + 0x02, 0x00, 0x01, 0x12, 0x04, 0x95, 0x01, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, + 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0x95, 0x01, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, + 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0x96, 0x01, 0x04, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, + 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0x96, 0x01, 0x04, 0x16, 0x0a, 0x0f, 0x0a, 0x07, 0x04, + 0x0d, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0x96, 0x01, 0x19, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, + 0x04, 0x0d, 0x04, 0x00, 0x02, 0x02, 0x12, 0x04, 0x97, 0x01, 0x04, 0x1d, 0x0a, 0x0f, 0x0a, 0x07, + 0x04, 0x0d, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, 0x97, 0x01, 0x04, 0x18, 0x0a, 0x0f, 0x0a, + 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x04, 0x97, 0x01, 0x1b, 0x1c, 0x0a, 0x0e, + 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x03, 0x12, 0x04, 0x98, 0x01, 0x04, 0x1f, 0x0a, 0x0f, + 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x04, 0x98, 0x01, 0x04, 0x1a, 0x0a, + 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x03, 0x02, 0x12, 0x04, 0x98, 0x01, 0x1d, 0x1e, + 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x04, 0x12, 0x04, 0x99, 0x01, 0x04, 0x1a, + 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x04, 0x99, 0x01, 0x04, + 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x04, 0x02, 0x12, 0x04, 0x99, 0x01, + 0x18, 0x19, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x05, 0x12, 0x04, 0x9a, 0x01, + 0x04, 0x1c, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x04, 0x9a, + 0x01, 0x04, 0x17, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x05, 0x02, 0x12, 0x04, + 0x9a, 0x01, 0x1a, 0x1b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x06, 0x12, 0x04, + 0x9b, 0x01, 0x04, 0x1e, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, + 0x04, 0x9b, 0x01, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x0d, 0x04, 0x00, 0x02, 0x06, 0x02, + 0x12, 0x04, 0x9b, 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x00, 0x12, 0x04, + 0x9e, 0x01, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9e, + 0x01, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9e, 0x01, + 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9e, 0x01, 0x0e, + 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0d, 0x08, 0x00, 0x12, 0x06, 0xa0, 0x01, 0x02, 0xa7, 0x01, + 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x08, 0x00, 0x01, 0x12, 0x04, 0xa0, 0x01, 0x08, 0x0e, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0xa1, 0x01, 0x04, 0x23, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x06, 0x12, 0x04, 0xa1, 0x01, 0x04, 0x10, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0d, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa1, 0x01, 0x11, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0d, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa1, 0x01, 0x21, 0x22, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x0d, 0x02, 0x02, 0x12, 0x04, 0xa2, 0x01, 0x04, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, + 0x02, 0x06, 0x12, 0x04, 0xa2, 0x01, 0x04, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, + 0x01, 0x12, 0x04, 0xa2, 0x01, 0x13, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x02, 0x03, + 0x12, 0x04, 0xa2, 0x01, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x03, 0x12, 0x04, + 0xa3, 0x01, 0x04, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x06, 0x12, 0x04, 0xa3, + 0x01, 0x04, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x01, 0x12, 0x04, 0xa3, 0x01, + 0x14, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x03, 0x03, 0x12, 0x04, 0xa3, 0x01, 0x28, + 0x29, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x04, 0x12, 0x04, 0xa4, 0x01, 0x04, 0x21, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x04, 0x06, 0x12, 0x04, 0xa4, 0x01, 0x04, 0x0f, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x04, 0x01, 0x12, 0x04, 0xa4, 0x01, 0x10, 0x1c, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0d, 0x02, 0x04, 0x03, 0x12, 0x04, 0xa4, 0x01, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x0d, 0x02, 0x05, 0x12, 0x04, 0xa5, 0x01, 0x04, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, + 0x02, 0x05, 0x06, 0x12, 0x04, 0xa5, 0x01, 0x04, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, + 0x05, 0x01, 0x12, 0x04, 0xa5, 0x01, 0x12, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x05, + 0x03, 0x12, 0x04, 0xa5, 0x01, 0x23, 0x24, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x06, 0x12, + 0x04, 0xa6, 0x01, 0x04, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, 0x06, 0x12, 0x04, + 0xa6, 0x01, 0x04, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, 0x01, 0x12, 0x04, 0xa6, + 0x01, 0x13, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x06, 0x03, 0x12, 0x04, 0xa6, 0x01, + 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x0e, 0x12, 0x06, 0xaa, 0x01, 0x00, 0xae, 0x01, 0x01, + 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0e, 0x01, 0x12, 0x04, 0xaa, 0x01, 0x08, 0x14, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x0e, 0x02, 0x00, 0x12, 0x04, 0xab, 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0e, 0x02, 0x00, 0x05, 0x12, 0x04, 0xab, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, + 0x02, 0x00, 0x01, 0x12, 0x04, 0xab, 0x01, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, + 0x00, 0x03, 0x12, 0x04, 0xab, 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x01, + 0x12, 0x04, 0xac, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x05, 0x12, + 0x04, 0xac, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x01, 0x12, 0x04, + 0xac, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, 0x03, 0x12, 0x04, 0xac, + 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x02, 0x12, 0x04, 0xad, 0x01, 0x02, + 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x06, 0x12, 0x04, 0xad, 0x01, 0x02, 0x0e, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x01, 0x12, 0x04, 0xad, 0x01, 0x0f, 0x15, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x03, 0x12, 0x04, 0xad, 0x01, 0x18, 0x19, 0x0a, 0x0c, + 0x0a, 0x02, 0x04, 0x0f, 0x12, 0x06, 0xb0, 0x01, 0x00, 0xb5, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, + 0x04, 0x0f, 0x01, 0x12, 0x04, 0xb0, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, + 0x00, 0x12, 0x04, 0xb1, 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x05, + 0x12, 0x04, 0xb1, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x01, 0x12, + 0x04, 0xb1, 0x01, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x03, 0x12, 0x04, + 0xb1, 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x01, 0x12, 0x04, 0xb2, 0x01, + 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x05, 0x12, 0x04, 0xb2, 0x01, 0x02, + 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb2, 0x01, 0x08, 0x16, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb2, 0x01, 0x19, 0x1a, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x02, 0x12, 0x04, 0xb3, 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0f, 0x02, 0x02, 0x06, 0x12, 0x04, 0xb3, 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0f, 0x02, 0x02, 0x01, 0x12, 0x04, 0xb3, 0x01, 0x10, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0f, 0x02, 0x02, 0x03, 0x12, 0x04, 0xb3, 0x01, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0f, + 0x02, 0x03, 0x12, 0x04, 0xb4, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, + 0x05, 0x12, 0x04, 0xb4, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, 0x01, + 0x12, 0x04, 0xb4, 0x01, 0x09, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x03, 0x03, 0x12, + 0x04, 0xb4, 0x01, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x10, 0x12, 0x06, 0xb7, 0x01, 0x00, + 0xbc, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x10, 0x01, 0x12, 0x04, 0xb7, 0x01, 0x08, 0x17, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x00, 0x12, 0x04, 0xb8, 0x01, 0x02, 0x1b, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x05, 0x12, 0x04, 0xb8, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x10, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb8, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x10, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb8, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x10, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, + 0x01, 0x05, 0x12, 0x04, 0xb9, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, + 0x01, 0x12, 0x04, 0xb9, 0x01, 0x09, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x03, + 0x12, 0x04, 0xb9, 0x01, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x02, 0x12, 0x04, + 0xba, 0x01, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x02, 0x05, 0x12, 0x04, 0xba, + 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x02, 0x01, 0x12, 0x04, 0xba, 0x01, + 0x09, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x02, 0x03, 0x12, 0x04, 0xba, 0x01, 0x0f, + 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x03, 0x12, 0x04, 0xbb, 0x01, 0x02, 0x1b, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x03, 0x06, 0x12, 0x04, 0xbb, 0x01, 0x02, 0x11, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x10, 0x02, 0x03, 0x01, 0x12, 0x04, 0xbb, 0x01, 0x12, 0x16, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x10, 0x02, 0x03, 0x03, 0x12, 0x04, 0xbb, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x02, + 0x04, 0x11, 0x12, 0x06, 0xbe, 0x01, 0x00, 0xc1, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x11, + 0x01, 0x12, 0x04, 0xbe, 0x01, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x11, 0x02, 0x00, 0x12, + 0x04, 0xbf, 0x01, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x05, 0x12, 0x04, + 0xbf, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x01, 0x12, 0x04, 0xbf, + 0x01, 0x09, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x03, 0x12, 0x04, 0xbf, 0x01, + 0x0f, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x11, 0x02, 0x01, 0x12, 0x04, 0xc0, 0x01, 0x02, 0x16, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc0, 0x01, 0x02, 0x08, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x01, 0x01, 0x12, 0x04, 0xc0, 0x01, 0x09, 0x11, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x11, 0x02, 0x01, 0x03, 0x12, 0x04, 0xc0, 0x01, 0x14, 0x15, 0x0a, 0x0c, 0x0a, + 0x02, 0x04, 0x12, 0x12, 0x06, 0xc3, 0x01, 0x00, 0xc7, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, + 0x12, 0x01, 0x12, 0x04, 0xc3, 0x01, 0x08, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x12, 0x02, 0x00, + 0x12, 0x04, 0xc4, 0x01, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x05, 0x12, + 0x04, 0xc4, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, + 0xc4, 0x01, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc4, + 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x12, 0x02, 0x01, 0x12, 0x04, 0xc5, 0x01, 0x02, + 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc5, 0x01, 0x02, 0x07, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x01, 0x12, 0x04, 0xc5, 0x01, 0x08, 0x16, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x03, 0x12, 0x04, 0xc5, 0x01, 0x19, 0x1a, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x12, 0x02, 0x02, 0x12, 0x04, 0xc6, 0x01, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x12, 0x02, 0x02, 0x06, 0x12, 0x04, 0xc6, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x12, 0x02, 0x02, 0x01, 0x12, 0x04, 0xc6, 0x01, 0x15, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, + 0x02, 0x02, 0x03, 0x12, 0x04, 0xc6, 0x01, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x13, 0x12, + 0x06, 0xc9, 0x01, 0x00, 0xcf, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x13, 0x01, 0x12, 0x04, + 0xc9, 0x01, 0x08, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x00, 0x12, 0x04, 0xca, 0x01, + 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x05, 0x12, 0x04, 0xca, 0x01, 0x02, + 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x01, 0x12, 0x04, 0xca, 0x01, 0x09, 0x10, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x03, 0x12, 0x04, 0xca, 0x01, 0x13, 0x14, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x01, 0x12, 0x04, 0xcb, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x13, 0x02, 0x01, 0x05, 0x12, 0x04, 0xcb, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x13, 0x02, 0x01, 0x01, 0x12, 0x04, 0xcb, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x13, 0x02, 0x01, 0x03, 0x12, 0x04, 0xcb, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, + 0x02, 0x02, 0x12, 0x04, 0xcc, 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x02, + 0x06, 0x12, 0x04, 0xcc, 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x02, 0x01, + 0x12, 0x04, 0xcc, 0x01, 0x10, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x02, 0x03, 0x12, + 0x04, 0xcc, 0x01, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x03, 0x12, 0x04, 0xcd, + 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x03, 0x05, 0x12, 0x04, 0xcd, 0x01, + 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x03, 0x01, 0x12, 0x04, 0xcd, 0x01, 0x09, + 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x03, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x14, 0x15, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x04, 0x12, 0x04, 0xce, 0x01, 0x02, 0x12, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x13, 0x02, 0x04, 0x05, 0x12, 0x04, 0xce, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x13, 0x02, 0x04, 0x01, 0x12, 0x04, 0xce, 0x01, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x13, 0x02, 0x04, 0x03, 0x12, 0x04, 0xce, 0x01, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x02, 0x04, + 0x14, 0x12, 0x06, 0xd1, 0x01, 0x00, 0xd6, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x14, 0x01, + 0x12, 0x04, 0xd1, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x00, 0x12, 0x04, + 0xd2, 0x01, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x05, 0x12, 0x04, 0xd2, + 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x01, 0x12, 0x04, 0xd2, 0x01, + 0x09, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x03, 0x12, 0x04, 0xd2, 0x01, 0x0f, + 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x01, 0x12, 0x04, 0xd3, 0x01, 0x02, 0x16, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x05, 0x12, 0x04, 0xd3, 0x01, 0x02, 0x08, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x01, 0x12, 0x04, 0xd3, 0x01, 0x09, 0x11, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x14, 0x02, 0x01, 0x03, 0x12, 0x04, 0xd3, 0x01, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x14, 0x02, 0x02, 0x12, 0x04, 0xd4, 0x01, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, + 0x02, 0x02, 0x05, 0x12, 0x04, 0xd4, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, + 0x02, 0x01, 0x12, 0x04, 0xd4, 0x01, 0x09, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x02, + 0x03, 0x12, 0x04, 0xd4, 0x01, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x03, 0x12, + 0x04, 0xd5, 0x01, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x03, 0x05, 0x12, 0x04, + 0xd5, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x03, 0x01, 0x12, 0x04, 0xd5, + 0x01, 0x09, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x03, 0x03, 0x12, 0x04, 0xd5, 0x01, + 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x15, 0x12, 0x06, 0xd8, 0x01, 0x00, 0xdd, 0x01, 0x01, + 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x15, 0x01, 0x12, 0x04, 0xd8, 0x01, 0x08, 0x16, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x15, 0x02, 0x00, 0x12, 0x04, 0xd9, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x15, 0x02, 0x00, 0x05, 0x12, 0x04, 0xd9, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, + 0x02, 0x00, 0x01, 0x12, 0x04, 0xd9, 0x01, 0x08, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, + 0x00, 0x03, 0x12, 0x04, 0xd9, 0x01, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x15, 0x02, 0x01, + 0x12, 0x04, 0xda, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x01, 0x05, 0x12, + 0x04, 0xda, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x01, 0x01, 0x12, 0x04, + 0xda, 0x01, 0x09, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x01, 0x03, 0x12, 0x04, 0xda, + 0x01, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x15, 0x02, 0x02, 0x12, 0x04, 0xdb, 0x01, 0x02, + 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x02, 0x05, 0x12, 0x04, 0xdb, 0x01, 0x02, 0x08, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x02, 0x01, 0x12, 0x04, 0xdb, 0x01, 0x09, 0x0c, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x02, 0x03, 0x12, 0x04, 0xdb, 0x01, 0x0f, 0x10, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x15, 0x02, 0x03, 0x12, 0x04, 0xdc, 0x01, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x15, 0x02, 0x03, 0x06, 0x12, 0x04, 0xdc, 0x01, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x15, 0x02, 0x03, 0x01, 0x12, 0x04, 0xdc, 0x01, 0x11, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, + 0x02, 0x03, 0x03, 0x12, 0x04, 0xdc, 0x01, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x16, 0x12, + 0x06, 0xdf, 0x01, 0x00, 0xf2, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x16, 0x01, 0x12, 0x04, + 0xdf, 0x01, 0x08, 0x1a, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x16, 0x04, 0x00, 0x12, 0x06, 0xe0, 0x01, + 0x02, 0xe7, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x04, 0x00, 0x01, 0x12, 0x04, 0xe0, + 0x01, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0xe1, + 0x01, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, + 0xe1, 0x01, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, + 0x04, 0xe1, 0x01, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x01, 0x12, + 0x04, 0xe2, 0x01, 0x04, 0x24, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x01, 0x01, + 0x12, 0x04, 0xe2, 0x01, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x01, + 0x02, 0x12, 0x04, 0xe2, 0x01, 0x22, 0x23, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, + 0x02, 0x12, 0x04, 0xe3, 0x01, 0x04, 0x1c, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, + 0x02, 0x01, 0x12, 0x04, 0xe3, 0x01, 0x04, 0x17, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, + 0x02, 0x02, 0x02, 0x12, 0x04, 0xe3, 0x01, 0x1a, 0x1b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x16, 0x04, + 0x00, 0x02, 0x03, 0x12, 0x04, 0xe4, 0x01, 0x04, 0x23, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, 0x04, + 0x00, 0x02, 0x03, 0x01, 0x12, 0x04, 0xe4, 0x01, 0x04, 0x1e, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x16, + 0x04, 0x00, 0x02, 0x03, 0x02, 0x12, 0x04, 0xe4, 0x01, 0x21, 0x22, 0x0a, 0x0e, 0x0a, 0x06, 0x04, + 0x16, 0x04, 0x00, 0x02, 0x04, 0x12, 0x04, 0xe5, 0x01, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, + 0x16, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x04, 0xe5, 0x01, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, + 0x04, 0x16, 0x04, 0x00, 0x02, 0x04, 0x02, 0x12, 0x04, 0xe5, 0x01, 0x1d, 0x1e, 0x0a, 0x0e, 0x0a, + 0x06, 0x04, 0x16, 0x04, 0x00, 0x02, 0x05, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x1e, 0x0a, 0x0f, 0x0a, + 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x19, 0x0a, 0x0f, + 0x0a, 0x07, 0x04, 0x16, 0x04, 0x00, 0x02, 0x05, 0x02, 0x12, 0x04, 0xe6, 0x01, 0x1c, 0x1d, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x00, 0x12, 0x04, 0xe9, 0x01, 0x02, 0x10, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x16, 0x02, 0x00, 0x06, 0x12, 0x04, 0xe9, 0x01, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x16, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe9, 0x01, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x16, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe9, 0x01, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x16, + 0x08, 0x00, 0x12, 0x06, 0xeb, 0x01, 0x02, 0xf1, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, + 0x08, 0x00, 0x01, 0x12, 0x04, 0xeb, 0x01, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, + 0x01, 0x12, 0x04, 0xec, 0x01, 0x04, 0x34, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x06, + 0x12, 0x04, 0xec, 0x01, 0x04, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x01, 0x12, + 0x04, 0xec, 0x01, 0x19, 0x2f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x03, 0x12, 0x04, + 0xec, 0x01, 0x32, 0x33, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x02, 0x12, 0x04, 0xed, 0x01, + 0x04, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x02, 0x06, 0x12, 0x04, 0xed, 0x01, 0x04, + 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x02, 0x01, 0x12, 0x04, 0xed, 0x01, 0x12, 0x20, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x02, 0x03, 0x12, 0x04, 0xed, 0x01, 0x23, 0x24, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x03, 0x12, 0x04, 0xee, 0x01, 0x04, 0x32, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x16, 0x02, 0x03, 0x06, 0x12, 0x04, 0xee, 0x01, 0x04, 0x17, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x16, 0x02, 0x03, 0x01, 0x12, 0x04, 0xee, 0x01, 0x18, 0x2d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x16, 0x02, 0x03, 0x03, 0x12, 0x04, 0xee, 0x01, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, + 0x02, 0x04, 0x12, 0x04, 0xef, 0x01, 0x04, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x04, + 0x06, 0x12, 0x04, 0xef, 0x01, 0x04, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x04, 0x01, + 0x12, 0x04, 0xef, 0x01, 0x14, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x04, 0x03, 0x12, + 0x04, 0xef, 0x01, 0x28, 0x29, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x05, 0x12, 0x04, 0xf0, + 0x01, 0x04, 0x29, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x05, 0x06, 0x12, 0x04, 0xf0, 0x01, + 0x04, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x05, 0x01, 0x12, 0x04, 0xf0, 0x01, 0x14, + 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x05, 0x03, 0x12, 0x04, 0xf0, 0x01, 0x27, 0x28, + 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x17, 0x12, 0x06, 0xf4, 0x01, 0x00, 0xf9, 0x01, 0x01, 0x0a, 0x0b, + 0x0a, 0x03, 0x04, 0x17, 0x01, 0x12, 0x04, 0xf4, 0x01, 0x08, 0x1c, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x17, 0x02, 0x00, 0x12, 0x04, 0xf5, 0x01, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, + 0x00, 0x06, 0x12, 0x04, 0xf5, 0x01, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x00, + 0x01, 0x12, 0x04, 0xf5, 0x01, 0x12, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x00, 0x03, + 0x12, 0x04, 0xf5, 0x01, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, 0x02, 0x01, 0x12, 0x04, + 0xf6, 0x01, 0x02, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x04, 0x12, 0x04, 0xf6, + 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x06, 0x12, 0x04, 0xf6, 0x01, + 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x01, 0x12, 0x04, 0xf6, 0x01, 0x14, + 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x01, 0x03, 0x12, 0x04, 0xf6, 0x01, 0x25, 0x26, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, 0x02, 0x02, 0x12, 0x04, 0xf7, 0x01, 0x02, 0x20, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x17, 0x02, 0x02, 0x04, 0x12, 0x04, 0xf7, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x17, 0x02, 0x02, 0x05, 0x12, 0x04, 0xf7, 0x01, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x17, 0x02, 0x02, 0x01, 0x12, 0x04, 0xf7, 0x01, 0x12, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x17, 0x02, 0x02, 0x03, 0x12, 0x04, 0xf7, 0x01, 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, + 0x02, 0x03, 0x12, 0x04, 0xf8, 0x01, 0x02, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x03, + 0x05, 0x12, 0x04, 0xf8, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x03, 0x01, + 0x12, 0x04, 0xf8, 0x01, 0x09, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, 0x03, 0x03, 0x12, + 0x04, 0xf8, 0x01, 0x21, 0x22, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x18, 0x12, 0x06, 0xfb, 0x01, 0x00, + 0xfe, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x18, 0x01, 0x12, 0x04, 0xfb, 0x01, 0x08, 0x1a, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x18, 0x02, 0x00, 0x12, 0x04, 0xfc, 0x01, 0x02, 0x15, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x05, 0x12, 0x04, 0xfc, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x18, 0x02, 0x00, 0x01, 0x12, 0x04, 0xfc, 0x01, 0x08, 0x10, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x18, 0x02, 0x00, 0x03, 0x12, 0x04, 0xfc, 0x01, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x18, 0x02, 0x01, 0x12, 0x04, 0xfd, 0x01, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, + 0x01, 0x06, 0x12, 0x04, 0xfd, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, + 0x01, 0x12, 0x04, 0xfd, 0x01, 0x0f, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, 0x03, + 0x12, 0x04, 0xfd, 0x01, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x19, 0x12, 0x06, 0x80, 0x02, + 0x00, 0x84, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x19, 0x01, 0x12, 0x04, 0x80, 0x02, 0x08, + 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x19, 0x02, 0x00, 0x12, 0x04, 0x81, 0x02, 0x02, 0x1e, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x00, 0x06, 0x12, 0x04, 0x81, 0x02, 0x02, 0x14, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x19, 0x02, 0x00, 0x01, 0x12, 0x04, 0x81, 0x02, 0x15, 0x19, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x19, 0x02, 0x00, 0x03, 0x12, 0x04, 0x81, 0x02, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x19, 0x02, 0x01, 0x12, 0x04, 0x82, 0x02, 0x02, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, + 0x02, 0x01, 0x04, 0x12, 0x04, 0x82, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, + 0x01, 0x06, 0x12, 0x04, 0x82, 0x02, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x01, + 0x01, 0x12, 0x04, 0x82, 0x02, 0x14, 0x22, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x01, 0x03, + 0x12, 0x04, 0x82, 0x02, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x19, 0x02, 0x02, 0x12, 0x04, + 0x83, 0x02, 0x02, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x04, 0x12, 0x04, 0x83, + 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x05, 0x12, 0x04, 0x83, 0x02, + 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x01, 0x12, 0x04, 0x83, 0x02, 0x12, + 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x19, 0x02, 0x02, 0x03, 0x12, 0x04, 0x83, 0x02, 0x1e, 0x1f, + 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1a, 0x12, 0x06, 0x86, 0x02, 0x00, 0x89, 0x02, 0x01, 0x0a, 0x0b, + 0x0a, 0x03, 0x04, 0x1a, 0x01, 0x12, 0x04, 0x86, 0x02, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x1a, 0x02, 0x00, 0x12, 0x04, 0x87, 0x02, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, + 0x00, 0x05, 0x12, 0x04, 0x87, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, + 0x01, 0x12, 0x04, 0x87, 0x02, 0x09, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x03, + 0x12, 0x04, 0x87, 0x02, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x01, 0x12, 0x04, + 0x88, 0x02, 0x02, 0x3e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x04, 0x12, 0x04, 0x88, + 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x06, 0x12, 0x04, 0x88, 0x02, + 0x0b, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x01, 0x12, 0x04, 0x88, 0x02, 0x26, + 0x39, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x03, 0x12, 0x04, 0x88, 0x02, 0x3c, 0x3d, + 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1b, 0x12, 0x06, 0x8b, 0x02, 0x00, 0x96, 0x02, 0x01, 0x0a, 0x0b, + 0x0a, 0x03, 0x04, 0x1b, 0x01, 0x12, 0x04, 0x8b, 0x02, 0x08, 0x22, 0x0a, 0x0e, 0x0a, 0x04, 0x04, + 0x1b, 0x04, 0x00, 0x12, 0x06, 0x8c, 0x02, 0x02, 0x8f, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1b, 0x04, 0x00, 0x01, 0x12, 0x04, 0x8c, 0x02, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1b, + 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0x8d, 0x02, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1b, + 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8d, 0x02, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, + 0x1b, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0x8d, 0x02, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, + 0x04, 0x1b, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0x8e, 0x02, 0x04, 0x24, 0x0a, 0x0f, 0x0a, 0x07, + 0x04, 0x1b, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0x8e, 0x02, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, + 0x07, 0x04, 0x1b, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0x8e, 0x02, 0x22, 0x23, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x00, 0x12, 0x04, 0x91, 0x02, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1b, 0x02, 0x00, 0x06, 0x12, 0x04, 0x91, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1b, 0x02, 0x00, 0x01, 0x12, 0x04, 0x91, 0x02, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, + 0x02, 0x00, 0x03, 0x12, 0x04, 0x91, 0x02, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1b, 0x08, + 0x00, 0x12, 0x06, 0x93, 0x02, 0x02, 0x95, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x08, + 0x00, 0x01, 0x12, 0x04, 0x93, 0x02, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x01, + 0x12, 0x04, 0x94, 0x02, 0x04, 0x34, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x06, 0x12, + 0x04, 0x94, 0x02, 0x04, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x01, 0x12, 0x04, + 0x94, 0x02, 0x19, 0x2f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x03, 0x12, 0x04, 0x94, + 0x02, 0x32, 0x33, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1c, 0x12, 0x06, 0x98, 0x02, 0x00, 0x9a, 0x02, + 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1c, 0x01, 0x12, 0x04, 0x98, 0x02, 0x08, 0x1b, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x1c, 0x02, 0x00, 0x12, 0x04, 0x99, 0x02, 0x02, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1c, 0x02, 0x00, 0x04, 0x12, 0x04, 0x99, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1c, 0x02, 0x00, 0x06, 0x12, 0x04, 0x99, 0x02, 0x0b, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1c, + 0x02, 0x00, 0x01, 0x12, 0x04, 0x99, 0x02, 0x1e, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1c, 0x02, + 0x00, 0x03, 0x12, 0x04, 0x99, 0x02, 0x28, 0x29, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1d, 0x12, 0x06, + 0x9c, 0x02, 0x00, 0x9f, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1d, 0x01, 0x12, 0x04, 0x9c, + 0x02, 0x08, 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1d, 0x02, 0x00, 0x12, 0x04, 0x9d, 0x02, 0x02, + 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1d, 0x02, 0x00, 0x05, 0x12, 0x04, 0x9d, 0x02, 0x02, 0x07, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9d, 0x02, 0x08, 0x10, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x1d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9d, 0x02, 0x13, 0x14, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x1d, 0x02, 0x01, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1d, 0x02, 0x01, 0x06, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1d, 0x02, 0x01, 0x01, 0x12, 0x04, 0x9e, 0x02, 0x0d, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1d, + 0x02, 0x01, 0x03, 0x12, 0x04, 0x9e, 0x02, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1e, 0x12, + 0x06, 0xa1, 0x02, 0x00, 0xa7, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1e, 0x01, 0x12, 0x04, + 0xa1, 0x02, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x00, 0x12, 0x04, 0xa2, 0x02, + 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x00, 0x05, 0x12, 0x04, 0xa2, 0x02, 0x02, + 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x00, 0x01, 0x12, 0x04, 0xa2, 0x02, 0x09, 0x10, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x00, 0x03, 0x12, 0x04, 0xa2, 0x02, 0x13, 0x14, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x01, 0x12, 0x04, 0xa3, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x1e, 0x02, 0x01, 0x05, 0x12, 0x04, 0xa3, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1e, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa3, 0x02, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1e, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa3, 0x02, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1e, + 0x02, 0x02, 0x12, 0x04, 0xa4, 0x02, 0x02, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, + 0x04, 0x12, 0x04, 0xa4, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x06, + 0x12, 0x04, 0xa4, 0x02, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x01, 0x12, + 0x04, 0xa4, 0x02, 0x18, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x02, 0x03, 0x12, 0x04, + 0xa4, 0x02, 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x03, 0x12, 0x04, 0xa5, 0x02, + 0x02, 0x2e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x03, 0x04, 0x12, 0x04, 0xa5, 0x02, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x03, 0x06, 0x12, 0x04, 0xa5, 0x02, 0x0b, 0x17, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x03, 0x01, 0x12, 0x04, 0xa5, 0x02, 0x18, 0x29, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, 0x03, 0x03, 0x12, 0x04, 0xa5, 0x02, 0x2c, 0x2d, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x1e, 0x02, 0x04, 0x12, 0x04, 0xa6, 0x02, 0x02, 0x22, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1e, 0x02, 0x04, 0x04, 0x12, 0x04, 0xa6, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1e, 0x02, 0x04, 0x06, 0x12, 0x04, 0xa6, 0x02, 0x0b, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, + 0x02, 0x04, 0x01, 0x12, 0x04, 0xa6, 0x02, 0x16, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1e, 0x02, + 0x04, 0x03, 0x12, 0x04, 0xa6, 0x02, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1f, 0x12, 0x06, + 0xa8, 0x02, 0x00, 0xb5, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1f, 0x01, 0x12, 0x04, 0xa8, + 0x02, 0x08, 0x14, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1f, 0x04, 0x00, 0x12, 0x06, 0xa9, 0x02, 0x02, + 0xae, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x04, 0x00, 0x01, 0x12, 0x04, 0xa9, 0x02, + 0x07, 0x11, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0xaa, 0x02, + 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xaa, + 0x02, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, + 0xaa, 0x02, 0x1d, 0x1e, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, + 0xab, 0x02, 0x04, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, + 0x04, 0xab, 0x02, 0x04, 0x16, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x01, 0x02, + 0x12, 0x04, 0xab, 0x02, 0x19, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x02, + 0x12, 0x04, 0xac, 0x02, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, 0x02, + 0x01, 0x12, 0x04, 0xac, 0x02, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, 0x02, + 0x02, 0x02, 0x12, 0x04, 0xac, 0x02, 0x18, 0x19, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1f, 0x04, 0x00, + 0x02, 0x03, 0x12, 0x04, 0xad, 0x02, 0x04, 0x1a, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, 0x00, + 0x02, 0x03, 0x01, 0x12, 0x04, 0xad, 0x02, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1f, 0x04, + 0x00, 0x02, 0x03, 0x02, 0x12, 0x04, 0xad, 0x02, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, + 0x02, 0x00, 0x12, 0x04, 0xaf, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x00, + 0x05, 0x12, 0x04, 0xaf, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x00, 0x01, + 0x12, 0x04, 0xaf, 0x02, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x00, 0x03, 0x12, + 0x04, 0xaf, 0x02, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x01, 0x12, 0x04, 0xb0, + 0x02, 0x02, 0x29, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x01, 0x06, 0x12, 0x04, 0xb0, 0x02, + 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb0, 0x02, 0x1a, + 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb0, 0x02, 0x27, 0x28, + 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x02, 0x12, 0x04, 0xb1, 0x02, 0x02, 0x14, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x02, 0x05, 0x12, 0x04, 0xb1, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x1f, 0x02, 0x02, 0x01, 0x12, 0x04, 0xb1, 0x02, 0x07, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1f, 0x02, 0x02, 0x03, 0x12, 0x04, 0xb1, 0x02, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x1f, 0x02, 0x03, 0x12, 0x04, 0xb2, 0x02, 0x02, 0x40, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, + 0x03, 0x04, 0x12, 0x04, 0xb2, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, + 0x06, 0x12, 0x04, 0xb2, 0x02, 0x0b, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, 0x01, + 0x12, 0x04, 0xb2, 0x02, 0x28, 0x3b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x03, 0x03, 0x12, + 0x04, 0xb2, 0x02, 0x3e, 0x3f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x04, 0x12, 0x04, 0xb3, + 0x02, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x04, 0x12, 0x04, 0xb3, 0x02, + 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x06, 0x12, 0x04, 0xb3, 0x02, 0x0b, + 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x01, 0x12, 0x04, 0xb3, 0x02, 0x14, 0x1a, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, 0x02, 0x04, 0x03, 0x12, 0x04, 0xb3, 0x02, 0x1d, 0x1e, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x1f, 0x02, 0x05, 0x12, 0x04, 0xb4, 0x02, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x1f, 0x02, 0x05, 0x04, 0x12, 0x04, 0xb4, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1f, 0x02, 0x05, 0x06, 0x12, 0x04, 0xb4, 0x02, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x1f, 0x02, 0x05, 0x01, 0x12, 0x04, 0xb4, 0x02, 0x14, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1f, + 0x02, 0x05, 0x03, 0x12, 0x04, 0xb4, 0x02, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x20, 0x12, + 0x06, 0xb7, 0x02, 0x00, 0xbd, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x20, 0x01, 0x12, 0x04, + 0xb7, 0x02, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x20, 0x02, 0x00, 0x12, 0x04, 0xb8, 0x02, + 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x00, 0x05, 0x12, 0x04, 0xb8, 0x02, 0x02, + 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb8, 0x02, 0x09, 0x0d, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb8, 0x02, 0x10, 0x11, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x20, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x15, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x20, 0x02, 0x01, 0x05, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x20, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x07, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x20, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb9, 0x02, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x20, + 0x02, 0x02, 0x12, 0x04, 0xba, 0x02, 0x02, 0x25, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, + 0x04, 0x12, 0x04, 0xba, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x06, + 0x12, 0x04, 0xba, 0x02, 0x0b, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x01, 0x12, + 0x04, 0xba, 0x02, 0x17, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x02, 0x03, 0x12, 0x04, + 0xba, 0x02, 0x23, 0x24, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x20, 0x02, 0x03, 0x12, 0x04, 0xbb, 0x02, + 0x02, 0x3e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x03, 0x04, 0x12, 0x04, 0xbb, 0x02, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x03, 0x06, 0x12, 0x04, 0xbb, 0x02, 0x0b, 0x25, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x03, 0x01, 0x12, 0x04, 0xbb, 0x02, 0x26, 0x39, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, 0x03, 0x03, 0x12, 0x04, 0xbb, 0x02, 0x3c, 0x3d, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x20, 0x02, 0x04, 0x12, 0x04, 0xbc, 0x02, 0x02, 0x26, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x20, 0x02, 0x04, 0x04, 0x12, 0x04, 0xbc, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x20, 0x02, 0x04, 0x06, 0x12, 0x04, 0xbc, 0x02, 0x0b, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, + 0x02, 0x04, 0x01, 0x12, 0x04, 0xbc, 0x02, 0x1b, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x20, 0x02, + 0x04, 0x03, 0x12, 0x04, 0xbc, 0x02, 0x24, 0x25, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x21, 0x12, 0x06, + 0xbf, 0x02, 0x00, 0xc2, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x21, 0x01, 0x12, 0x04, 0xbf, + 0x02, 0x08, 0x22, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x21, 0x02, 0x00, 0x12, 0x04, 0xc0, 0x02, 0x02, + 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, 0x00, 0x04, 0x12, 0x04, 0xc0, 0x02, 0x02, 0x0a, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, 0x00, 0x06, 0x12, 0x04, 0xc0, 0x02, 0x0b, 0x16, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, 0x00, 0x01, 0x12, 0x04, 0xc0, 0x02, 0x17, 0x22, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x21, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc0, 0x02, 0x25, 0x26, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x21, 0x02, 0x01, 0x12, 0x04, 0xc1, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x21, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc1, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, + 0x02, 0x01, 0x01, 0x12, 0x04, 0xc1, 0x02, 0x07, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x21, 0x02, + 0x01, 0x03, 0x12, 0x04, 0xc1, 0x02, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x22, 0x12, 0x06, + 0xc4, 0x02, 0x00, 0xc7, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x22, 0x01, 0x12, 0x04, 0xc4, + 0x02, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x22, 0x02, 0x00, 0x12, 0x04, 0xc5, 0x02, 0x02, + 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x22, 0x02, 0x00, 0x05, 0x12, 0x04, 0xc5, 0x02, 0x02, 0x08, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x22, 0x02, 0x00, 0x01, 0x12, 0x04, 0xc5, 0x02, 0x09, 0x0d, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x22, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc5, 0x02, 0x10, 0x11, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x22, 0x02, 0x01, 0x12, 0x04, 0xc6, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x22, 0x02, 0x01, 0x06, 0x12, 0x04, 0xc6, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x22, 0x02, 0x01, 0x01, 0x12, 0x04, 0xc6, 0x02, 0x0b, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x22, + 0x02, 0x01, 0x03, 0x12, 0x04, 0xc6, 0x02, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x23, 0x12, + 0x06, 0xc9, 0x02, 0x00, 0xcb, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x23, 0x01, 0x12, 0x04, + 0xc9, 0x02, 0x08, 0x24, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x23, 0x02, 0x00, 0x12, 0x04, 0xca, 0x02, + 0x02, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x23, 0x02, 0x00, 0x04, 0x12, 0x04, 0xca, 0x02, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x23, 0x02, 0x00, 0x06, 0x12, 0x04, 0xca, 0x02, 0x0b, 0x16, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x23, 0x02, 0x00, 0x01, 0x12, 0x04, 0xca, 0x02, 0x17, 0x22, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x23, 0x02, 0x00, 0x03, 0x12, 0x04, 0xca, 0x02, 0x25, 0x26, 0x0a, 0x0c, + 0x0a, 0x02, 0x05, 0x00, 0x12, 0x06, 0xcd, 0x02, 0x00, 0xdd, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, + 0x05, 0x00, 0x01, 0x12, 0x04, 0xcd, 0x02, 0x05, 0x0e, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, + 0x00, 0x12, 0x04, 0xce, 0x02, 0x02, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, + 0x12, 0x04, 0xce, 0x02, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, + 0x04, 0xce, 0x02, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x04, 0xcf, + 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xcf, 0x02, + 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0xcf, 0x02, 0x14, + 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x04, 0xd0, 0x02, 0x02, 0x14, 0x0a, + 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, 0xd0, 0x02, 0x02, 0x0f, 0x0a, 0x0d, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x04, 0xd0, 0x02, 0x12, 0x13, 0x0a, 0x0c, 0x0a, + 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x04, 0xd1, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x03, 0x01, 0x12, 0x04, 0xd1, 0x02, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x03, 0x02, 0x12, 0x04, 0xd1, 0x02, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, + 0x04, 0x12, 0x04, 0xd2, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, + 0x12, 0x04, 0xd2, 0x02, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x02, 0x12, + 0x04, 0xd2, 0x02, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x04, 0xd3, + 0x02, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x04, 0xd3, 0x02, + 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x02, 0x12, 0x04, 0xd3, 0x02, 0x13, + 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x06, 0x12, 0x04, 0xd4, 0x02, 0x02, 0x16, 0x0a, + 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x01, 0x12, 0x04, 0xd4, 0x02, 0x02, 0x11, 0x0a, 0x0d, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, 0x12, 0x04, 0xd4, 0x02, 0x14, 0x15, 0x0a, 0x0c, 0x0a, + 0x04, 0x05, 0x00, 0x02, 0x07, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x07, 0x01, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x07, 0x02, 0x12, 0x04, 0xd5, 0x02, 0x14, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, + 0x08, 0x12, 0x04, 0xd6, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, + 0x12, 0x04, 0xd6, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, + 0x04, 0xd6, 0x02, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x09, 0x12, 0x04, 0xd7, + 0x02, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x01, 0x12, 0x04, 0xd7, 0x02, + 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x02, 0x12, 0x04, 0xd7, 0x02, 0x16, + 0x17, 0x0a, 0x2b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0a, 0x12, 0x04, 0xd8, 0x02, 0x02, 0x18, 0x22, + 0x1d, 0x20, 0x60, 0x7b, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x3a, 0x20, 0x42, 0x6f, 0x78, 0x3c, + 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x3e, 0x20, 0x7d, 0x60, 0x2c, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x04, 0xd8, 0x02, 0x02, 0x13, 0x0a, 0x0d, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x04, 0xd8, 0x02, 0x16, 0x17, 0x0a, 0x22, 0x0a, 0x04, + 0x05, 0x00, 0x02, 0x0b, 0x12, 0x04, 0xd9, 0x02, 0x02, 0x18, 0x22, 0x14, 0x20, 0x60, 0x28, 0x4d, + 0x6f, 0x76, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x61, 0x67, 0x29, 0x60, 0x2c, 0x0a, + 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0b, 0x01, 0x12, 0x04, 0xd9, 0x02, 0x02, 0x13, 0x0a, + 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0b, 0x02, 0x12, 0x04, 0xd9, 0x02, 0x16, 0x17, 0x0a, 0x22, + 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0c, 0x12, 0x04, 0xda, 0x02, 0x02, 0x24, 0x22, 0x14, 0x20, 0x60, + 0x7b, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x20, 0x75, 0x31, 0x36, 0x20, 0x7d, 0x60, 0x60, + 0x2c, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0c, 0x01, 0x12, 0x04, 0xda, 0x02, 0x02, + 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0c, 0x02, 0x12, 0x04, 0xda, 0x02, 0x22, 0x23, + 0x0a, 0x37, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0d, 0x12, 0x04, 0xdb, 0x02, 0x02, 0x1c, 0x22, 0x29, + 0x20, 0x60, 0x7b, 0x20, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3a, 0x20, 0x62, 0x6f, 0x6f, + 0x6c, 0x2c, 0x20, 0x74, 0x6f, 0x3a, 0x20, 0x42, 0x6f, 0x78, 0x3c, 0x4d, 0x6f, 0x76, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x3e, 0x20, 0x7d, 0x60, 0x2c, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x0d, 0x01, 0x12, 0x04, 0xdb, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0d, + 0x02, 0x12, 0x04, 0xdb, 0x02, 0x19, 0x1b, 0x0a, 0x1b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0e, 0x12, + 0x04, 0xdc, 0x02, 0x02, 0x1d, 0x22, 0x0d, 0x20, 0x60, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x29, 0x60, 0x2c, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x01, 0x12, 0x04, 0xdc, + 0x02, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x02, 0x12, 0x04, 0xdc, 0x02, + 0x1a, 0x1c, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x24, 0x12, 0x06, 0xdf, 0x02, 0x00, 0xee, 0x02, 0x01, + 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x24, 0x01, 0x12, 0x04, 0xdf, 0x02, 0x08, 0x10, 0x0a, 0x0e, 0x0a, + 0x04, 0x04, 0x24, 0x03, 0x00, 0x12, 0x06, 0xe1, 0x02, 0x02, 0xe4, 0x02, 0x03, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x24, 0x03, 0x00, 0x01, 0x12, 0x04, 0xe1, 0x02, 0x0a, 0x17, 0x0a, 0x0e, 0x0a, 0x06, + 0x04, 0x24, 0x03, 0x00, 0x02, 0x00, 0x12, 0x04, 0xe2, 0x02, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, + 0x04, 0x24, 0x03, 0x00, 0x02, 0x00, 0x05, 0x12, 0x04, 0xe2, 0x02, 0x04, 0x08, 0x0a, 0x0f, 0x0a, + 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe2, 0x02, 0x09, 0x10, 0x0a, 0x0f, + 0x0a, 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe2, 0x02, 0x13, 0x14, 0x0a, + 0x0e, 0x0a, 0x06, 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x12, 0x04, 0xe3, 0x02, 0x04, 0x14, 0x0a, + 0x0f, 0x0a, 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x06, 0x12, 0x04, 0xe3, 0x02, 0x04, 0x0c, + 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xe3, 0x02, 0x0d, + 0x0f, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x24, 0x03, 0x00, 0x02, 0x01, 0x03, 0x12, 0x04, 0xe3, 0x02, + 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x00, 0x12, 0x04, 0xe6, 0x02, 0x02, 0x15, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x00, 0x06, 0x12, 0x04, 0xe6, 0x02, 0x02, 0x0b, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe6, 0x02, 0x0c, 0x10, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x24, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe6, 0x02, 0x13, 0x14, 0x0a, 0x0e, 0x0a, + 0x04, 0x04, 0x24, 0x08, 0x00, 0x12, 0x06, 0xe7, 0x02, 0x02, 0xed, 0x02, 0x03, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x24, 0x08, 0x00, 0x01, 0x12, 0x04, 0xe7, 0x02, 0x08, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x24, 0x02, 0x01, 0x12, 0x04, 0xe8, 0x02, 0x04, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, + 0x02, 0x01, 0x06, 0x12, 0x04, 0xe8, 0x02, 0x04, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, + 0x01, 0x01, 0x12, 0x04, 0xe8, 0x02, 0x0d, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x01, + 0x03, 0x12, 0x04, 0xe8, 0x02, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x02, 0x12, + 0x04, 0xe9, 0x02, 0x04, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x02, 0x06, 0x12, 0x04, + 0xe9, 0x02, 0x04, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x02, 0x01, 0x12, 0x04, 0xe9, + 0x02, 0x12, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x02, 0x03, 0x12, 0x04, 0xe9, 0x02, + 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x03, 0x12, 0x04, 0xea, 0x02, 0x04, 0x28, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x03, 0x05, 0x12, 0x04, 0xea, 0x02, 0x04, 0x0a, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x03, 0x01, 0x12, 0x04, 0xea, 0x02, 0x0b, 0x23, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x24, 0x02, 0x03, 0x03, 0x12, 0x04, 0xea, 0x02, 0x26, 0x27, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x24, 0x02, 0x04, 0x12, 0x04, 0xeb, 0x02, 0x04, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x24, 0x02, 0x04, 0x06, 0x12, 0x04, 0xeb, 0x02, 0x04, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, + 0x02, 0x04, 0x01, 0x12, 0x04, 0xeb, 0x02, 0x12, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, + 0x04, 0x03, 0x12, 0x04, 0xeb, 0x02, 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x24, 0x02, 0x05, + 0x12, 0x04, 0xec, 0x02, 0x04, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x05, 0x05, 0x12, + 0x04, 0xec, 0x02, 0x04, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x05, 0x01, 0x12, 0x04, + 0xec, 0x02, 0x0b, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x24, 0x02, 0x05, 0x03, 0x12, 0x04, 0xec, + 0x02, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x06, 0xf0, 0x02, 0x00, 0xf6, 0x02, + 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x04, 0xf0, 0x02, 0x05, 0x10, 0x0a, 0x0c, + 0x0a, 0x04, 0x05, 0x01, 0x02, 0x00, 0x12, 0x04, 0xf1, 0x02, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf1, 0x02, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, + 0x01, 0x02, 0x00, 0x02, 0x12, 0x04, 0xf1, 0x02, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x01, + 0x02, 0x01, 0x12, 0x04, 0xf2, 0x02, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, + 0x01, 0x12, 0x04, 0xf2, 0x02, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x02, + 0x12, 0x04, 0xf2, 0x02, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x02, 0x12, 0x04, + 0xf3, 0x02, 0x02, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x01, 0x12, 0x04, 0xf3, + 0x02, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x02, 0x12, 0x04, 0xf3, 0x02, + 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x03, 0x12, 0x04, 0xf4, 0x02, 0x02, 0x19, + 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x03, 0x01, 0x12, 0x04, 0xf4, 0x02, 0x02, 0x14, 0x0a, + 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x03, 0x02, 0x12, 0x04, 0xf4, 0x02, 0x17, 0x18, 0x0a, 0x0c, + 0x0a, 0x04, 0x05, 0x01, 0x02, 0x04, 0x12, 0x04, 0xf5, 0x02, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x04, 0x01, 0x12, 0x04, 0xf5, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x05, + 0x01, 0x02, 0x04, 0x02, 0x12, 0x04, 0xf5, 0x02, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x25, + 0x12, 0x06, 0xf8, 0x02, 0x00, 0xfa, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x25, 0x01, 0x12, + 0x04, 0xf8, 0x02, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x25, 0x02, 0x00, 0x12, 0x04, 0xf9, + 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x25, 0x02, 0x00, 0x06, 0x12, 0x04, 0xf9, 0x02, + 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x25, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf9, 0x02, 0x0b, + 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x25, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf9, 0x02, 0x17, 0x18, + 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x26, 0x12, 0x06, 0xfc, 0x02, 0x00, 0xff, 0x02, 0x01, 0x0a, 0x0b, + 0x0a, 0x03, 0x04, 0x26, 0x01, 0x12, 0x04, 0xfc, 0x02, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x26, 0x02, 0x00, 0x12, 0x04, 0xfd, 0x02, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, + 0x00, 0x06, 0x12, 0x04, 0xfd, 0x02, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x00, + 0x01, 0x12, 0x04, 0xfd, 0x02, 0x0f, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x00, 0x03, + 0x12, 0x04, 0xfd, 0x02, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x26, 0x02, 0x01, 0x12, 0x04, + 0xfe, 0x02, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x01, 0x05, 0x12, 0x04, 0xfe, + 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x01, 0x01, 0x12, 0x04, 0xfe, 0x02, + 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x26, 0x02, 0x01, 0x03, 0x12, 0x04, 0xfe, 0x02, 0x10, + 0x11, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x27, 0x12, 0x06, 0x81, 0x03, 0x00, 0x84, 0x03, 0x01, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x27, 0x01, 0x12, 0x04, 0x81, 0x03, 0x08, 0x14, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x27, 0x02, 0x00, 0x12, 0x04, 0x82, 0x03, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, + 0x02, 0x00, 0x05, 0x12, 0x04, 0x82, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, + 0x00, 0x01, 0x12, 0x04, 0x82, 0x03, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x00, + 0x03, 0x12, 0x04, 0x82, 0x03, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x27, 0x02, 0x01, 0x12, + 0x04, 0x83, 0x03, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x01, 0x05, 0x12, 0x04, + 0x83, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x01, 0x01, 0x12, 0x04, 0x83, + 0x03, 0x09, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x27, 0x02, 0x01, 0x03, 0x12, 0x04, 0x83, 0x03, + 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x28, 0x12, 0x06, 0x86, 0x03, 0x00, 0x8b, 0x03, 0x01, + 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x28, 0x01, 0x12, 0x04, 0x86, 0x03, 0x08, 0x15, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x28, 0x02, 0x00, 0x12, 0x04, 0x87, 0x03, 0x02, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x28, 0x02, 0x00, 0x05, 0x12, 0x04, 0x87, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, + 0x02, 0x00, 0x01, 0x12, 0x04, 0x87, 0x03, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, + 0x00, 0x03, 0x12, 0x04, 0x87, 0x03, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x28, 0x02, 0x01, + 0x12, 0x04, 0x88, 0x03, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x01, 0x05, 0x12, + 0x04, 0x88, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x01, 0x01, 0x12, 0x04, + 0x88, 0x03, 0x09, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x01, 0x03, 0x12, 0x04, 0x88, + 0x03, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x28, 0x02, 0x02, 0x12, 0x04, 0x89, 0x03, 0x02, + 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x02, 0x05, 0x12, 0x04, 0x89, 0x03, 0x02, 0x08, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x02, 0x01, 0x12, 0x04, 0x89, 0x03, 0x09, 0x0d, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, 0x02, 0x03, 0x12, 0x04, 0x89, 0x03, 0x10, 0x11, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x28, 0x02, 0x03, 0x12, 0x04, 0x8a, 0x03, 0x02, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x28, 0x02, 0x03, 0x04, 0x12, 0x04, 0x8a, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x28, 0x02, 0x03, 0x06, 0x12, 0x04, 0x8a, 0x03, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, + 0x02, 0x03, 0x01, 0x12, 0x04, 0x8a, 0x03, 0x14, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x28, 0x02, + 0x03, 0x03, 0x12, 0x04, 0x8a, 0x03, 0x2a, 0x2b, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x29, 0x12, 0x06, + 0x8d, 0x03, 0x00, 0x9e, 0x03, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x29, 0x01, 0x12, 0x04, 0x8d, + 0x03, 0x08, 0x11, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x29, 0x04, 0x00, 0x12, 0x06, 0x8f, 0x03, 0x02, + 0x95, 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x04, 0x00, 0x01, 0x12, 0x04, 0x8f, 0x03, + 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0x90, 0x03, + 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x90, + 0x03, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, + 0x90, 0x03, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, + 0x91, 0x03, 0x04, 0x15, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, + 0x04, 0x91, 0x03, 0x04, 0x10, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x01, 0x02, + 0x12, 0x04, 0x91, 0x03, 0x13, 0x14, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, 0x02, 0x02, + 0x12, 0x04, 0x92, 0x03, 0x04, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, 0x02, + 0x01, 0x12, 0x04, 0x92, 0x03, 0x04, 0x16, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, 0x02, + 0x02, 0x02, 0x12, 0x04, 0x92, 0x03, 0x19, 0x1a, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, 0x04, 0x00, + 0x02, 0x03, 0x12, 0x04, 0x93, 0x03, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, 0x00, + 0x02, 0x03, 0x01, 0x12, 0x04, 0x93, 0x03, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, 0x04, + 0x00, 0x02, 0x03, 0x02, 0x12, 0x04, 0x93, 0x03, 0x17, 0x18, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x29, + 0x04, 0x00, 0x02, 0x04, 0x12, 0x04, 0x94, 0x03, 0x04, 0x17, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x29, + 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x04, 0x94, 0x03, 0x04, 0x12, 0x0a, 0x0f, 0x0a, 0x07, 0x04, + 0x29, 0x04, 0x00, 0x02, 0x04, 0x02, 0x12, 0x04, 0x94, 0x03, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x29, 0x02, 0x00, 0x12, 0x04, 0x97, 0x03, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, + 0x02, 0x00, 0x06, 0x12, 0x04, 0x97, 0x03, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, + 0x00, 0x01, 0x12, 0x04, 0x97, 0x03, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x00, + 0x03, 0x12, 0x04, 0x97, 0x03, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x29, 0x08, 0x00, 0x12, + 0x06, 0x98, 0x03, 0x02, 0x9d, 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x08, 0x00, 0x01, + 0x12, 0x04, 0x98, 0x03, 0x08, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x29, 0x02, 0x01, 0x12, 0x04, + 0x99, 0x03, 0x04, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x01, 0x06, 0x12, 0x04, 0x99, + 0x03, 0x04, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x01, 0x01, 0x12, 0x04, 0x99, 0x03, + 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x01, 0x03, 0x12, 0x04, 0x99, 0x03, 0x1f, + 0x20, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x29, 0x02, 0x02, 0x12, 0x04, 0x9a, 0x03, 0x04, 0x2c, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x02, 0x06, 0x12, 0x04, 0x9a, 0x03, 0x04, 0x19, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x29, 0x02, 0x02, 0x01, 0x12, 0x04, 0x9a, 0x03, 0x1a, 0x27, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x29, 0x02, 0x02, 0x03, 0x12, 0x04, 0x9a, 0x03, 0x2a, 0x2b, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x29, 0x02, 0x03, 0x12, 0x04, 0x9b, 0x03, 0x04, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, + 0x02, 0x03, 0x06, 0x12, 0x04, 0x9b, 0x03, 0x04, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, + 0x03, 0x01, 0x12, 0x04, 0x9b, 0x03, 0x18, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x03, + 0x03, 0x12, 0x04, 0x9b, 0x03, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x29, 0x02, 0x04, 0x12, + 0x04, 0x9c, 0x03, 0x04, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x04, 0x06, 0x12, 0x04, + 0x9c, 0x03, 0x04, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x04, 0x01, 0x12, 0x04, 0x9c, + 0x03, 0x16, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x29, 0x02, 0x04, 0x03, 0x12, 0x04, 0x9c, 0x03, + 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2a, 0x12, 0x06, 0xa0, 0x03, 0x00, 0xa3, 0x03, 0x01, + 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x2a, 0x01, 0x12, 0x04, 0xa0, 0x03, 0x08, 0x18, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x2a, 0x02, 0x00, 0x12, 0x04, 0xa1, 0x03, 0x02, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x2a, 0x02, 0x00, 0x05, 0x12, 0x04, 0xa1, 0x03, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, + 0x02, 0x00, 0x01, 0x12, 0x04, 0xa1, 0x03, 0x08, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, + 0x00, 0x03, 0x12, 0x04, 0xa1, 0x03, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2a, 0x02, 0x01, + 0x12, 0x04, 0xa2, 0x03, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, 0x01, 0x05, 0x12, + 0x04, 0xa2, 0x03, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, 0x01, 0x01, 0x12, 0x04, + 0xa2, 0x03, 0x08, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2a, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa2, + 0x03, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2b, 0x12, 0x06, 0xa5, 0x03, 0x00, 0xaa, 0x03, + 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x2b, 0x01, 0x12, 0x04, 0xa5, 0x03, 0x08, 0x1d, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x2b, 0x02, 0x00, 0x12, 0x04, 0xa6, 0x03, 0x02, 0x21, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x2b, 0x02, 0x00, 0x04, 0x12, 0x04, 0xa6, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x2b, 0x02, 0x00, 0x05, 0x12, 0x04, 0xa6, 0x03, 0x0b, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, + 0x02, 0x00, 0x01, 0x12, 0x04, 0xa6, 0x03, 0x11, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, + 0x00, 0x03, 0x12, 0x04, 0xa6, 0x03, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2b, 0x02, 0x01, + 0x12, 0x04, 0xa7, 0x03, 0x02, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x04, 0x12, + 0x04, 0xa7, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x05, 0x12, 0x04, + 0xa7, 0x03, 0x0b, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa7, + 0x03, 0x11, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa7, 0x03, + 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2b, 0x02, 0x02, 0x12, 0x04, 0xa8, 0x03, 0x02, 0x17, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x02, 0x05, 0x12, 0x04, 0xa8, 0x03, 0x02, 0x08, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x02, 0x01, 0x12, 0x04, 0xa8, 0x03, 0x09, 0x12, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x02, 0x03, 0x12, 0x04, 0xa8, 0x03, 0x15, 0x16, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x2b, 0x02, 0x03, 0x12, 0x04, 0xa9, 0x03, 0x02, 0x29, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x2b, 0x02, 0x03, 0x04, 0x12, 0x04, 0xa9, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, + 0x02, 0x03, 0x05, 0x12, 0x04, 0xa9, 0x03, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, + 0x03, 0x01, 0x12, 0x04, 0xa9, 0x03, 0x12, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2b, 0x02, 0x03, + 0x03, 0x12, 0x04, 0xa9, 0x03, 0x27, 0x28, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2c, 0x12, 0x06, 0xac, + 0x03, 0x00, 0xb0, 0x03, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x2c, 0x01, 0x12, 0x04, 0xac, 0x03, + 0x08, 0x1b, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2c, 0x02, 0x00, 0x12, 0x04, 0xad, 0x03, 0x02, 0x1e, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x00, 0x06, 0x12, 0x04, 0xad, 0x03, 0x02, 0x12, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x00, 0x01, 0x12, 0x04, 0xad, 0x03, 0x13, 0x19, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x00, 0x03, 0x12, 0x04, 0xad, 0x03, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x2c, 0x02, 0x01, 0x12, 0x04, 0xae, 0x03, 0x02, 0x31, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x2c, 0x02, 0x01, 0x04, 0x12, 0x04, 0xae, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, + 0x02, 0x01, 0x05, 0x12, 0x04, 0xae, 0x03, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, + 0x01, 0x01, 0x12, 0x04, 0xae, 0x03, 0x12, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x01, + 0x03, 0x12, 0x04, 0xae, 0x03, 0x2f, 0x30, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2c, 0x02, 0x02, 0x12, + 0x04, 0xaf, 0x03, 0x02, 0x32, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x04, 0x12, 0x04, + 0xaf, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x06, 0x12, 0x04, 0xaf, + 0x03, 0x0b, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x01, 0x12, 0x04, 0xaf, 0x03, + 0x1c, 0x2d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2c, 0x02, 0x02, 0x03, 0x12, 0x04, 0xaf, 0x03, 0x30, + 0x31, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2d, 0x12, 0x06, 0xb2, 0x03, 0x00, 0xb8, 0x03, 0x01, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x2d, 0x01, 0x12, 0x04, 0xb2, 0x03, 0x08, 0x19, 0x0a, 0x0c, 0x0a, 0x04, + 0x04, 0x2d, 0x02, 0x00, 0x12, 0x04, 0xb3, 0x03, 0x02, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, + 0x02, 0x00, 0x06, 0x12, 0x04, 0xb3, 0x03, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, + 0x00, 0x01, 0x12, 0x04, 0xb3, 0x03, 0x13, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x00, + 0x03, 0x12, 0x04, 0xb3, 0x03, 0x1c, 0x1d, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2d, 0x02, 0x01, 0x12, + 0x04, 0xb4, 0x03, 0x02, 0x31, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x01, 0x04, 0x12, 0x04, + 0xb4, 0x03, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x01, 0x05, 0x12, 0x04, 0xb4, + 0x03, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb4, 0x03, + 0x12, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb4, 0x03, 0x2f, + 0x30, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2d, 0x02, 0x02, 0x12, 0x04, 0xb5, 0x03, 0x02, 0x32, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x02, 0x04, 0x12, 0x04, 0xb5, 0x03, 0x02, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x02, 0x06, 0x12, 0x04, 0xb5, 0x03, 0x0b, 0x1b, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x2d, 0x02, 0x02, 0x01, 0x12, 0x04, 0xb5, 0x03, 0x1c, 0x2d, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x2d, 0x02, 0x02, 0x03, 0x12, 0x04, 0xb5, 0x03, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x2d, 0x02, 0x03, 0x12, 0x04, 0xb6, 0x03, 0x02, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, + 0x03, 0x05, 0x12, 0x04, 0xb6, 0x03, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x03, + 0x01, 0x12, 0x04, 0xb6, 0x03, 0x09, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x03, 0x03, + 0x12, 0x04, 0xb6, 0x03, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2d, 0x02, 0x04, 0x12, 0x04, + 0xb7, 0x03, 0x02, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x04, 0x06, 0x12, 0x04, 0xb7, + 0x03, 0x02, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x04, 0x01, 0x12, 0x04, 0xb7, 0x03, + 0x13, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2d, 0x02, 0x04, 0x03, 0x12, 0x04, 0xb7, 0x03, 0x26, + 0x27, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x2e, 0x12, 0x06, 0xba, 0x03, 0x00, 0xc6, 0x03, 0x01, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x2e, 0x01, 0x12, 0x04, 0xba, 0x03, 0x08, 0x18, 0x0a, 0x0e, 0x0a, 0x04, + 0x04, 0x2e, 0x04, 0x00, 0x12, 0x06, 0xbb, 0x03, 0x02, 0xbf, 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x2e, 0x04, 0x00, 0x01, 0x12, 0x04, 0xbb, 0x03, 0x07, 0x0b, 0x0a, 0x0e, 0x0a, 0x06, 0x04, + 0x2e, 0x04, 0x00, 0x02, 0x00, 0x12, 0x04, 0xbc, 0x03, 0x04, 0x19, 0x0a, 0x0f, 0x0a, 0x07, 0x04, + 0x2e, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0xbc, 0x03, 0x04, 0x14, 0x0a, 0x0f, 0x0a, 0x07, + 0x04, 0x2e, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0xbc, 0x03, 0x17, 0x18, 0x0a, 0x0e, 0x0a, + 0x06, 0x04, 0x2e, 0x04, 0x00, 0x02, 0x01, 0x12, 0x04, 0xbd, 0x03, 0x04, 0x15, 0x0a, 0x0f, 0x0a, + 0x07, 0x04, 0x2e, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0xbd, 0x03, 0x04, 0x10, 0x0a, 0x0f, + 0x0a, 0x07, 0x04, 0x2e, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0xbd, 0x03, 0x13, 0x14, 0x0a, + 0x0e, 0x0a, 0x06, 0x04, 0x2e, 0x04, 0x00, 0x02, 0x02, 0x12, 0x04, 0xbe, 0x03, 0x04, 0x1b, 0x0a, + 0x0f, 0x0a, 0x07, 0x04, 0x2e, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x04, 0xbe, 0x03, 0x04, 0x16, + 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x2e, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x04, 0xbe, 0x03, 0x19, + 0x1a, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2e, 0x02, 0x00, 0x12, 0x04, 0xc1, 0x03, 0x02, 0x10, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x00, 0x06, 0x12, 0x04, 0xc1, 0x03, 0x02, 0x06, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x00, 0x01, 0x12, 0x04, 0xc1, 0x03, 0x07, 0x0b, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x2e, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc1, 0x03, 0x0e, 0x0f, 0x0a, 0x0e, 0x0a, 0x04, + 0x04, 0x2e, 0x08, 0x00, 0x12, 0x06, 0xc2, 0x03, 0x02, 0xc5, 0x03, 0x03, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x2e, 0x08, 0x00, 0x01, 0x12, 0x04, 0xc2, 0x03, 0x08, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x2e, 0x02, 0x01, 0x12, 0x04, 0xc3, 0x03, 0x04, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, + 0x01, 0x06, 0x12, 0x04, 0xc3, 0x03, 0x04, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x01, + 0x01, 0x12, 0x04, 0xc3, 0x03, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x01, 0x03, + 0x12, 0x04, 0xc3, 0x03, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x2e, 0x02, 0x02, 0x12, 0x04, + 0xc4, 0x03, 0x04, 0x2c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x02, 0x06, 0x12, 0x04, 0xc4, + 0x03, 0x04, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x02, 0x01, 0x12, 0x04, 0xc4, 0x03, + 0x1a, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x2e, 0x02, 0x02, 0x03, 0x12, 0x04, 0xc4, 0x03, 0x2a, 0x2b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, ]; include!("aptos.transaction.v1.serde.rs"); diff --git a/crates/aptos-protos/src/pb/aptos.transaction.v1.serde.rs b/crates/aptos-protos/src/pb/aptos.transaction.v1.serde.rs index 49f6518a79bcc..7f2e5e6f7fb7e 100644 --- a/crates/aptos-protos/src/pb/aptos.transaction.v1.serde.rs +++ b/crates/aptos-protos/src/pb/aptos.transaction.v1.serde.rs @@ -1815,6 +1815,169 @@ impl<'de> serde::Deserialize<'de> for EventKey { deserializer.deserialize_struct("aptos.transaction.v1.EventKey", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for FeePayerSignature { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.sender.is_some() { + len += 1; + } + if !self.secondary_signer_addresses.is_empty() { + len += 1; + } + if !self.secondary_signers.is_empty() { + len += 1; + } + if !self.fee_payer_address.is_empty() { + len += 1; + } + if self.fee_payer_signer.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("aptos.transaction.v1.FeePayerSignature", len)?; + if let Some(v) = self.sender.as_ref() { + struct_ser.serialize_field("sender", v)?; + } + if !self.secondary_signer_addresses.is_empty() { + struct_ser.serialize_field("secondarySignerAddresses", &self.secondary_signer_addresses)?; + } + if !self.secondary_signers.is_empty() { + struct_ser.serialize_field("secondarySigners", &self.secondary_signers)?; + } + if !self.fee_payer_address.is_empty() { + struct_ser.serialize_field("feePayerAddress", &self.fee_payer_address)?; + } + if let Some(v) = self.fee_payer_signer.as_ref() { + struct_ser.serialize_field("feePayerSigner", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for FeePayerSignature { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "sender", + "secondary_signer_addresses", + "secondarySignerAddresses", + "secondary_signers", + "secondarySigners", + "fee_payer_address", + "feePayerAddress", + "fee_payer_signer", + "feePayerSigner", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Sender, + SecondarySignerAddresses, + SecondarySigners, + FeePayerAddress, + FeePayerSigner, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "sender" => Ok(GeneratedField::Sender), + "secondarySignerAddresses" | "secondary_signer_addresses" => Ok(GeneratedField::SecondarySignerAddresses), + "secondarySigners" | "secondary_signers" => Ok(GeneratedField::SecondarySigners), + "feePayerAddress" | "fee_payer_address" => Ok(GeneratedField::FeePayerAddress), + "feePayerSigner" | "fee_payer_signer" => Ok(GeneratedField::FeePayerSigner), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FeePayerSignature; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct aptos.transaction.v1.FeePayerSignature") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut sender__ = None; + let mut secondary_signer_addresses__ = None; + let mut secondary_signers__ = None; + let mut fee_payer_address__ = None; + let mut fee_payer_signer__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::Sender => { + if sender__.is_some() { + return Err(serde::de::Error::duplicate_field("sender")); + } + sender__ = map.next_value()?; + } + GeneratedField::SecondarySignerAddresses => { + if secondary_signer_addresses__.is_some() { + return Err(serde::de::Error::duplicate_field("secondarySignerAddresses")); + } + secondary_signer_addresses__ = Some(map.next_value()?); + } + GeneratedField::SecondarySigners => { + if secondary_signers__.is_some() { + return Err(serde::de::Error::duplicate_field("secondarySigners")); + } + secondary_signers__ = Some(map.next_value()?); + } + GeneratedField::FeePayerAddress => { + if fee_payer_address__.is_some() { + return Err(serde::de::Error::duplicate_field("feePayerAddress")); + } + fee_payer_address__ = Some(map.next_value()?); + } + GeneratedField::FeePayerSigner => { + if fee_payer_signer__.is_some() { + return Err(serde::de::Error::duplicate_field("feePayerSigner")); + } + fee_payer_signer__ = map.next_value()?; + } + } + } + Ok(FeePayerSignature { + sender: sender__, + secondary_signer_addresses: secondary_signer_addresses__.unwrap_or_default(), + secondary_signers: secondary_signers__.unwrap_or_default(), + fee_payer_address: fee_payer_address__.unwrap_or_default(), + fee_payer_signer: fee_payer_signer__, + }) + } + } + deserializer.deserialize_struct("aptos.transaction.v1.FeePayerSignature", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for GenesisTransaction { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -4700,6 +4863,9 @@ impl serde::Serialize for Signature { signature::Signature::MultiAgent(v) => { struct_ser.serialize_field("multiAgent", v)?; } + signature::Signature::FeePayer(v) => { + struct_ser.serialize_field("feePayer", v)?; + } } } struct_ser.end() @@ -4718,6 +4884,8 @@ impl<'de> serde::Deserialize<'de> for Signature { "multiEd25519", "multi_agent", "multiAgent", + "fee_payer", + "feePayer", ]; #[allow(clippy::enum_variant_names)] @@ -4726,6 +4894,7 @@ impl<'de> serde::Deserialize<'de> for Signature { Ed25519, MultiEd25519, MultiAgent, + FeePayer, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -4751,6 +4920,7 @@ impl<'de> serde::Deserialize<'de> for Signature { "ed25519" => Ok(GeneratedField::Ed25519), "multiEd25519" | "multi_ed25519" => Ok(GeneratedField::MultiEd25519), "multiAgent" | "multi_agent" => Ok(GeneratedField::MultiAgent), + "feePayer" | "fee_payer" => Ok(GeneratedField::FeePayer), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -4799,6 +4969,13 @@ impl<'de> serde::Deserialize<'de> for Signature { return Err(serde::de::Error::duplicate_field("multiAgent")); } signature__ = map.next_value::<::std::option::Option<_>>()?.map(signature::Signature::MultiAgent) +; + } + GeneratedField::FeePayer => { + if signature__.is_some() { + return Err(serde::de::Error::duplicate_field("feePayer")); + } + signature__ = map.next_value::<::std::option::Option<_>>()?.map(signature::Signature::FeePayer) ; } } @@ -4823,6 +5000,7 @@ impl serde::Serialize for signature::Type { Self::Ed25519 => "TYPE_ED25519", Self::MultiEd25519 => "TYPE_MULTI_ED25519", Self::MultiAgent => "TYPE_MULTI_AGENT", + Self::FeePayer => "TYPE_FEE_PAYER", }; serializer.serialize_str(variant) } @@ -4838,6 +5016,7 @@ impl<'de> serde::Deserialize<'de> for signature::Type { "TYPE_ED25519", "TYPE_MULTI_ED25519", "TYPE_MULTI_AGENT", + "TYPE_FEE_PAYER", ]; struct GeneratedVisitor; @@ -4884,6 +5063,7 @@ impl<'de> serde::Deserialize<'de> for signature::Type { "TYPE_ED25519" => Ok(signature::Type::Ed25519), "TYPE_MULTI_ED25519" => Ok(signature::Type::MultiEd25519), "TYPE_MULTI_AGENT" => Ok(signature::Type::MultiAgent), + "TYPE_FEE_PAYER" => Ok(signature::Type::FeePayer), _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), } } diff --git a/crates/aptos-protos/src/pb/aptos.util.timestamp.rs b/crates/aptos-protos/src/pb/aptos.util.timestamp.rs index a5fab0a9f9796..769ba8033297f 100644 --- a/crates/aptos-protos/src/pb/aptos.util.timestamp.rs +++ b/crates/aptos-protos/src/pb/aptos.util.timestamp.rs @@ -1,6 +1,7 @@ // Copyright © Aptos Foundation // @generated +#[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Timestamp { /// Represents seconds of UTC time since Unix epoch diff --git a/crates/indexer/src/models/signatures.rs b/crates/indexer/src/models/signatures.rs index ed842cfeb2cb7..58cb8509b1030 100644 --- a/crates/indexer/src/models/signatures.rs +++ b/crates/indexer/src/models/signatures.rs @@ -6,7 +6,7 @@ use crate::{models::transactions::Transaction, schema::signatures, util::standar use anyhow::{Context, Result}; use aptos_api_types::{ AccountSignature as APIAccountSignature, Ed25519Signature as APIEd25519Signature, - MultiAgentSignature as APIMultiAgentSignature, + FeePayerSignature as APIFeePayerSignature, MultiAgentSignature as APIMultiAgentSignature, MultiEd25519Signature as APIMultiEd25519Signature, TransactionSignature as APITransactionSignature, }; @@ -74,6 +74,12 @@ impl Signature { transaction_version, transaction_block_height, ), + APITransactionSignature::FeePayerSignature(sig) => Self::parse_fee_payer_signature( + sig, + sender, + transaction_version, + transaction_block_height, + ), } } @@ -86,6 +92,7 @@ impl Signature { APITransactionSignature::MultiAgentSignature(_) => { String::from("multi_agent_signature") }, + APITransactionSignature::FeePayerSignature(_) => String::from("fee_payer_signature"), } } @@ -192,6 +199,50 @@ impl Signature { Ok(signatures) } + fn parse_fee_payer_signature( + s: &APIFeePayerSignature, + sender: &String, + transaction_version: i64, + transaction_block_height: i64, + ) -> Result> { + let mut signatures = Vec::default(); + // process sender signature + signatures.append(&mut Self::parse_multi_agent_signature_helper( + &s.sender, + sender, + transaction_version, + transaction_block_height, + true, + 0, + None, + )); + for (index, address) in s.secondary_signer_addresses.iter().enumerate() { + let secondary_sig = s.secondary_signers.get(index).context(format!( + "Failed to parse index {} for multi agent secondary signers", + index + ))?; + signatures.append(&mut Self::parse_multi_agent_signature_helper( + secondary_sig, + sender, + transaction_version, + transaction_block_height, + false, + index as i64, + Some(&address.to_string()), + )); + } + signatures.append(&mut Self::parse_multi_agent_signature_helper( + &s.fee_payer_signer, + sender, + transaction_version, + transaction_block_height, + true, + (s.secondary_signer_addresses.len() + 1) as i64, + Some(&s.fee_payer_address.to_string()), + )); + Ok(signatures) + } + fn parse_multi_agent_signature_helper( s: &APIAccountSignature, sender: &String, diff --git a/ecosystem/indexer-grpc/indexer-grpc-fullnode/src/convert.rs b/ecosystem/indexer-grpc/indexer-grpc-fullnode/src/convert.rs index 86d923ead1417..4ec65b7fc6973 100644 --- a/ecosystem/indexer-grpc/indexer-grpc-fullnode/src/convert.rs +++ b/ecosystem/indexer-grpc/indexer-grpc-fullnode/src/convert.rs @@ -594,6 +594,7 @@ pub fn convert_transaction_signature( transaction::signature::Type::MultiEd25519 }, TransactionSignature::MultiAgentSignature(_) => transaction::signature::Type::MultiAgent, + TransactionSignature::FeePayerSignature(_) => transaction::signature::Type::FeePayer, }; let signature = match signature { @@ -618,6 +619,23 @@ pub fn convert_transaction_signature( .collect(), }) }, + TransactionSignature::FeePayerSignature(s) => { + transaction::signature::Signature::FeePayer(transaction::FeePayerSignature { + sender: Some(convert_account_signature(&s.sender)), + secondary_signer_addresses: s + .secondary_signer_addresses + .iter() + .map(|s| s.to_string()) + .collect(), + secondary_signers: s + .secondary_signers + .iter() + .map(convert_account_signature) + .collect(), + fee_payer_address: s.fee_payer_address.to_string(), + fee_payer_signer: Some(convert_account_signature(&s.fee_payer_signer)), + }) + }, }; Some(transaction::Signature { diff --git a/ecosystem/indexer-grpc/indexer-grpc-parser/src/models/default_models/signatures.rs b/ecosystem/indexer-grpc/indexer-grpc-parser/src/models/default_models/signatures.rs index 3b3bf94721891..bfaa17e1d7b96 100644 --- a/ecosystem/indexer-grpc/indexer-grpc-parser/src/models/default_models/signatures.rs +++ b/ecosystem/indexer-grpc/indexer-grpc-parser/src/models/default_models/signatures.rs @@ -9,7 +9,7 @@ use anyhow::{Context, Result}; use aptos_protos::transaction::v1::{ account_signature::Signature as AccountSignatureEnum, signature::Signature as SignatureEnum, AccountSignature as ProtoAccountSignature, Ed25519Signature as Ed25519SignaturePB, - MultiAgentSignature as ProtoMultiAgentSignature, + FeePayerSignature as ProtoFeePayerSignature, MultiAgentSignature as ProtoMultiAgentSignature, MultiEd25519Signature as ProtoMultiEd25519Signature, Signature as TransactionSignaturePB, }; use field_count::FieldCount; @@ -73,6 +73,12 @@ impl Signature { transaction_version, transaction_block_height, ), + SignatureEnum::FeePayer(sig) => Self::parse_fee_payer_signature( + sig, + sender, + transaction_version, + transaction_block_height, + ), } } @@ -81,6 +87,7 @@ impl Signature { SignatureEnum::Ed25519(_) => String::from("ed25519_signature"), SignatureEnum::MultiEd25519(_) => String::from("multi_ed25519_signature"), SignatureEnum::MultiAgent(_) => String::from("multi_agent_signature"), + SignatureEnum::FeePayer(_) => String::from("fee_payer_signature"), } } @@ -191,6 +198,50 @@ impl Signature { Ok(signatures) } + fn parse_fee_payer_signature( + s: &ProtoFeePayerSignature, + sender: &String, + transaction_version: i64, + transaction_block_height: i64, + ) -> Result> { + let mut signatures = Vec::default(); + // process sender signature + signatures.append(&mut Self::parse_multi_agent_signature_helper( + s.sender.as_ref().unwrap(), + sender, + transaction_version, + transaction_block_height, + true, + 0, + None, + )); + for (index, address) in s.secondary_signer_addresses.iter().enumerate() { + let secondary_sig = s.secondary_signers.get(index).context(format!( + "Failed to parse index {} for multi agent secondary signers", + index + ))?; + signatures.append(&mut Self::parse_multi_agent_signature_helper( + secondary_sig, + sender, + transaction_version, + transaction_block_height, + false, + index as i64, + Some(&address.to_string()), + )); + } + signatures.append(&mut Self::parse_multi_agent_signature_helper( + s.fee_payer_signer.as_ref().unwrap(), + sender, + transaction_version, + transaction_block_height, + true, + (s.secondary_signer_addresses.len() + 1) as i64, + Some(&s.fee_payer_address.to_string()), + )); + Ok(signatures) + } + fn parse_multi_agent_signature_helper( s: &ProtoAccountSignature, sender: &String, diff --git a/ecosystem/typescript/sdk/src/generated/index.ts b/ecosystem/typescript/sdk/src/generated/index.ts index e925af3a8eb10..e852a3e5f6d7f 100644 --- a/ecosystem/typescript/sdk/src/generated/index.ts +++ b/ecosystem/typescript/sdk/src/generated/index.ts @@ -30,6 +30,7 @@ export type { EntryFunctionId } from './models/EntryFunctionId'; export type { EntryFunctionPayload } from './models/EntryFunctionPayload'; export type { Event } from './models/Event'; export type { EventGuid } from './models/EventGuid'; +export type { FeePayerSignature } from './models/FeePayerSignature'; export type { GasEstimation } from './models/GasEstimation'; export type { GenesisPayload } from './models/GenesisPayload'; export type { GenesisPayload_WriteSetPayload } from './models/GenesisPayload_WriteSetPayload'; @@ -84,6 +85,7 @@ export type { TransactionsBatchSingleSubmissionFailure } from './models/Transact export type { TransactionsBatchSubmissionResult } from './models/TransactionsBatchSubmissionResult'; export type { TransactionSignature } from './models/TransactionSignature'; export type { TransactionSignature_Ed25519Signature } from './models/TransactionSignature_Ed25519Signature'; +export type { TransactionSignature_FeePayerSignature } from './models/TransactionSignature_FeePayerSignature'; export type { TransactionSignature_MultiAgentSignature } from './models/TransactionSignature_MultiAgentSignature'; export type { TransactionSignature_MultiEd25519Signature } from './models/TransactionSignature_MultiEd25519Signature'; export type { U128 } from './models/U128'; @@ -128,6 +130,7 @@ export { $EntryFunctionId } from './schemas/$EntryFunctionId'; export { $EntryFunctionPayload } from './schemas/$EntryFunctionPayload'; export { $Event } from './schemas/$Event'; export { $EventGuid } from './schemas/$EventGuid'; +export { $FeePayerSignature } from './schemas/$FeePayerSignature'; export { $GasEstimation } from './schemas/$GasEstimation'; export { $GenesisPayload } from './schemas/$GenesisPayload'; export { $GenesisPayload_WriteSetPayload } from './schemas/$GenesisPayload_WriteSetPayload'; @@ -182,6 +185,7 @@ export { $TransactionsBatchSingleSubmissionFailure } from './schemas/$Transactio export { $TransactionsBatchSubmissionResult } from './schemas/$TransactionsBatchSubmissionResult'; export { $TransactionSignature } from './schemas/$TransactionSignature'; export { $TransactionSignature_Ed25519Signature } from './schemas/$TransactionSignature_Ed25519Signature'; +export { $TransactionSignature_FeePayerSignature } from './schemas/$TransactionSignature_FeePayerSignature'; export { $TransactionSignature_MultiAgentSignature } from './schemas/$TransactionSignature_MultiAgentSignature'; export { $TransactionSignature_MultiEd25519Signature } from './schemas/$TransactionSignature_MultiEd25519Signature'; export { $U128 } from './schemas/$U128'; diff --git a/ecosystem/typescript/sdk/src/generated/models/FeePayerSignature.ts b/ecosystem/typescript/sdk/src/generated/models/FeePayerSignature.ts new file mode 100644 index 0000000000000..4f01fa13ce8e8 --- /dev/null +++ b/ecosystem/typescript/sdk/src/generated/models/FeePayerSignature.ts @@ -0,0 +1,26 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { AccountSignature } from './AccountSignature'; +import type { Address } from './Address'; + +/** + * Fee payer signature for fee payer transactions + * + * This allows you to have transactions across multiple accounts and with a fee payer + */ +export type FeePayerSignature = { + sender: AccountSignature; + /** + * The other involved parties' addresses + */ + secondary_signer_addresses: Array
; + /** + * The associated signatures, in the same order as the secondary addresses + */ + secondary_signers: Array; + fee_payer_address: Address; + fee_payer_signer: AccountSignature; +}; + diff --git a/ecosystem/typescript/sdk/src/generated/models/TransactionSignature.ts b/ecosystem/typescript/sdk/src/generated/models/TransactionSignature.ts index b3861fbdb2ba8..0ddc7dcc48ba2 100644 --- a/ecosystem/typescript/sdk/src/generated/models/TransactionSignature.ts +++ b/ecosystem/typescript/sdk/src/generated/models/TransactionSignature.ts @@ -3,11 +3,12 @@ /* eslint-disable */ import type { TransactionSignature_Ed25519Signature } from './TransactionSignature_Ed25519Signature'; +import type { TransactionSignature_FeePayerSignature } from './TransactionSignature_FeePayerSignature'; import type { TransactionSignature_MultiAgentSignature } from './TransactionSignature_MultiAgentSignature'; import type { TransactionSignature_MultiEd25519Signature } from './TransactionSignature_MultiEd25519Signature'; /** * An enum representing the different transaction signatures available */ -export type TransactionSignature = (TransactionSignature_Ed25519Signature | TransactionSignature_MultiEd25519Signature | TransactionSignature_MultiAgentSignature); +export type TransactionSignature = (TransactionSignature_Ed25519Signature | TransactionSignature_MultiEd25519Signature | TransactionSignature_MultiAgentSignature | TransactionSignature_FeePayerSignature); diff --git a/ecosystem/typescript/sdk/src/generated/models/TransactionSignature_FeePayerSignature.ts b/ecosystem/typescript/sdk/src/generated/models/TransactionSignature_FeePayerSignature.ts new file mode 100644 index 0000000000000..c16bc6bd71d09 --- /dev/null +++ b/ecosystem/typescript/sdk/src/generated/models/TransactionSignature_FeePayerSignature.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { FeePayerSignature } from './FeePayerSignature'; + +export type TransactionSignature_FeePayerSignature = ({ + type: string; +} & FeePayerSignature); + diff --git a/ecosystem/typescript/sdk/src/generated/schemas/$FeePayerSignature.ts b/ecosystem/typescript/sdk/src/generated/schemas/$FeePayerSignature.ts new file mode 100644 index 0000000000000..84a6168929d40 --- /dev/null +++ b/ecosystem/typescript/sdk/src/generated/schemas/$FeePayerSignature.ts @@ -0,0 +1,42 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $FeePayerSignature = { + description: `Fee payer signature for fee payer transactions + + This allows you to have transactions across multiple accounts and with a fee payer`, + properties: { + sender: { + type: 'AccountSignature', + isRequired: true, + }, + secondary_signer_addresses: { + type: 'array', + contains: { + type: 'Address', + }, + isRequired: true, + }, + secondary_signers: { + type: 'array', + contains: { + type: 'AccountSignature', + }, + isRequired: true, + }, + fee_payer_address: { + type: 'all-of', + contains: [{ + type: 'Address', + }], + isRequired: true, + }, + fee_payer_signer: { + type: 'all-of', + contains: [{ + type: 'AccountSignature', + }], + isRequired: true, + }, + }, +} as const; diff --git a/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature.ts b/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature.ts index 08df557f28dca..d307e187c5fab 100644 --- a/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature.ts +++ b/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature.ts @@ -10,5 +10,7 @@ export const $TransactionSignature = { type: 'TransactionSignature_MultiEd25519Signature', }, { type: 'TransactionSignature_MultiAgentSignature', + }, { + type: 'TransactionSignature_FeePayerSignature', }], } as const; diff --git a/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature_FeePayerSignature.ts b/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature_FeePayerSignature.ts new file mode 100644 index 0000000000000..51ab1f1c8deea --- /dev/null +++ b/ecosystem/typescript/sdk/src/generated/schemas/$TransactionSignature_FeePayerSignature.ts @@ -0,0 +1,16 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $TransactionSignature_FeePayerSignature = { + type: 'all-of', + contains: [{ + properties: { + type: { + type: 'string', + isRequired: true, + }, + }, + }, { + type: 'FeePayerSignature', + }], +} as const; diff --git a/execution/executor/src/mock_vm/mod.rs b/execution/executor/src/mock_vm/mod.rs index 237843725395b..b9a8f5f969556 100644 --- a/execution/executor/src/mock_vm/mod.rs +++ b/execution/executor/src/mock_vm/mod.rs @@ -423,7 +423,6 @@ fn decode_transaction(txn: &SignedTransaction) -> MockVMTransaction { TransactionPayload::Multisig(_) => { unimplemented!("MockVM does not support multisig transaction payload.") }, - // Deprecated. Will be removed in the future. TransactionPayload::ModuleBundle(_) => { unimplemented!("MockVM does not support Module transaction payload.") diff --git a/sdk/src/types.rs b/sdk/src/types.rs index 6bd1789032bd9..22486cb0fdfa5 100644 --- a/sdk/src/types.rs +++ b/sdk/src/types.rs @@ -128,6 +128,37 @@ impl LocalAccount { .into_inner() } + pub fn sign_fee_payer_with_transaction_builder( + &mut self, + secondary_signers: Vec<&Self>, + fee_payer_signer: &Self, + builder: TransactionBuilder, + ) -> SignedTransaction { + let secondary_signer_addresses = secondary_signers + .iter() + .map(|signer| signer.address()) + .collect(); + let secondary_signer_privkeys = secondary_signers + .iter() + .map(|signer| signer.private_key()) + .collect(); + let raw_txn = builder + .sender(self.address()) + .sequence_number(self.sequence_number()) + .build(); + *self.sequence_number_mut() += 1; + raw_txn + .sign_fee_payer( + self.private_key(), + secondary_signer_addresses, + secondary_signer_privkeys, + fee_payer_signer.address(), + fee_payer_signer.private_key(), + ) + .expect("Signing multi agent txn failed") + .into_inner() + } + pub fn address(&self) -> AccountAddress { self.address } diff --git a/testsuite/generate-format/tests/staged/api.yaml b/testsuite/generate-format/tests/staged/api.yaml index 45c869deeeb14..1073420d1a229 100644 --- a/testsuite/generate-format/tests/staged/api.yaml +++ b/testsuite/generate-format/tests/staged/api.yaml @@ -330,6 +330,21 @@ TransactionAuthenticator: - secondary_signers: SEQ: TYPENAME: AccountAuthenticator + 3: + FeePayer: + STRUCT: + - sender: + TYPENAME: AccountAuthenticator + - secondary_signer_addresses: + SEQ: + TYPENAME: AccountAddress + - secondary_signers: + SEQ: + TYPENAME: AccountAuthenticator + - fee_payer_address: + TYPENAME: AccountAddress + - fee_payer_signer: + TYPENAME: AccountAuthenticator TransactionData: ENUM: 0: diff --git a/testsuite/generate-format/tests/staged/aptos.yaml b/testsuite/generate-format/tests/staged/aptos.yaml index 51f0fa2b1a30d..bf44c8bcc8455 100644 --- a/testsuite/generate-format/tests/staged/aptos.yaml +++ b/testsuite/generate-format/tests/staged/aptos.yaml @@ -262,6 +262,21 @@ TransactionAuthenticator: - secondary_signers: SEQ: TYPENAME: AccountAuthenticator + 3: + FeePayer: + STRUCT: + - sender: + TYPENAME: AccountAuthenticator + - secondary_signer_addresses: + SEQ: + TYPENAME: AccountAddress + - secondary_signers: + SEQ: + TYPENAME: AccountAuthenticator + - fee_payer_address: + TYPENAME: AccountAddress + - fee_payer_signer: + TYPENAME: AccountAuthenticator TransactionPayload: ENUM: 0: diff --git a/testsuite/generate-format/tests/staged/consensus.yaml b/testsuite/generate-format/tests/staged/consensus.yaml index 7c3d0692b2f1e..888875c6567ff 100644 --- a/testsuite/generate-format/tests/staged/consensus.yaml +++ b/testsuite/generate-format/tests/staged/consensus.yaml @@ -577,6 +577,21 @@ TransactionAuthenticator: - secondary_signers: SEQ: TYPENAME: AccountAuthenticator + 3: + FeePayer: + STRUCT: + - sender: + TYPENAME: AccountAuthenticator + - secondary_signer_addresses: + SEQ: + TYPENAME: AccountAddress + - secondary_signers: + SEQ: + TYPENAME: AccountAuthenticator + - fee_payer_address: + TYPENAME: AccountAddress + - fee_payer_signer: + TYPENAME: AccountAuthenticator TransactionPayload: ENUM: 0: diff --git a/types/src/transaction/authenticator.rs b/types/src/transaction/authenticator.rs index 82203a9fe1ded..400ca8a90360e 100644 --- a/types/src/transaction/authenticator.rs +++ b/types/src/transaction/authenticator.rs @@ -57,6 +57,14 @@ pub enum TransactionAuthenticator { secondary_signer_addresses: Vec, secondary_signers: Vec, }, + /// Optional Multi-agent transaction with a fee payer. + FeePayer { + sender: AccountAuthenticator, + secondary_signer_addresses: Vec, + secondary_signers: Vec, + fee_payer_address: AccountAddress, + fee_payer_signer: AccountAuthenticator, + }, } impl TransactionAuthenticator { @@ -68,6 +76,23 @@ impl TransactionAuthenticator { } } + /// Create a (optional) multi-agent fee payer authenticator + pub fn fee_payer( + sender: AccountAuthenticator, + secondary_signer_addresses: Vec, + secondary_signers: Vec, + fee_payer_address: AccountAddress, + fee_payer_signer: AccountAuthenticator, + ) -> Self { + Self::FeePayer { + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + } + } + /// Create a multisignature ed25519 authenticator pub fn multi_ed25519( public_key: MultiEd25519PublicKey, @@ -108,6 +133,27 @@ impl TransactionAuthenticator { public_key, signature, } => signature.verify(raw_txn, public_key), + Self::FeePayer { + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + } => { + // We need to include the fee payer and other signer addresses in the payload data + // to sign. + let message = RawTransactionWithData::new_fee_payer( + raw_txn.clone(), + secondary_signer_addresses.clone(), + *fee_payer_address, + ); + sender.verify(&message)?; + for signer in secondary_signers { + signer.verify(&message)?; + } + fee_payer_signer.verify(&message)?; + Ok(()) + }, Self::MultiEd25519 { public_key, signature, @@ -139,6 +185,7 @@ impl TransactionAuthenticator { public_key: public_key.clone(), signature: signature.clone(), }, + Self::FeePayer { sender, .. } => sender.clone(), Self::MultiEd25519 { public_key, signature, @@ -154,6 +201,11 @@ impl TransactionAuthenticator { public_key: _, signature: _, } => vec![], + Self::FeePayer { + sender: _, + secondary_signer_addresses, + .. + } => secondary_signer_addresses.to_vec(), Self::MultiAgent { sender: _, secondary_signer_addresses, @@ -169,6 +221,12 @@ impl TransactionAuthenticator { public_key: _, signature: _, } => vec![], + Self::FeePayer { + sender: _, + secondary_signer_addresses: _, + secondary_signers, + .. + } => secondary_signers.to_vec(), Self::MultiAgent { sender: _, secondary_signer_addresses: _, @@ -176,6 +234,32 @@ impl TransactionAuthenticator { } => secondary_signers.to_vec(), } } + + pub fn fee_payer_address(&self) -> Option { + match self { + Self::Ed25519 { .. } | Self::MultiEd25519 { .. } | Self::MultiAgent { .. } => None, + Self::FeePayer { + sender: _, + secondary_signer_addresses: _, + secondary_signers: _, + fee_payer_address, + .. + } => Some(*fee_payer_address), + } + } + + pub fn fee_payer_signer(&self) -> Option { + match self { + Self::Ed25519 { .. } | Self::MultiEd25519 { .. } | Self::MultiAgent { .. } => None, + Self::FeePayer { + sender: _, + secondary_signer_addresses: _, + secondary_signers: _, + fee_payer_address: _, + fee_payer_signer, + } => Some(fee_payer_signer.clone()), + } + } } impl fmt::Display for TransactionAuthenticator { @@ -191,6 +275,33 @@ impl fmt::Display for TransactionAuthenticator { self.sender() ) }, + Self::FeePayer { + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + } => { + let mut sec_addrs: String = "".to_string(); + for sec_addr in secondary_signer_addresses { + sec_addrs = format!("{}\n\t\t\t{:#?},", sec_addrs, sec_addr); + } + let mut sec_signers: String = "".to_string(); + for sec_signer in secondary_signers { + sec_signers = format!("{}\n\t\t\t{:#?},", sec_signers, sec_signer); + } + write!( + f, + "TransactionAuthenticator[\n\ + \tscheme: MultiAgent, \n\ + \tsender: {}\n\ + \tsecondary signer addresses: {}\n\ + \tsecondary signers: {}\n\n + \tfee payer address: {}\n\n + \tfee payer signer: {}]", + sender, sec_addrs, sec_signers, fee_payer_address, fee_payer_signer, + ) + }, Self::MultiEd25519 { public_key: _, signature: _, diff --git a/types/src/transaction/mod.rs b/types/src/transaction/mod.rs index a7e4fd5c4ac83..c636dae480ae8 100644 --- a/types/src/transaction/mod.rs +++ b/types/src/transaction/mod.rs @@ -283,6 +283,63 @@ impl RawTransaction { )) } + /// Signs the given fee-payer `RawTransaction`, which is a transaction with secondary + /// signers and a gas payer in addition to a sender. The private keys of the sender, the + /// secondary signers, and gas payer signer are used to sign the transaction. + /// + /// The order and length of the secondary keys provided here have to match the order and + /// length of the `secondary_signers`. + pub fn sign_fee_payer( + self, + sender_private_key: &Ed25519PrivateKey, + secondary_signers: Vec, + secondary_private_keys: Vec<&Ed25519PrivateKey>, + fee_payer_address: AccountAddress, + fee_payer_private_key: &Ed25519PrivateKey, + ) -> Result { + let message = RawTransactionWithData::new_fee_payer( + self.clone(), + secondary_signers.clone(), + fee_payer_address, + ); + let sender_signature = sender_private_key.sign(&message)?; + let sender_authenticator = AccountAuthenticator::ed25519( + Ed25519PublicKey::from(sender_private_key), + sender_signature, + ); + + if secondary_private_keys.len() != secondary_signers.len() { + return Err(format_err!( + "number of secondary private keys and number of secondary signers don't match" + )); + } + let mut secondary_authenticators = vec![]; + for priv_key in secondary_private_keys { + let signature = priv_key.sign(&message)?; + secondary_authenticators.push(AccountAuthenticator::ed25519( + Ed25519PublicKey::from(priv_key), + signature, + )); + } + + let fee_payer_signature = fee_payer_private_key.sign(&message)?; + let fee_payer_authenticator = AccountAuthenticator::ed25519( + Ed25519PublicKey::from(fee_payer_private_key), + fee_payer_signature, + ); + + Ok(SignatureCheckedTransaction( + SignedTransaction::new_fee_payer( + self, + sender_authenticator, + secondary_signers, + secondary_authenticators, + fee_payer_address, + fee_payer_authenticator, + ), + )) + } + #[cfg(any(test, feature = "fuzzing"))] pub fn multi_sign_for_testing( self, @@ -366,9 +423,26 @@ pub enum RawTransactionWithData { raw_txn: RawTransaction, secondary_signer_addresses: Vec, }, + MultiAgentWithFeePayer { + raw_txn: RawTransaction, + secondary_signer_addresses: Vec, + fee_payer_address: AccountAddress, + }, } impl RawTransactionWithData { + pub fn new_fee_payer( + raw_txn: RawTransaction, + secondary_signer_addresses: Vec, + fee_payer_address: AccountAddress, + ) -> Self { + Self::MultiAgentWithFeePayer { + raw_txn, + secondary_signer_addresses, + fee_payer_address, + } + } + pub fn new_multi_agent( raw_txn: RawTransaction, secondary_signer_addresses: Vec, @@ -509,6 +583,27 @@ impl SignedTransaction { } } + pub fn new_fee_payer( + raw_txn: RawTransaction, + sender: AccountAuthenticator, + secondary_signer_addresses: Vec, + secondary_signers: Vec, + fee_payer_address: AccountAddress, + fee_payer_signer: AccountAuthenticator, + ) -> Self { + SignedTransaction { + raw_txn, + authenticator: TransactionAuthenticator::fee_payer( + sender, + secondary_signer_addresses, + secondary_signers, + fee_payer_address, + fee_payer_signer, + ), + size: OnceCell::new(), + } + } + pub fn new_multisig( raw_txn: RawTransaction, public_key: MultiEd25519PublicKey,